Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA- Recherche dans cellule et Mise en forme en tableaux

hervé_débutant

XLDnaute Nouveau
Bonjour le forum,

je suis confronté à un problème de mise en forme que je souhaiterais résoudre avec du VBA pour éviter des formules à copier dans toutes mes cellules. Le problème c'est que je ne connais pas grand chose au VBA.

Pour faire court, je récupère via Power Query des données sous forme de tableau. Mais je souhaiterais les mettre au format d'un tableau déjà existant.

Concrètement dans le tableau A fichier initial
une ligne = 1 code et une colonne par catégorie (ces catégorie peuvent avoir plusieurs modalités)

Dans mon tableau B fichier importé
une ligne par catégorie voire sous catégorie (les modalité du précédent tableau) et dans une colonne chaque cellule contient une liste de codes contenus dans ma catégorie voire sous catégorie.

l'idée serait de récupérer les données du tableau B pour les injecter dans le tableau A via une macro VBA.
Une petite précision les sous catégories du tableau B devraient apparaître comme modalités dans le tableau A.

Bon dit comme cela je me rends compte que sans doute personne ne peut comprendre ce que je veux dire alors je vais joindre un fichier Excel avec deux feuilles correspondant aux deux tableaux.


Tab_csv_importee (tableau B)
Tab_reformatee (tableau A)

le nombre de colonnes du tableau B peut varié mais il contiendra toujours une colonne avec le nom "Nom13". Dans cette colonne chaque cellule contient une liste de codes. Chaque ligne correspond à une catégorie (précisée dans la colonne "Nom4") et une sous catégorie (précisée dans la colonne "Nom12").
Je souhaiterais faire apparaître dans le tableau A. Où chaque ligne est égale à un code et chaque colonne est égale à une catégorie du tabelau B. Les modalité d'une catégorie correspondent aux sous catégorie du tableau B.
Il est possible qu'un code appartienne à plusieurs sous catégories dans le tableau B. Il serait génial de pouvoir les faire apparaître dans la cellule du tableau A séparées par un "/".

En espérant que j'ai été compréhensible, je vous remercie énormément pour votre aide, merci beaucoup ce sera pour l'occasion d'apprendre ce fameux VBA...

@ bientôt,
Hervé
 

Pièces jointes

  • Exemple_mise_en_forme.xlsx
    14.6 KB · Affichages: 47
  • Exemple_mise_en_forme.xlsx
    14.6 KB · Affichages: 44
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : VBA- Recherche dans cellule et Mise en forme en tableaux

Salut RV,
C'est prise de tête ton truc, j'aime bien les défits donc je si je réponds c'est en principe OK
Pour les explications pour apprendre VBA on verras après.
Va voir en macro "youky" exécuter
Bruno
 

Pièces jointes

  • Exemple_Youky.xlsm
    23.6 KB · Affichages: 49
  • Exemple_Youky.xlsm
    23.6 KB · Affichages: 41

hervé_débutant

XLDnaute Nouveau
Re : VBA- Recherche dans cellule et Mise en forme en tableaux


Salut Bruno (Youky)!! Salutations au Forum,

C'est prise de tête ton truc, j'aime bien les défits donc je si je réponds c'est en principe OK
Pour les explications pour apprendre VBA on verras après.
Va voir en macro "youky" exécuter
Bruno

Avant tout, Merci beaucoup! Bruno! pour ta réponse supère rapide et vraiment géniale. J'ai vraiment été bluffé quand j'ai lancé ta macro. Cela dit je crois que la prise de tête n'est pas terminée...et que le défis reste conséquent....

Je te fais part de trois points que j'ai noté:
1) En fait ta macro se comporte bizarrement lorsque que le nombre (ou l'ordre) de colonnes du tableau importé change. Je suis donc allé voir dans le code (qui est assez court d'ailleurs, je m'attendais à une solution plus longue bravo) et je n'ai rien compris...ou pas grand chose... par contre je n'ai vu aucune référence au nom des colonnes et j'ai l'impression que tu as choisi l'option du numéro de colonne pour rechercher les valeurs. Serait-il possible d'ajuster cette macro en utilisant le nom des colonnes car les noms des colonnes cibles resteront toujours les mêmes mais le nombre et l'ordre des colonnes eux pourront changer à chaque nouveaux tableaux importés.

2) L'ajout d'une catégorie (= rajout de ligne avec une modalité supplémentaire dans la colonne correspondante) ne permet pas de voir apparaître une nouvelle colonne avec les valeurs des sous catégories pour chaque code. En fait les valeur fusionnent avec celle d'une sous catégorie précédente.

3) En faite le tableau initiale devrait en théorie déjà avoir la liste de l'ensemble des codes (1 par ligne) mais aucune entête pour les colonnes. Ainsi la macro devrait rajouter des colonnes avec leur entête ( soit au total n colonnes rajoutées dans le tableau initiale pour n catégories dans le tableau importé) et remplir chaque ligne avec la (ou les) modalité(s) correspondantes au(x) sous catégorie(s) pour un code et une catégorie donnés.

Cela dit cette option d'avoir la possibilité de partir d'un fichier sans avoir au préalable la liste des code est vraiment très puissante et peut être très utile il serait dommage de la faire complètement disparaître de ta macro. Peut-être pourrions-nous la garder en option
si la liste des codes est absente?

Enfin voilà, merci beaucoup Youky pour ton aide, j'espère que mes nouvelles explications ne sont pas trop confuses mais bon on s'en tire pas mal vu ta première version qui était quand même très proche du résultat espéré.

Merci beaucoup,
@ bientôt,

RV

PS: ok l'apprentissage se fera progressivement
 

youky(BJ)

XLDnaute Barbatruc
Re : VBA- Recherche dans cellule et Mise en forme en tableaux

Bon ça à l'air bien plus complexe encore que prévu....
Comment je fais pour trouver ou sont les colonnes si pas d'entête et si leur nombre varie et dans n'importe quel ordre je pense.
Fait un exemple d'un fichier comme tu reçois ou même plusieurs exemples du plus simple au plus compliqué.
Dur dur pour la tête.
Bruno
 

hervé_débutant

XLDnaute Nouveau
Re : VBA- Recherche dans cellule et Mise en forme en tableaux

Bonjour Bruno, Bonjour le forum,

Voici un fichier plus clair. En fait, dans les tableaux .csv importés où il faudrait rechercher les données, il y a des entêtes avec toujours les mêmes noms ici les colonnes appelées Nom4 (catégorie), Nom12 (sous catéorie) et Nom13 (code) sont toujours présentes et sont les colonnes à utiliser pour extraire les informations. Comme tu peux le voir dans les deux exemples de tableaux importés le nombre et l'ordre des colonnes peuvent varier mais les noms des entêtes restent identiques.

Le fichier ou devrait être injecté les données possède déjà la liste des codes dans la première colonne (même si ton option de générer cette liste est vraiment géniale!). J'ai mis deux versions de ce tableau avant et après la macro.

Comme tu le vois les entêtes (catégories = Nom4) ont été rajoutées et le tableau rempli avec les valeurs (sous catégories= Nom12). Avec la possibilité d'avoir plusieurs sous catégories dans une même cellule séparées par "/".

Voilà, j'espère avoir été un peu plus clair aidé par le nouveau fichier et des commentaires pour chaque partie du tableau reformaté.

Encore merci Bruno pour ton aide malgré la prise de tête!!
A bientôt,
RV
 

Pièces jointes

  • Exemple_mise_en_forme.xlsx
    21.4 KB · Affichages: 51
  • Exemple_mise_en_forme.xlsx
    21.4 KB · Affichages: 43

youky(BJ)

XLDnaute Barbatruc
Re : VBA- Recherche dans cellule et Mise en forme en tableaux

Bonnes explications alors voila de quoi tester.
Plus facile que prévu sans prise de tête.
Tableau pas facile si à faire manuellement.
Bruno
 

Pièces jointes

  • Exemple_Youky.xlsm
    26.1 KB · Affichages: 28
  • Exemple_Youky.xlsm
    26.1 KB · Affichages: 34

hervé_débutant

XLDnaute Nouveau
Re : VBA- Recherche dans cellule et Mise en forme en tableaux

Bonsoir Bruno,

Merci beaucoup!!
Pour l'identification du nom des colonnes dans les tableaux importés: c'est gagné!! la macro trouve les valeurs même si je rajoute une colonne au milieu! Bravo! j'ai retrouvé ces noms dans le code et pourrai le modifier en fonction des fichiers, merci!

Par contre pour les entêtes dans le tableau reformaté, effectivement si les entêtes ne sont pas déjà là la macro se mélange les pinceaux.
En fait, il faudrait pouvoir créer une liste des entêtes à partir d'une liste des catégories sans doublon et transposées. Cette étape serait difficilement réalisable manuellement car à terme il peut y avoir des fichiers avec plusieurs centaines de catégories dont le nom et le nombre changent à chaque fois.

Sans doute la dernière difficulté car on se rapproche du résultat espéré. Quelle frustration de ne pas pouvoir t'aider. En tout cas encore merci, pour ton aide. Ce formatage va me faire gagner un temps fou!!

@ bientôt Bruno,

RV
 

youky(BJ)

XLDnaute Barbatruc
Re : VBA- Recherche dans cellule et Mise en forme en tableaux

Bon à voir si c'est ça........
La prise de tête était assurée.
Bruno
 

Pièces jointes

  • Exemple_Youky.xlsm
    27 KB · Affichages: 37
  • Exemple_Youky.xlsm
    27 KB · Affichages: 35

hervé_débutant

XLDnaute Nouveau
Re : VBA- Recherche dans cellule et Mise en forme en tableaux

Wouao!!

C'est génial! merci Bruno. J'ai fait plusieurs tests et tout me semblait ok.... Mais il y a cependant un point qui m'interpelle. Quand je regarde le code j'identifie les trois noms de colonne Num4, Num12 et Num13 qui sont utilisées dans la macro (n4, n12 et n13). Mais je ne comprends pas pourquoi c'est la valeur de Num2 qui est choisi dans le tableau.
En fait si je change la valeur de la sous catégorie (colonne Num12) rien ne se passe et d'ailleurs n12 n'est jamais rappelé dans le script, mais si je change les valeurs dans la colonne Num2 (pourtant pas nommée dans le script), ces valeurs sont reportées dans le tableau post macro?

Là, j'ai du mal à comprendre comment c'est possible. Je n'ai pas les connaissances pour y voir plus clair mais j'ai l'impression que la prise de tête n'est pas complètement terminée....

Ha, oui l'autre point que je ne comprends pas, c'est pourquoi "b" est incrémenté de 2 à 10. Pourquoi 10? Bon en fait je ne comprends pas à quoi correspond ce b.

En tout cas merci beaucoup pour ton aide Bruno, car je n'y comprends rien...

@ bientôt,
RV
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : VBA- Recherche dans cellule et Mise en forme en tableaux

Hé oui j'ai zappé pour Nom12
Voici rectifié je pense que c'est bon.
J'ai mis des explications dans la macro.
Tiens moi au courant.
Bruno
 

Pièces jointes

  • Exemple_Youky.xlsm
    27.9 KB · Affichages: 36
  • Exemple_Youky.xlsm
    27.9 KB · Affichages: 34

hervé_débutant

XLDnaute Nouveau
Re : VBA- Recherche dans cellule et Mise en forme en tableaux

Excellent! Merci Bruno!!! J'adore!!!

Effectivement la macro se comporte bien mieux maintenant. J'ai fait pas mal de tests et pour l'instant R.A.S. tout est ok!
Merci pour les explications je vais regarder plus en détail.

Quel bonheur se forum!!

Bon j'avais pensé à d'autres perfectionnements mais pour garder une certaine cohérence ou clarté entre les différentes discussions je pense que ce sera l'occasion d'ouvrir d'autres discussions si le sujet n'a pas déjà été traité sur ce forum.

Encore merci, je ne sais pas si il y a une procédure pour marquer cette discussion comme résolue.

A bientôt,
RV
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…