Parcourir les caractères d'une cellule et agir dessus
Morgan67700
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
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 ascii - Guide
- Caractères spéciaux - Guide
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne dans une cellule excel - Guide
- Proteger cellule excel - 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:
Par 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:
Je 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
Je 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