Bonjour à tous !
J'ai réalisé un code VBA qui fonctionne presque comme je le voudrai. Mais me voilà bloqué pour résoudre mon soucis.
Je vais vous expliquer au mieux la situation.
J'ai des cellules de données formatées comme ceci :
Accueil_[Lieu]_[Type]_[Caractéristique1]_[Pièces]__Accueil_[Lieu]_[Type]_[Caractéristique2]_[Pièces]
__Accueil_[Lieu]_[Type]_[Caractéristique3]_[Pièces]
[Lieu];[Type]; etc sont des noms déjà complété.
Chaque "Accueil_[Lieu]_[Type]_[Caractéristique]_[Pièces]" Représente en fait un arbre de catégories (idée de Dossier-Soudossier1-Sousdossier2-soudossier3-...) afin d'indiquer à un programme comment organisé certaines données.
J'ai créer une maccro permettant de corriger/modifier ces catégories. En effet, certaines doivent être modifiée pour mes besoins.
Modifiée Comment ?
Certains de ses sous dossiers doivent être fusionner ou splitté.
Illustration exemple :
Split :
Le chemin Accueil_[Lieu]_[Type]_[Caractéristique]_[Pièces] doit être modifié en Accueil_[Lieu]_[Type]_[Caractéristique1]_[Pièces] et Accueil_[Lieu]_[Type]_[Caractéristique2]_[Pièces]
Fusion
Accueil_[Lieu]_[Type]_[CaractéristiqueXXX]_[Pièces] doit être modifié en Accueil_[Lieu]_[Type]_[CaractéristiqueA]_[Pièces]
et
Accueil_[Lieu]_[Type]_[CaractéristiqueRRRRR]_[Pièces] doit être modifié en Accueil_[Lieu]_[Type]_[CaractéristiqueA]_[Pièces] également
J'ai 3 colonnes comprenant tous les changements à faire formatée comme suit :
Ancien Nom | Nouveau Nom 1 | Nouveau Nom 2
Ma procédure actuelle :
Je lis les chemins d'une même cellule :
Accueil_[Lieu]_[Type]_[Caractéristique1]_[Pièces]__Accueil_[Lieu]_[Type]_[Caractéristique2]_[Pièces]
__Accueil_[Lieu]_[Type]_[Caractéristique3]_[Pièces]
J'écris les chemins séparément dans une nouvelle colonne (Colonne B) :
Accueil_[Lieu]_[Type]_[Caractéristique1]_[Pièces]
Accueil_[Lieu]_[Type]_[Caractéristique2]_[Pièces]
Accueil_[Lieu]_[Type]_[Caractéristique3]_[Pièces]
Je recherche dans chaque chemin (avec INSTR) si on trouve un des mots contenu dans les colonne de modification (colonne C).
Si le mot est trouvé on applique les modifications (Split ou Fusion)
on sauvegarde le résultat à la suite des résultats déjà traités.
Arrivé à la fin des chemin, on supprime les éventules doublons.
Une fois terminé on Concatene afin de revenir à la forme du type :
Accueil_[Lieu]_[Type]_[Caractéristique1]_[Pièces]__Accueil_[Lieu]_[Type]_[Caractéristique2]_[Pièces]
__Accueil_[Lieu]_[Type]_[Caractéristique3]_[Pièces]
Le noeud du problème :
Le soucis vient de la partie de code :
#
If InStr(1, Cells(lignetravail1, colonnetravail1).Value, Cells(k, colonnecellamodif).Value, vbTextCompare) <> 0 Then
#
La recherche se fait sur l'entierté du "chemin" . Donc des qu'il rencontre le mot Brune il transforem en : Brune bois et Brune Metal.
Fonctionne correctement si le mot Brune est seul donc (même logique qu'effectuer une recherche ctrl+f en ne cochant pas "Totalité du contenu de la cellule)
Exemple :
Accueil_Maison_Mobilier_Chaise_Brune_Dossier
est transformé en :
Accueil_Maison_Mobilier_Chaise_Brune Bois_Dossier
Accueil_Maison_Mobilier_Chaise_Brune Metal_Dossier
-> ok c'est le résultat voulu
MAIS :
Accueil_Maison_Mobilier_Chaise_Brune Bois_Dossier
est transformé en :
Accueil_Maison_Mobilier_Chaise_Brune Bois Bois_Dossier
Accueil_Maison_Mobilier_Chaise_Brune Metal Bois_Dossier
La vraie question :
-> quelle autre fonction utiliser pour faire :
"Pseudo-code"
Lire entre les tiret la valeur compléte et si elle est égale à une valeur trouvé dans le tableau des modifications (tableau du milieu) la remplacer par les données renseignées dans ce tableau de modifications.
Remarque : Le nombre de "tiret" est toujours le même et dans le même ordre :
Accueil_[Lieu]_[Type]_[Caractéristique]_[Pièces]
Je vous remercies d'ores et déjà ne fus-ce que d'avoir lu ^^
J'espère être clair dans mes propos ...
Et comme un dessin vaut mieux qu'un long discours : un fichier joint du soucis
J'ai réalisé un code VBA qui fonctionne presque comme je le voudrai. Mais me voilà bloqué pour résoudre mon soucis.
Je vais vous expliquer au mieux la situation.
J'ai des cellules de données formatées comme ceci :
Accueil_[Lieu]_[Type]_[Caractéristique1]_[Pièces]__Accueil_[Lieu]_[Type]_[Caractéristique2]_[Pièces]
__Accueil_[Lieu]_[Type]_[Caractéristique3]_[Pièces]
[Lieu];[Type]; etc sont des noms déjà complété.
Chaque "Accueil_[Lieu]_[Type]_[Caractéristique]_[Pièces]" Représente en fait un arbre de catégories (idée de Dossier-Soudossier1-Sousdossier2-soudossier3-...) afin d'indiquer à un programme comment organisé certaines données.
J'ai créer une maccro permettant de corriger/modifier ces catégories. En effet, certaines doivent être modifiée pour mes besoins.
Modifiée Comment ?
Certains de ses sous dossiers doivent être fusionner ou splitté.
Illustration exemple :
Split :
Le chemin Accueil_[Lieu]_[Type]_[Caractéristique]_[Pièces] doit être modifié en Accueil_[Lieu]_[Type]_[Caractéristique1]_[Pièces] et Accueil_[Lieu]_[Type]_[Caractéristique2]_[Pièces]
Fusion
Accueil_[Lieu]_[Type]_[CaractéristiqueXXX]_[Pièces] doit être modifié en Accueil_[Lieu]_[Type]_[CaractéristiqueA]_[Pièces]
et
Accueil_[Lieu]_[Type]_[CaractéristiqueRRRRR]_[Pièces] doit être modifié en Accueil_[Lieu]_[Type]_[CaractéristiqueA]_[Pièces] également
J'ai 3 colonnes comprenant tous les changements à faire formatée comme suit :
Ancien Nom | Nouveau Nom 1 | Nouveau Nom 2
Ma procédure actuelle :
Je lis les chemins d'une même cellule :
Accueil_[Lieu]_[Type]_[Caractéristique1]_[Pièces]__Accueil_[Lieu]_[Type]_[Caractéristique2]_[Pièces]
__Accueil_[Lieu]_[Type]_[Caractéristique3]_[Pièces]
J'écris les chemins séparément dans une nouvelle colonne (Colonne B) :
Accueil_[Lieu]_[Type]_[Caractéristique1]_[Pièces]
Accueil_[Lieu]_[Type]_[Caractéristique2]_[Pièces]
Accueil_[Lieu]_[Type]_[Caractéristique3]_[Pièces]
Je recherche dans chaque chemin (avec INSTR) si on trouve un des mots contenu dans les colonne de modification (colonne C).
Si le mot est trouvé on applique les modifications (Split ou Fusion)
on sauvegarde le résultat à la suite des résultats déjà traités.
Arrivé à la fin des chemin, on supprime les éventules doublons.
Une fois terminé on Concatene afin de revenir à la forme du type :
Accueil_[Lieu]_[Type]_[Caractéristique1]_[Pièces]__Accueil_[Lieu]_[Type]_[Caractéristique2]_[Pièces]
__Accueil_[Lieu]_[Type]_[Caractéristique3]_[Pièces]
Le noeud du problème :
Le soucis vient de la partie de code :
#
If InStr(1, Cells(lignetravail1, colonnetravail1).Value, Cells(k, colonnecellamodif).Value, vbTextCompare) <> 0 Then
#
La recherche se fait sur l'entierté du "chemin" . Donc des qu'il rencontre le mot Brune il transforem en : Brune bois et Brune Metal.
Fonctionne correctement si le mot Brune est seul donc (même logique qu'effectuer une recherche ctrl+f en ne cochant pas "Totalité du contenu de la cellule)
Exemple :
Accueil_Maison_Mobilier_Chaise_Brune_Dossier
est transformé en :
Accueil_Maison_Mobilier_Chaise_Brune Bois_Dossier
Accueil_Maison_Mobilier_Chaise_Brune Metal_Dossier
-> ok c'est le résultat voulu
MAIS :
Accueil_Maison_Mobilier_Chaise_Brune Bois_Dossier
est transformé en :
Accueil_Maison_Mobilier_Chaise_Brune Bois Bois_Dossier
Accueil_Maison_Mobilier_Chaise_Brune Metal Bois_Dossier
La vraie question :
-> quelle autre fonction utiliser pour faire :
"Pseudo-code"
Lire entre les tiret la valeur compléte et si elle est égale à une valeur trouvé dans le tableau des modifications (tableau du milieu) la remplacer par les données renseignées dans ce tableau de modifications.
Remarque : Le nombre de "tiret" est toujours le même et dans le même ordre :
Accueil_[Lieu]_[Type]_[Caractéristique]_[Pièces]
Je vous remercies d'ores et déjà ne fus-ce que d'avoir lu ^^
J'espère être clair dans mes propos ...
Et comme un dessin vaut mieux qu'un long discours : un fichier joint du soucis