Changer caractère dans une chaine
Fermé
moseca
Messages postés
32
Date d'inscription
samedi 19 avril 2014
Statut
Membre
Dernière intervention
17 mai 2022
-
15 mai 2014 à 05:03
Normad Messages postés 112 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 10 juin 2015 - 19 mai 2014 à 16:06
Normad Messages postés 112 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 10 juin 2015 - 19 mai 2014 à 16:06
Bonjour les experts. J'aimerais avoir de l'aide. SVP, SVP.
J'ai une chaine de caractère comme ceci : 1ABC2BCD5CDE12EFG15CDF. Alors, il y a toujours 3 lettres précédées de 1 à 2 chiffres (les chiffres varient de 1 à 15).
J'aimerais une macro VBA (ou formule Excel) qui ajoute un signe moins devant les chiffre. On aura donc: -1ABC-2BCD-5CDE-12EFG-15CDF
MERCI DE VOTRE PRÉCIEUX AIDE !!!
J'ai une chaine de caractère comme ceci : 1ABC2BCD5CDE12EFG15CDF. Alors, il y a toujours 3 lettres précédées de 1 à 2 chiffres (les chiffres varient de 1 à 15).
J'aimerais une macro VBA (ou formule Excel) qui ajoute un signe moins devant les chiffre. On aura donc: -1ABC-2BCD-5CDE-12EFG-15CDF
MERCI DE VOTRE PRÉCIEUX AIDE !!!
A voir également:
- Changer caractère dans une chaine
- Changer dns - Guide
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
4 réponses
f894009
Messages postés
17241
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 février 2025
1 713
Modifié par f894009 le 15/05/2014 à 16:49
Modifié par f894009 le 15/05/2014 à 16:49
Bonjour,
VBA: pas de controle si la chaine contient autre chose que des lettres et chiffres, la chaine doit etre du format indique (minuscules admises)
Il y a peut-etre plus simple, a voir
VBA: pas de controle si la chaine contient autre chose que des lettres et chiffres, la chaine doit etre du format indique (minuscules admises)
Il y a peut-etre plus simple, a voir
Sub test()
Dim Flag_paq1 As Boolean
texte = UCase(Worksheets("feuil1").Range("C3"))
Lg = Len(texte)
Lg1 = Lg - 1
pos0 = 1
For p = 1 To Lg1
AsLC = Asc(Mid(texte, p, 1))
AsLS = Asc(Mid(texte, p + 1, 1))
'test si lettre suivie d'un chiffre
If AsLC > 64 And AsLS < 59 Then
If Not Flag_paq1 Then
paq1 = p
Flag_paq1 = True
End If
If p = paq1 Then
of7 = 0
Else
of7 = 1
End If
texte2 = texte2 & Mid(texte, pos0 + of7, p - pos0 + (1 - of7)) & "-"
pos0 = p
End If
Next p
texte2 = "-" & texte2 & Mid(texte, pos0 + of7, Lg - pos0 + (1 - of7))
Worksheets("feuil1").Range("C5") = texte2
End Sub
moseca
Messages postés
32
Date d'inscription
samedi 19 avril 2014
Statut
Membre
Dernière intervention
17 mai 2022
15 mai 2014 à 17:20
15 mai 2014 à 17:20
Bonjour, Merci! Je vais essayer ça.
Mais la chaine contient que des lettres et chiffre, comme je l'ai indiqué dans mon exemple.
MERCI ENCORE!
Mais la chaine contient que des lettres et chiffre, comme je l'ai indiqué dans mon exemple.
MERCI ENCORE!
moseca
Messages postés
32
Date d'inscription
samedi 19 avril 2014
Statut
Membre
Dernière intervention
17 mai 2022
15 mai 2014 à 22:57
15 mai 2014 à 22:57
Bonjour
En fiat, je viens de remarquer un petit problème. Si on a 6 caractère ça fonctionne pas correctement.
Par exemple : 1ABC2XYC ça donne -1ABC-C2XYZ
MERCI DE M'AIDER!
En fiat, je viens de remarquer un petit problème. Si on a 6 caractère ça fonctionne pas correctement.
Par exemple : 1ABC2XYC ça donne -1ABC-C2XYZ
MERCI DE M'AIDER!
Normad
Messages postés
112
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
10 juin 2015
39
19 mai 2014 à 16:06
19 mai 2014 à 16:06
Bonjour,
En testant les caractères l'un après l'autre avec la fonction IsNumeric. Si un carctère numérique est trouvé prend aussi en compte le(s) suivant(s) s'ils sont aussi numéique avant d'ajouter un "-" devant.
En testant les caractères l'un après l'autre avec la fonction IsNumeric. Si un carctère numérique est trouvé prend aussi en compte le(s) suivant(s) s'ils sont aussi numéique avant d'ajouter un "-" devant.
Sub Modifie() Dim strBase As String, NewStr As String, I As Integer, Y As Integer, Car As String strBase = Worksheets("feuil1").Range("C3").Value For I = 1 To Len(strBase) Car = Mid(strBase, I, 1) If IsNumeric(Car) Then For Y = I + 1 To Len(strBase) If IsNumeric(Mid(strBase, Y, 1)) Then Car = Car & Mid(strBase, Y, 1) I = I + 1 Else Exit For End If Next Y NewStr = NewStr & "-" & Car Else NewStr = NewStr & Car End If Next I Worksheets("feuil1").Range("C5").Value = NewStr End Sub
15 mai 2014 à 17:43
Mais y a t il moyen d'y ajouter une boucle for car je dois faire changer plusieurs lignes, par exemple, faire cette opération pour les Range("A1:A15") et les mettre dans une autre plage, par exemple Range ("B1:B15"). J'ai essayer mais ça a planté.
MERCI ENCORE CHAMPION(ne).
15 mai 2014 à 19:24
je vous fais ca de suite
15 mai 2014 à 19:29
pour cellules A1 a A15 vers B1 a B15
15 mai 2014 à 20:08
je l'ai essayé mais ça plante. Voici la ligne qui plante :
texte2 = "-" & texte2 & Mid(texte, pos0 + of7, Lg - pos0 + (1 - of7))
MERCI!
15 mai 2014 à 20:16
fichier de test: https://www.cjoint.com/?DEpuqf5jzLx