Petit probléme.. [Résolu]

Signaler
Messages postés
26
Date d'inscription
mercredi 25 avril 2012
Statut
Membre
Dernière intervention
14 juin 2012
-
 Utilisateur anonyme -
Bonsoir à tous,

Voici mon problème :

Avec cette macro je voulais effectuer un changement de syntaxe dans une colonne entière ..

[1] = 7.000000e+02

1) suppression des espaces
2) changement "." en ","
3) suppression de [1] =
4) passage en mode standard des cellules

une fois ces changement effectués je me retrouve avec :

700

Le soucis c'est que cette modification est appliquée dans toute ma colonne MAIS .. je dis bien mais le chiffre 700 apparait partout alors que mes autres valeurs ne sont pas identiques..

[3] = 5.000000e+02

avec ma macro le chiffre 700 apparait alors que 500 devrait apparaitre..

Bizarre non?

je séche un peu la...

Ma macro


Set plage = Range("A1:A64") ' sélection de de la colonne A1 à A10


plage.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False ' Remplacement des "." en ","

Range("A1:A64").Value = Right(Range("A1").Value, _
Len(Range("A1").Value) - 4) ' supprimer les 4 premiers caractéres

plage.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False ' Supprimer les espaces


Range("A1:A64").Select
Selection.NumberFormat = "General" 'Mode standard pour les cellules

14 réponses

Messages postés
37
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
20 mai 2016
1
Salut !

Alors je crois que je n'ai rien compris à ce que tu as dans tes cellules à l'origine, et à quoi tu veux arriver...

Dis-moi si je me trompe mais il me semble qu'il y a un doux mélange dans ton code...
Après le for each, le but est d'utiliser ta variable cellule et non range, non ?

Juste à voir, il ne devrait pas ressembler plutôt à quelque chose comme ça ?
Dim cellule As Range
For Each cellule In Range("a1:a64")

    cellule.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False ' Remplacement des "." en ","

    cellule.Value = Right(cellule.Text, Len(cellule.Text) - 4) ' supprimer les 4 premiers caractéres

    cellule.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False ' Supprimer les espaces

    cellule.NumberFormat = "General"

Next cellule



JD.
Messages postés
37
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
20 mai 2016
1
P.S: la version de cmarotte fonctionne également (et est certainement plus rapide que la mienne), mais le problème réside ici:

cellule.Value = Right(cellule.Value, Len(cellule.Value) - 4)

essaye:
cellule.Value = Right(cellule.text, Len(cellule.text) - 4) 


.value récupère l'objet de ta cellule (dans le cas précis, un "double" je pense), et len ne fonctionne que sur un champs "string" !
.text récupère n'importe que cellule en "string" !

Voili, voilà.

JD.

Bonjour,

Tu te bases toujours sur la valeur de A1 pour appliquer tes transformations.

Range("A1:A64").Value = Right(Range("A1").Value, _ 
Len(Range("A1").Value) - 4) ' supprimer les 4 premiers caractéres 


Il te faut une boucle qui va ressembler à cela. (Non testé)

dim cellule as range
for each cellule in range("a1:a64")
cellule.value = Right(cellule.Value, _ 
Len(cellule.Value - 4) ' supprimer les 4 premiers caractéres 
next cellule


Et puis, pourquoi ne pas juste changer le format des cellules ?

Bonjour,

Et puis, pourquoi ne pas juste changer le format des cellules ?

OK, je me réveille... Les points au lieu des virgules.
Messages postés
26
Date d'inscription
mercredi 25 avril 2012
Statut
Membre
Dernière intervention
14 juin 2012

J'ai suivit tes instruction mais cela ne marche pas :'(

Dim cellule As Range
For Each cellule In Range("a1:a64")



Set plage = Range.Value ' sélection de de la colonne A1 à A10


plage.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False ' Remplacement des "." en ","

Range.Value = Right(Range.Value, _
Len(Range.Value) - 4) ' supprimer les 4 premiers caractéres

plage.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False ' Supprimer les espaces


Range.Value
Selection.NumberFormat = "General"

Next cellule
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour, cmarcotte,
je crois qu'il serait judicieux, dans un tel cas, de penser à utiliser la propriété Text (plutôt que Value) de la cellule
A toi.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
26
Date d'inscription
mercredi 25 avril 2012
Statut
Membre
Dernière intervention
14 juin 2012

La syntaxe Range("Ax").Select

n'exite pas ? ou un truc dans le même genre ? pour que j'utilise un X en compteur et incrementer le A de la cellule ?

Bonjour,

La syntaxe Range("Ax").Select

Regarde dans l'aide à cells()

Pour ucfoutu

Oui, en effet

J'ai suivit tes instruction mais cela ne marche pas :'(

Pas vraiment. Tu étais supposé boucler seulement pour la transformation des nombres, pas pour ôter les points, ni les espaces.

Ta macro devrait finalement ressembler à cela (non-testé)

Set plage = Range("a1:a10")' sélection de de la colonne A1 à A10
plage.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False ' Remplacement des "." en ","
Dim cellule As Range
For Each cellule In plage
cellule.text= Right(cellule.text, _
Len(cellule.text) - 4) ' supprimer les 4 premiers caractéres
Next cellule
plage.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False ' Supprimer les espaces
plage.NumberFormat = "General"
Messages postés
26
Date d'inscription
mercredi 25 avril 2012
Statut
Membre
Dernière intervention
14 juin 2012

Tu es sur que c'est du text ici? car j'ai un message d'erreur :o

cellule.Text = Right(cellule.Text, _
Len(cellule.Text) - 4) '
Messages postés
26
Date d'inscription
mercredi 25 avril 2012
Statut
Membre
Dernière intervention
14 juin 2012

Argument ou appel de procédure incorrect

je suis désolé d'insister comme cela mais je découvre le VBA et j'ai fais 10.00000 sites avant de venir ici .. misére
Messages postés
37
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
20 mai 2016
1
euhh... alors là, n'étant pas du tout pro du VBA je m'avance peut-être, mais il me semble que dans Excel, le .text d'une cellule est readonly (et permet de récupérer une cellule tel qu'a l'affichage) ... mais .value est en readwrite.

JD.
Messages postés
26
Date d'inscription
mercredi 25 avril 2012
Statut
Membre
Dernière intervention
14 juin 2012

Salut Gid_x !

ta macro est bonne et fonctionne mais j'ai toujours le message d'erreur : Argument ou appel de procédure incorrect

pour cellule.Value = Right(cellule.Value, Len(cellule.Value) - 4) ' supprimer les 4 premiers caractéres
Messages postés
26
Date d'inscription
mercredi 25 avril 2012
Statut
Membre
Dernière intervention
14 juin 2012

Bon c'est good j'ai juste remplacé le .text des guillemet en .value ^^"

Merci à vous pour l'aide !

super ce site pour les noobz ^^

Bonjour,

cellule.Value = Right(cellule.Value, Len(cellule.Value) - 4)

Es-tu sur que tu n'as aucune cellule où len(cellule.value)-4 ne finit pas par donner zéro ou -quelque chose ?