Remplacement du dernier caractère dans une chaîne comprenant des chiffres

Goufra

XLDnaute Occasionnel
Bonsoir à vous,

Je n’arrive pas à trouver mon erreur.

Je devrais obtenir successivement :
A1234-D1 puis A1234-D2 puis A1234-D3 puis A1234-D4 puis A1234-D5

Or j’obtiens
A1234-D1 puis A2234-D2 puis A3334-D3 puis A4444-D4 puis A5555-D5


Code utilisé

Sub test()
Dim Numérotation As Variant, Nu%, x%, Z%

Numérotation = [a2]
Nu = 1
Z = 2

Numérotation = Numérotation & "-" & "D" & Nu

For x = 1 To 5
Numérotation = Replace(Numérotation, Right(Numérotation, 1), Nu)
Range("c" & Z) = Numérotation
Nu = Nu + 1
Z = Z + 1
Next x
End Sub

pièce jointe
D’avance merci à vous
 

Pièces jointes

  • 1Goufra.xlsm
    17.9 KB · Affichages: 18

Paf

XLDnaute Barbatruc
Re : Remplacement du dernier caractère dans une chaîne comprenant des chiffres

Bonsoir

avant la boucle Numérotation vaut A1234-D1
l'instruction Replace remplace dans une chaine tous les caractères choisis( en l'occurrence la valeur du dernier caractère de Numérotation) par un autre (en l'occurrence le contenu de la variable Nu)

première itération de la boucle, on remplace tous les 1 (dernier caractère de Numérotation) par Nu qui vaut 1 on aura alors :A1234-D1
deuxième itération Nu est passé à 2, donc on remplace tous les 1 par des 2 : on aura alors :A2234-D2
troisième itération Nu est passé à 3, donc on remplace tous les 2 par des 3 : on aura alors :A3334-D3
....


une solution possible :
Code:
Sub test()
 Dim Numérotation As Variant, x%
    Numérotation = [a2]
    Numérotation = Numérotation & "-" & "D"
    For x = 1 To 5
        Range("C" & x + 1) = Numérotation & x
    Next x
End Sub

A+
 

Staple1600

XLDnaute Barbatruc
Re : Remplacement du dernier caractère dans une chaîne comprenant des chiffres

Bonsoir à tous

Goufra
Voici deux possibilités, si j'ai bien compris la question.
(la seconde n'utilise pas de boucle et utilise l’auto-incrémentation qu'offre la recopie vers le bas d'Excel, ce qui m’amène à cette question: pourquoi ici utiliser VBA alors qu'on peut faire pareil tout simplement à la souris ?)

Code:
Sub test2()
Dim i
For i = 1 To 5
Cells(2 + i, "C").Value = Range("A2") & "-D" & i
Next
End Sub
Code:
Sub test3()
With Range("C3")
    .Value = [A2] & "-D1"
    .Resize(1).AutoFill Range("C3:C7"), 0
End With
End Sub
 

Goufra

XLDnaute Occasionnel
Re : Remplacement du dernier caractère dans une chaîne comprenant des chiffres

Merci à toi Paf et à toi staple 1600
Je vous ai pris cet exemple pour vous montrer qu’en utilisant « replace » sur une chaine alphanumérique je rencontre un problème.


Je dispose d’une liste de numéro, j’ajoute un numéro à cette liste : A1234 par exemple que je récupère via une textbox dans une cellule d’attente.

Je vérifie s’il est déjà répertorié.
Si c’est le cas je modifie A1234 en ajoutant –D1

Jusqu’à ce point c’est Ok

Je vérifie donc si A1234-D1 figure dans la liste
Si c’est le cas je remplace le dernier caractère (Nu=1)
par Nu=Nu+1.

J’obtiens bien D1 – D2 – D3 …

Mais A1234 est successivement modifié et je ne comprends pas pourquoi.
Si vous pouviez m’éclairer !
Je vous en remercie par avance, je n’ai pas trouvé ce type de manip.


Je peux éventuellement bidouiller A1234 en le remplaçant par une variable pour ensuite récupérer la numérotation.

Dans l’attente
 

Goufra

XLDnaute Occasionnel
Re : Remplacement du dernier caractère dans une chaîne comprenant des chiffres

Pardon Paf
J'ai oublié de joindre mon interrogation à ta réponse qui explique ce qu'il m'arrive.

Mais ce que je ne comprends pas c'est que j'ai désigné la position du caractère à remplacer
en utilisant l'argument Right(Numérotation, 1) dans

erreur de ma part je désigne le sigle à remplacer et non son emplacement ....
Bref j'ai compris !!!!!
Dans l'attente
 
Dernière édition:

Statistiques des forums

Discussions
312 202
Messages
2 086 180
Membres
103 152
dernier inscrit
Karibu