Parcourir les caractères d'une cellule et agir dessus
Morgan67700
Messages postés
30
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour CCM,
Je suis de retour sur le forum après un long moment d'inactivité en VBA. Un nouveau problème se pose: je souhaite parcourir les caractères d'une cellule et agir dessus par VBA. Pour commencer le contenue de cette cellule a un format de type: "0000/0000/0000/0000". Cela représente un processus composé de numéros de poste qui font à chaque fois 4 caractères ainsi que de slash "/" qui les séparent.
Exemple: "0455/0666/0692/0999"
J'ai réussi à décomposer le processus avec les fonctions Len() et Mid() (Voir fichier ci-joint), donc je considère que je suis capable de pouvoir lire chaque groupes de 4 caractères et donc chaque poste mais je n'arrive pas à agir sur ce que je trouve.
Je souhaiterais supprimer "0692" à chaque fois qu'on le trouve pour partir sur une base saine dans mon fichier regroupant près de 600 processus.
Exemple: "0488/0692/0357" -> "0488/0357"
J'ai essayé avec la fonction Replace(Cel,"0692","") mais ça ne marche pas.
Et ensuite je souhaiterais pouvoir ajouter par exemple "0692" après "0555" à chaque fois qu'on trouve ce poste dans le processus contenu dans la cellule.
Exemple: "0457/0555/0369" -> "0457/0555/0692/0369"
En espérant être assez clair dans mes explications, merci à ceux qui pourront m'aider.
Cordialement,
Lien du fichier: http://www.cjoint.com/c/FCrq6PXgIQL
Morgan67700
Je suis de retour sur le forum après un long moment d'inactivité en VBA. Un nouveau problème se pose: je souhaite parcourir les caractères d'une cellule et agir dessus par VBA. Pour commencer le contenue de cette cellule a un format de type: "0000/0000/0000/0000". Cela représente un processus composé de numéros de poste qui font à chaque fois 4 caractères ainsi que de slash "/" qui les séparent.
Exemple: "0455/0666/0692/0999"
J'ai réussi à décomposer le processus avec les fonctions Len() et Mid() (Voir fichier ci-joint), donc je considère que je suis capable de pouvoir lire chaque groupes de 4 caractères et donc chaque poste mais je n'arrive pas à agir sur ce que je trouve.
Je souhaiterais supprimer "0692" à chaque fois qu'on le trouve pour partir sur une base saine dans mon fichier regroupant près de 600 processus.
Exemple: "0488/0692/0357" -> "0488/0357"
J'ai essayé avec la fonction Replace(Cel,"0692","") mais ça ne marche pas.
Et ensuite je souhaiterais pouvoir ajouter par exemple "0692" après "0555" à chaque fois qu'on trouve ce poste dans le processus contenu dans la cellule.
Exemple: "0457/0555/0369" -> "0457/0555/0692/0369"
En espérant être assez clair dans mes explications, merci à ceux qui pourront m'aider.
Cordialement,
Lien du fichier: http://www.cjoint.com/c/FCrq6PXgIQL
Morgan67700
A voir également:
- Parcourir les caractères d'une cellule et agir dessus
- Caractères spéciaux - Guide
- Caractères ascii - Guide
- Excel cellule couleur si condition texte - Guide
- Bloquer une cellule excel - Guide
- Caracteres speciaux - Guide
3 réponses
Bonjour,
J'ai essayé avec la fonction Replace(Cel,"0692","") mais ça ne marche pas.
FAUX
et ensuite:
je te laisse faire la boucle sur la colonne concernée
--
@+ Le Pivert
J'ai essayé avec la fonction Replace(Cel,"0692","") mais ça ne marche pas.
FAUX
Range("A1").Value = Replace(Range("A1").Value, "0692/", "")
et ensuite:
Range("A2").Value = Replace(Range("A2").Value, "0555", "0555/0692")
je te laisse faire la boucle sur la colonne concernée
--
@+ Le Pivert
Bonjour,
Tu peux aussi utiliser une regex
https://cafeine.developpez.com/access/tutoriel/regexp/#LIII-A-2
Tu peux aussi utiliser une regex
https://cafeine.developpez.com/access/tutoriel/regexp/#LIII-A-2
Bonsoir
peux tu décrire toutes les opérations que tu veux faire, parce que s'il manque des conditions difficile pour LePivert ou autre de répondre correctement.
Pour les regex, c'est peut être un peu complexe à appréhender au début, mais cela permet, une fois compris, de gérer énormément de cas de traitements de texte sur une ou deux lignes, au final ça simplifie grandement le code.
Pour exemple (en VB.Net) https://codes-sources.commentcamarche.net/forum/affich-7028208-validite-n-telephone-et-adresse-email#9
blq propose un code avec 5 If, 2 regex 20 lignes, en passant un peu de temps sur la regex, j'ai réduit à une regex, 1 if et 7 lignes (9 avec l'encapsulation dans une fonction)
peux tu décrire toutes les opérations que tu veux faire, parce que s'il manque des conditions difficile pour LePivert ou autre de répondre correctement.
Pour les regex, c'est peut être un peu complexe à appréhender au début, mais cela permet, une fois compris, de gérer énormément de cas de traitements de texte sur une ou deux lignes, au final ça simplifie grandement le code.
Pour exemple (en VB.Net) https://codes-sources.commentcamarche.net/forum/affich-7028208-validite-n-telephone-et-adresse-email#9
blq propose un code avec 5 If, 2 regex 20 lignes, en passant un peu de temps sur la regex, j'ai réduit à une regex, 1 if et 7 lignes (9 avec l'encapsulation dans une fonction)
https://www.developpez.net/forums/d605223/logiciels/microsoft-office/excel/contribuez/boucles-parcourir-colonne-ligne-plage-donnees-2-methodes/
Dans l'exemple1 copie tu mets ton code dans la boucle en remplaçant Range("A1").Value par Var
voilà
Pour supprimer "0692" j'ai modifié le code et ça marche maintenant:
Sub Supprimer0692() Application.ScreenUpdating = False Dim Cel As String Dim Lg As Integer Dim Fin As String With Sheets("Feuil1") Cel = .Range("A12").Value Cel = Replace(Cel, "0692/", "") .Range("A12").Value = Cel ' Remise en place de la cellule nettoyée en partie Lg = Len(Cel) 'Longueur du process Fin = Mid(Cel, Lg - 4, 5) If Fin = "/0692" Then Cel = Replace(Cel, "/0692", "") End If .Range("A12").Value = Cel ' Remise en place de la cellule propre End With Application.ScreenUpdating = True End SubPar contre pour rajouter "0692" après "0555" ça ne marche pas lorsqu'il se trouve en dernière position dans le process, j'ai mis ce code:
Sub Ajout0692() Application.ScreenUpdating = False Dim Cel As String Dim Lg As Integer Dim Nbr As Integer Dim i As Integer Dim j As Integer Dim Lvg As String Dim Lvg0 As String With Sheets("Feuil1") Cel = .Range("A16").Value Lg = Len(Replace(Cel, "/", "")) Nbr = Lg / 4 j = 1 For i = 1 To Nbr Lvg0 = Mid(Cel, j, 9) Lvg = Mid(Cel, j, 4) If Lvg = "0555" And Lvg0 <> "0555/0692" Then ' Test pour éviter les doublons Cel = Replace(Cel, "0555", "0555/0692", j, 1) End If j = j + 5 Next i .Range("A16").Value = Cel ' Remise en place de la cellule corrigée End With Application.ScreenUpdating = True End SubJe ne comprends pas trop pourquoi il ne fait pas les modifications sur les valeurs autres que la première...
Lien du fichier: http://www.cjoint.com/c/FCsmrF3eHWF
Morgan67700
If Lvg = "0555" And Lvg0 <> "0555/0692" Then Cel = Replace(Cel, "/0692", "") Cel = Replace(Cel, "0555", "0555/0692") ' Si au début ou en plein process on remplace ainsi End IfJe vous remercie pour votre aide mais la fonction Replace ne peut pas répondre à tous les cas dont j'ai besoin de traiter. Si je n'avais qu'un seul cas à traiter elle pourrait être parfaite cette fonction. Dans mon fichier je supprime tout les "0692" au début et ensuite je fait plusieurs procédures différentes qui concernent certaines situations comme par exemple mettre "0692" avant "0510"... Donc je ne peux éviter les doublons ainsi.
Exemple: Replace(Cel,"0555","0555/0692")
0555/0433/0555/0692/0510/0477/0555 -> 0555/0692/0433/0555/0692/0692/0510/0477/0555/0692
Je souhaiterais une fonction qui permet de lire le poste "0000" et ajouter "0692" après ou avant celui-ci en fonction de ce qu'il se trouve avant ou après ce numéro de poste.
La fonction mid permet de lire mais je me demande s'il elle ne permettrait pas de remplacer aussi.
Merci pour votre aide,
Morgan67700