gratifiant > microsoft.* > microsoft.excel

Elie Chayo (18/04/2017, 21h57)
Bonsoir,
Pour éliminer des caractères spéciaux d'une cellule "1 127,62 â?¬ ", j'ai essayé "rechercher/remplacer" mais leschiffres affichés sont faux souvent multipliés par 1000.
J'ai pensé à utiliser la fonction gauche en copiant la 1ere cellule de la colonne contenant ces signes sur une autre colonne, puis de faire copie incrémentielle de la formule. La manoeuvre manuelle réussitparfaitement. mais traduit dans une macro:

"'copier la cellule H6 sans les signes puis copie incrémentielle
Range("O6").Select
ActiveCell.FormulaR1C1 = "=LEFT(RC[-7],LEN(RC[-7])-4)"
Range("O6").Select
Selection.AutoFill Destination:=Range("O6:60"), Type:=xlFillDefault

J'ai déclanché une macro pour cette fonction et j'ai les mêmes lignes. Le lancement de la macro bloque sur la dernière ligne et ledébogage indique:
"la méthode "Range" de l'objet'_Global' a échoué"
Pouvez-vous me dire ce qui ne marche pas.
Eventuellement que pensez-vous d'une boucle pour copier avec cette même fonction les cellules successivement?
Merci
MichD (18/04/2017, 22h48)
Bonjour,

Essaie comme ceci :

'----------------------------------------
Sub test()
With ActiveSheet
With .Range("O6")
.Formula = "=LEFT(H6,LEN(H6)-4)"
End With
.Range("o6").AutoFill Destination:=.Range("o6:o60"), Type:=xlFillDefault
End With
End Sub
'----------------------------------------

MichD
MichD (18/04/2017, 22h53)
Et si tu veux faire disparaître les formules à la suite de l'extraction

'----------------------------------------
Sub test()
With ActiveSheet
With .Range("O6")
.Formula = "=LEFT(H6,LEN(H6)-4)"
End With
.Range("o6").AutoFill Destination:=.Range("o6:o60"), Type:=xlFillDefault
.Range("o6:o60").value = .Range("o6:o60").value '<<<=== Ligne ajoutée
End With
End Sub
'------------------------------------------

MichD
Jacquouille (18/04/2017, 22h59)
Salut Denis
j'ai bien essayé de copier ton msg pour l'envoyer sur le fil "commentaires".
mais, il n'a pas voulu sortir de mon PC et encore moins arriver à
destination.
désolé, je ne puis donc t'aider. ( ah, ces caractères unicodes...)
Bonne soirée

Jacques
" Le vin est au repas ce que le parfum est à la femme."
..
"MichD" a écrit dans le message de groupe de discussion :
od5qrk$11bs$1...

Et si tu veux faire disparaître les formules à la suite de l'extraction

'----------------------------------------
Sub test()
With ActiveSheet
With .Range("O6")
.Formula = "=LEFT(H6,LEN(H6)-4)"
End With
.Range("o6").AutoFill Destination:=.Range("o6:o60"), Type:=xlFillDefault
.Range("o6:o60").value = .Range("o6:o60").value '<<<=== Ligne ajoutée
End With
End Sub
'------------------------------------------

MichD
MichD (18/04/2017, 23h22)
Il y a aussi cette manière de procéder :

'----------------------------------------------------------
Sub test1()
Dim Rg As Range, DerLig As Long
'Rg est une variable "OBJECT" de type RANGE.

With ActiveSheet
'Détermine la dernière ligne occupée de la colonne H
'la colonne H contient les données
DerLig = .Range("h" & .Rows.Count).End(xlUp).Row
'Détermine la plage à traiter
Set Rg = .Range("o6:o" & DerLig)
End With

'D'un seul coup copie la formule sur toute la plage
With Rg
.Formula = "=LEFT(" & Rg(1).Offset(, -7).Address(0, 0) & "," &
Len(Rg(1).Offset(, -7).Value) - 4 & ")"
'Remplace les formules par la valeur seulement
.Value = .Value
End With
End Sub
'----------------------------------------------------------

MichD

"MichD" a écrit dans le message de groupe de discussion : od5qrk$11bs$1...

Et si tu veux faire disparaître les formules à la suite de l'extraction

'----------------------------------------
Sub test()
With ActiveSheet
With .Range("O6")
.Formula = "=LEFT(H6,LEN(H6)-4)"
End With
.Range("o6").AutoFill Destination:=.Range("o6:o60"), Type:=xlFillDefault
.Range("o6:o60").value = .Range("o6:o60").value '<<<=== Ligne ajoutée
End With
End Sub
'------------------------------------------

MichD
MichD (18/04/2017, 23h24)
Merci quand même Jacquouille.

Les applications Microsoft sont décevantes!

MichD
isabelle (19/04/2017, 05h52)
salut vous deux,
Denis, j'ai posté ton message directement sur

j'avais essayé auparavant sur mozilla mais sans succès
isabelle

Le 2017-04-18 à 16:24, MichD a écrit :
Elie Chayo (19/04/2017, 12h15)
Le mercredi 19 avril 2017 05:52:21 UTC+3, isabelle a écrit :
> salut vous deux,
> Denis, j'ai posté ton message directement sur
>
> j'avais essayé auparavant sur mozilla mais sans succès
> isabelle
> Le 2017-04-18 à 16:24, MichD a écrit :


Bonjour à vous tous et merci de vos réponses,
Salut MichD, je n'ai pas voulu te solliciter de nouveau car je t'avais suffisament accaparé.
J'ai trouvé ce moyen de supprimer les caractères puis de transformer les données en nombres pour les recoller dans la colonne d'origine.. C'est peut-être un peu compliqué mais cela fonctionne manuellement.
Je vais essayer de digérer ce que vous me donnez.
Encore merci
Elie Chayo (19/04/2017, 12h41)
Le mercredi 19 avril 2017 12:15:37 UTC+3, Elie Chayo a écrit :
> Le mercredi 19 avril 2017 05:52:21 UTC+3, isabelle a écrit :
> Bonjour à vous tous et merci de vos réponses,
> Salut MichD, je n'ai pas voulu te solliciter de nouveau car je t'avais suffisament accaparé.
> J'ai trouvé ce moyen de supprimer les caractères puis de transformer les données en nombres pour les recoller dans la colonne d'origine. C'est peut-être un peu compliqué mais cela fonctionne manuellement.
> Je vais essayer de digérer ce que vous me donnez.
> Encore merci


Re MichD,
De toutes les 3 formules que tu m'as données, en réalité la 3eme regroupe le tout. C'est celle que je vais appliquer.
En regardant la 1ere macro très ancienne, il y avait la même procédure pour déterminer la dernière ligne et copier le tout; cela permettait de la coller ensuite à la suite des procédantes pour regrouper tout sur une seule feuille.
Si comme je l'espère cela fonctionne, tout va être simplifié..
MichD (19/04/2017, 13h20)
Merci Isabelle.

MichD
MichD (19/04/2017, 13h35)
Si à la fin de la procédure, tu désires copier le résultat de la colonne O vers la colonne H,
il manque une ligne de code...
Regarde la dernière ligne de la procédure!

'--------------------------------------------------------------
Sub test1()
Dim Rg As Range, DerLig As Long
'Rg est une variable "OBJECT" de type RANGE.

With ActiveSheet
'Détermine la dernière ligne occupée de la colonne H
'la colonne H contient les données
DerLig = .Range("h" & .Rows.Count).End(xlUp).Row
'Détermine la plage à traiter
Set Rg = .Range("o6:o" & DerLig)
End With

'D'un seul coup copie la formule sur toute la plage
With Rg
.Formula = "=LEFT(" & Rg(1).Offset(, -7).Address(0, 0) & _
"," & Len(Rg(1).Offset(, -7).Value) - 4 & ")"
'Remplace les formules par la valeur seulement
.Value = .Value
.Cut Rg.Offset(, -7) '<<<<======= Ligne ajoutée
End With
End Sub
'--------------------------------------------------------------

MichD
Elie Chayo (19/04/2017, 13h39)
Le mercredi 19 avril 2017 13:35:13 UTC+3, MichD a écrit :
[..]
> End Sub
> '--------------------------------------------------------------
> MichD


Toujours là! Je suis presque gêné!
La dernière macro a bloqué; Regarde

MichD (19/04/2017, 13h58)
La formule s'écrit sur une seule ligne, mais comme cette dernière est longue, le service de
messagerie l'a transposée sur 2 lignes. Tu dois la remettre sur une seule ligne dans Excel où
utiliser cette syntaxe.

..Formula = "=LEFT(" & Rg(1).Offset(, -7).Address(0, 0) & _
"," & Len(Rg(1).Offset(, -7).Value) - 4 & ")"

MichD
Elie Chayo (19/04/2017, 21h28)
Le mercredi 19 avril 2017 13:58:10 UTC+3, MichD a écrit :
> La formule s'écrit sur une seule ligne, mais comme cette dernière est longue, le service de
> messagerie l'a transposée sur 2 lignes. Tu dois la remettre sur une seule ligne dans Excel où
> utiliser cette syntaxe.
> .Formula = "=LEFT(" & Rg(1).Offset(, -7).Address(0, 0) & _
> "," & Len(Rg(1).Offset(, -7).Value) - 4 & ")"
> MichD


Bonsoir MichD,
Maintenant cela fonctionne bien. J'ai supprimé des lignes que j'avais qui empéchaient la fin de la macro.
Je vais maintenant transposer les lettres pour avoir le même résultat pour les colonnes I et K . Tu as résolu le problème de la transcription erronée des chiffres.
Idem pour appliquer aux 2 autres feuilles en changeant le nom de la feuille.. Et enfin copier/coller toutes les données des 2 dernières feuilles sur la fenêtre résultat que j'ai ouvert en premier.
Merci d'avoir accepté de m'aider de nouveau; si je n'y arrive pas, je sais à qui m'adresser.
Elie Chayo (20/04/2017, 19h35)
Le mercredi 19 avril 2017 21:28:05 UTC+3, Elie Chayo a écrit :
> Le mercredi 19 avril 2017 13:58:10 UTC+3, MichD a écrit :
> Bonsoir MichD,
> Maintenant cela fonctionne bien. J'ai supprimé des lignes que j'avais qui empéchaient la fin de la macro.
> Je vais maintenant transposer les lettres pour avoir le même résultat pour les colonnes I et K . Tu as résolu le problème de la transcription erronée des chiffres.
> Idem pour appliquer aux 2 autres feuilles en changeant le nom de la feuille. Et enfin copier/coller toutes les données des 2 dernières feuilles sur la fenêtre résultat que j'ai ouvert en premier.
> Merci d'avoir accepté de m'aider de nouveau; si je n'y arrive pas, je sais à qui m'adresser.


Bonsoir MichD,
Franchement j'aurais cru me débrouiller seul en copiant le bout de code en changeant les lettres de la colonne. Comme je n'ai pas pu comprendre ce code, ce n'est surement pas la bonne méthode.
D'bord on me répond que Range est déjà désigné; j'y ai mis une apostrophe, et la cela va jusqu'au bout mais les colonnes après H disparaissent.
Je t'envoie la macro comme elle est en ce moment. Peux-tu y jeter un oeil?Merci


Discussions similaires