remplacer texte sous condition

  • Initiateur de la discussion Initiateur de la discussion patdef07
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

patdef07

Guest
Bonjour,
Je me permets de solliciter votre aide.
Je souhaite effectuer une "macro" pour remplacer un texte par un autre et suis parfaitement nulle en VBA.
Je vous joins un fichier exemple.

Pour situer un peu le problème :
J'effectue des requêtes depuis mon logiciel CRM. La clé de tri de ces requêtes ne peut être que "l'étape", or dans mon
fichier Excel, je dois trier par commercial. La taille des informations est telle qu'il me faut gagner de la place pour tout soit placé sur une feuille A4 (en largeur j'entends).
Dans un premier temps, je voudrais qu'automatiquement, à partir d'une liste, excel remplace le nom complet du commercial par son trigramme.
J'ai beau chercher, je ne sais pas comment vous faites cela.

Si la réponse a déjà été donnée (enfin, clairement, parce que les macros, c'est quand même compliqué) n'hésitez pas à me le dire (avec le lien svp !)


Merci de votre aide.
 

Pièces jointes

Re : remplacer texte sous condition

Bonsoir patdef07,

Voir le fichier joint. Le code est dans module1.
VB:
Sub Trigrammes()
Dim dico, tablo, i&

' création du dictionnaire
Set dico = CreateObject("scripting.dictionary")
With Sheets("trigrammes")
  ' lecture du tableau des trigrammes
  tablo = .Range(.Range("a3"), .Range("b" & .Rows.Count).End(xlUp)).Value
  ' remplissage du dico (clef = tablo(i,1) <=> le nom)
  ' et (valeur = tablo(i,2) <=> trigramme)
  For i = 2 To UBound(tablo)
    dico(tablo(i, 1)) = tablo(i, 2)
  Next i
End With

With Sheets("Liste des affaires")
  ' lecture du tableau correspondant à la colonne des noms
  tablo = .Range(.Range("b1"), .Range("b" & .Rows.Count).End(xlUp))
  ' on remplace le nom par son trigramme
  For i = 2 To UBound(tablo)
    tablo(i, 1) = dico(tablo(i, 1))
  Next i
  ' on écrit la tableau par dessus la colonne des noms
  .Range("b1").Resize(UBound(tablo), 1) = tablo
End With
  
End Sub

Edit: préférez la Lien supprimé qui corrige une anomalie décrite ICI
 
Dernière édition:
Re : remplacer texte sous condition

Bonjour Patdef07,

Une version v2 qui corrige le défaut logique suivant de la v1: si le nom est absent du tableau des trigrammes (ou bien si on exécute la macro plus d'une fois), la macro supprime le nom (ou tous les trigrammes) au lieu de le(s) conserver.

Pour cela, on a rajouté une condition dans la boucle finale qui consiste à vérifier que le nom est bien présent dans les clefs du dictionnaire avant de procéder au remplacement par son trigramme.
If dico.exists(tablo(i, 1)) Then tablo(i, 1) = dico(tablo(i, 1))
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

E
Réponses
4
Affichages
1 K
E
A
Réponses
17
Affichages
4 K
Abdenour
A
B
Réponses
0
Affichages
1 K
bilbinou
B
S
Réponses
1
Affichages
1 K
E
Réponses
8
Affichages
1 K
ETUDIANTE
E
I
Réponses
6
Affichages
2 K
I
L
Réponses
7
Affichages
1 K
lolobala
L
W
Réponses
3
Affichages
1 K
willoj47
W
Retour