Donnée d'une colonne en fonction du nom d'une feuille
Bonjour la team,
Tout d'abord merci d'avance pour votre aide
J'expose mon besoin :
1. Dans ma macro Je créer des colonnes en fonction des feuilles active exemple si j'ai une feuille qui se nomme Paris2023 alors il va créer une colonne avec intitulé Paris2023 (colonne I4)
2. J'ai besoin de mettre dans la feuille "ville" dans la colonne" I5" "J5" etc.. (jusqu'à la dernière colonne et dernière ligne de la colonne A) la donnée de la feuille associé qui se trouve dans la colonne P4 (exemple si dans la colonne I4 j'ai Paris2023 alors récupère dans la feuille Paris2023 la donnée de la colonne "P4" ainsi de suite .....
3. Idem dans la colonne I6 J6 etc.. (jusqu'à la dernière colonne et dernière ligne de la colonne A) de la feuille ville rechercher selon l'ID dans la feuille associé et mettre donnée de la colonne AA
exemple de formule =RECHERCHEV($A6;Paris2023!$C$4:$AA$10000;25;FAUX)
Le problème c'est que le noms des feuilles changent, c'est dynamique donc il faut un code dynamique
exemple :
J'espère avoir été clair
Bonjour,
Formule en I6 à tirer vers la droite et vers le bas:
=SIERREUR(RECHERCHEV($A6;INDIRECT(I$4&"!$C$4:$AA$418");25;FAUX);"")Cdlt
Bonjour Arturo83,
Merci beaucoup pour la formule elle fonctionne parfaitement je vais essayer de l'adapter dans un code VBA du coup pour l'automatiser sur toutes les lignes
Il me reste du coup la colonne I5
Merci encore
Bonjour Arturo83,
petite question stp j'ai modifier la formule pour lui de chercher dans toute la colonne A (j'ai mis A:A au lieu de A$6 ce qui marche parfaitement) par contre j'ai voulu mettre aussi C:C au lieu de C$4; pour rechercher dans toute la colonne C mais la plus rien ne s'affiche. Peux tu m'orienter sur mon erreur ? Merci d'avance
=SIERREUR(RECHERCHEV($A:A;INDIRECT(I$4&"!$C:C;$AA$10000");25;FAUX);"")
Bonsoir tout le monde,
Pas certain d'avoir tout compris....
Un essai...
Cordialement,
Bonjour Xsorsankukai,
Tu as parfaitement bien compris, c'est exactement ce que je voulais
Pour bien comprendre/apprendre et m'aider pour la maintenance est-il possible de me détailler les lignes de la macro stp ? si c'est pas trop demander
je veux faire une petite modif car la colonne "A" ID dans la feuille "Ville" sera remplis manuellement pour servir de base (donnée à jour) pour la formule (parce que la si je comprend bien ça copie toutes les ID de la colonne C de toutes les feuilles)
Merci encore
Concernant ces 2 remarques:
Il me reste du coup la colonne I5
en I5 et à tirer vers la droite:
=INDIRECT(I$4&"!P4")j'ai mis A:A au lieu de A$6 ce qui marche parfaitement
je n'ai jamais mis "A$6" mais "$A6"
Pour la 3ème remarque je n'ai pas encore regardé.
Edit: Zut, j'ai zappé la réponse de Xorsankukai que je salue, apparemment il a répondu à toutes les questions.
Bonne soirée
Re,
Salut Arturo83,
ID dans la feuille "Ville" sera remplis manuellement
Tu n'as pas besoin de la macro MajID.
La macro test commentée:
Sub test() 'crée les colonnes
Dim tb(), i%, k%, dl%, dc%
Dim plage As Range
Application.ScreenUpdating = False 'désactive le rafraichissement de l'écran
With Sheets("Ville") 'agit sur cette feuille
dl = .Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne en fonction de la colonne A
If Sheets.Count > Sheets("Ville").Index Then 'si il y a des feuilles après Ville
dc = Sheets.Count - Sheets("Ville").Index 'définit dernière colonne dc (nb feuilles - indice de la feuille Ville)
'définit plage de la cellule I6 à dernière ligne,dernière colonne (pour les formules)
Set plage = Sheets("Ville").Range(.Cells(6, 9), .Cells(dl, 9 + dc))
k = 0 'indice de départ du tableau tb
For i = Sheets("Ville").Index + 1 To Sheets.Count 'boucle sur les feuilles ,en commençant après la feuille Ville
ReDim Preserve tb(1 To 2, 1 To k + 1) 'redimensionne le tableau tb (2 lignes, k colonnes)
tb(1, k + 1) = Sheets(i).Name 'nom de la feuille en 1ére colonne
tb(2, k + 1) = Sheets(i).Range("P4") 'formation suivie en seconde ligne
k = k + 1 'incrémente l'indice k
Next i 'feuille suivante
If k > 0 Then 'si indice k>0
'on efface les données et les mises en forme des colonnes I à Z
.Columns("I:Z").ClearContents: .Columns("I:Z").Interior.Color = xlNone: .Columns("I:Z").Font.ColorIndex = xlAutomatic
'on écrit les données du tableau tb à partir de la cellule I4 redimensionnée, police en gras
.Cells(4, "I").Resize(2, k) = tb: .Cells(4, "I").Resize(2, k).Font.Bold = True
'couleur bleue + police en blanc pour la premère ligne
.Cells(4, "I").Resize(1, k).Interior.ColorIndex = 5: .Cells(4, "I").Resize(1, k).Font.ColorIndex = 2
'formules R1C1 sur la plage
plage.FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,INDIRECT(R4C &""!$C:$AA""),25,FALSE),"""")"
End If 'fin de la condition k>0
End If 'fin de la condition nombre feuille > indice feuille ville
Erase tb: Set plage = Nothing 'libère la mémoire
End With
End Sub
Cordialement,
Bonjour la team,
Arturo83 et Xorsankukai, merci infiniment c'est juste parfait vous êtes des monstres
j'ai adapté le code dans le fichier originale nikel merci beaucoup faut juste que je regarde pourquoi il veut pas aligner et centrer jusqu'à la dernière colonne (petit bug ?) il faut aussi que je rajoute un renvoi à la ligne (pour bien ajuster le texte)
J'aurai 2 petites modifs à faire svp
==> La 1ere besoin : c'est de remplacer l'indice de départ : au lieu de mettre le nom de la feuille mettre à partir de la 12eme feuille (parce que le nom de la feuille peux changer à tout moment)
k = 0 'indice de départ du tableau tb
For i = Sheets("Ville").Index + 1 To Sheets.Count 'boucle sur les feuilles ,en commençant après la feuille Ville==> La 2 besoins : c'est de lui dire de parcourir toutes les feuilles et si la colonne X contient le mot Conforme ou Conformes alors mettre la colonne en jaune sinon en Bleu dans la feuille "Ville" ( à partir de la colonne I5 jusqu'à la dernière ) exemple en PJ
Merci d'avance !!!!!!!!!!!!!
Bonjour et bonne année à tous ,
Nouvel essai....donc à partir de la feuille 12....+ couleur sur les colonnes...en fonction de X4 (sur les feuilles) ?
Cordialement,
Re,
mettre en couleur la 5 -ème ligne
Ok, ça devrait être bon cette fois-ci,
Cordialement,
Xorsankukai merci beaucouppppppppp t'es un monstre
J'essaie encore de comprendre ton code il est vraiment riche c'est trop balèze pour mon faible niveau
Une question si mon besoin évolue exemple je décale une colonne je doit plus commencer à partir de la colonne I5 mais J5. Qu'es que je doit changer dans le code j'ai fait des tests non concluant en remplaçants par exemple :
Cells(6, 9), .Cells(dl, 9 + dc)) par Cells(6, 11), .Cells(dl, 11 + dc))
.Cells(3, "I").Resize(3, k) = tb: .Cells(4, "I") par . Cells(3, "K").Resize(3, k) = tb: .Cells(4, "K")
tu peux aussi m'expliquer la variable : Dim tb(), i%, k%, dl%, dc%, x%
Merci d'avance, pour ta lumière
Re,
Merci pour le retour,
tu peux aussi m'expliquer la variable : Dim tb(), i%, k%, dl%, dc%, x%
- tb est un tableau,
les % indique une variable integer (https://www.excel-pratique.com/fr/vba/variables).
- I pour la boucle sur les feuilles,
- K pour les lignes du tableau tb,
- dl pour définir la dernière ligne de la feuille ville , à partir de la colonne A
- dc pour définir la dernière colonne de la plage en fonction des colonnes à créer.
- x est utilisé pour boucler sur les colonnes rajoutées.
Une question si mon besoin évolue exemple je décale une colonne je doit plus commencer à partir de la colonne I5 mais J5. Qu'es que je doit changer dans le code
En Rose, le code actuel, à partir de la colonne I
En Vert, d'après ton exemple, à partir de la colonne J
Cordialement,
xsorsankukai merci beaucoup pour ta lumière ton code est très très intéressants je vais bien le décortiquer pour apprendre
Je viens d'adapter le code à mon fichier originale c'est juste excellent. Il y a juste un hic c'est que le mot dans la colonne x peut contenir le mot sous différentes forme Majuscule ou Minuscule voir contenir une phrase contenant ce mot (exemple : "Conforme" ou "Conformes / Formation/ (Annuelle)" ou CONFORME/SECURITE etc....
Le problème du coup c'est qu'avec cette ligne de commande n'est pas dynamique
tb(1, k + 1) = IIf(UCase(Sheets(i).Range("X4")) Like "CONFORME*", 6, 8) 'code couleur
D'avance, merci pour ton aide
Bonjour Tonton95, le forum,
Du coup, je ne sais plus pour quel critère tu souhaites la couleur jaune ?
- Actuellement (sauf erreur de ma part), le code ne tient pas compte de la casse (majuscule ou minuscule) car j'utilise Ucase .
- Ensuite, le fait d'avoir rajouté une étoile à CONFORME fait qu'à partir du moment ou la cellule commence par conforme, la couleur sera jaune, mais ce n'est peut-être pas ce que tu souhaites ?
Cordialement,
Xorsankukai, merci pour ton retour
Je viens de faire le test en minuscule mais c'est non concluant j'ai plus la couleur jaune dès que je fait une modif sur le mot.
Effectivement, le mot peut être soit au début soit au milieu soit à la fin
Exemple de cas possible :
"Conforme"
"Conformes / Formation/ (Annuelle)"
SECURITE/CONFORME/LSC
PCC / LSC / conforme
etc...
Re,
Effectivement, le mot peut être soit au début soit au milieu soit à la fin
Dans ce cas, il faut une étoile avant et après conforme...
tb(1, k + 1) = IIf(UCase(Sheets(i).Range("X4")) Like "*CONFORME*", 6, 8)Pour les majuscules/minuscules, je ne comprends pas, j'ai fait l'essai, ça fonctionne....
Cordialement,
Re,
Merci beaucoup!!! avec une étoile avant et après ça fonctionne bien par contre je suis obligé de le mettre comme ci-dessous (en Majuscule) bizarrement en minuscule ça fonctionne pas chez moi. (exemple en PJ voir le module 2 pour test en minuscule et module 1 pour test)
https://learn.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/ucase-function
tb(1, k + 1) = IIf(UCase(Sheets(i).Range("X4")) Like "*CONFORME*", 6, 8) 'code couleur
==> J'ai une question aussi stp si jamais j'ai besoin de faire évoluer le code selon le besoin suivant (j'ai juste tester en rajoutant des lignes mais sans succès)
Exemple :
si contient Conforme mettre code couleur 6 et police en gras et Noir
si contient LIST mettre code couleur 7 et police en surligné Gras et Blanc
si contient RH mettre code couleur 10 et police en Italique et Noir
Bonjour tonton95, le forum,
Dans le code , tu a écrit : " *conforme*", donc c'est normal que cela ne fonctionne pas avec Ucase...
Ucase transforme le texte en MAJUSCULE, donc on dit si Majuscule(texte) = "*conforme*", alors couleur jaune.
Dans ce cas, il te faut Lcase...donc soit :
tb(1, k + 1) = IIf(LCase(Sheets(i).Range("X4")) Like "*conforme*", 6, 8) 'code couleur
soit
tb(1, k + 1) = IIf(UCase(Sheets(i).Range("X4")) Like "*CONFORME*", 6, 8) 'code couleurOn peut aussi essayer pour assurer le coup:
tb(1, k + 1) = IIf(UCase(Sheets(i).Range("X4")) Like UCase("*CONFORME*"), 6, 8) 'code couleurou
tb(1, k + 1) = IIf(LCase(Sheets(i).Range("X4")) Like LCase("*CONFORME*"), 6, 8) 'code couleurPour l'autre demande, je regarde dès que j'ai un moment,
Cordialement,
