Bonjour !
Je reviens vers vous car je bloque sur une syntaxe assez simple je pense, mais dont je n'arrive pas à me dépatouiller malgré mes recherches...
Sur une feuille, j'ai un tableau avec :
en colonne E : une liste de noms d'animaux (de la ligne 7 à la ligne 45)
à partir de la colonne F et jusqu'à la dernière colonne non vide (disons Z pour l'exemple) : des caractéristiques (type "race", "date de naissance", "couleur", etc.)
sur la ligne 4 (de F à Z) des lettres qui correspondent à des colonnes (type "E", "M", "J", etc.)
sur la ligne 6 (de F à Z) des nombres qui correspondent à des lignes (type "52", "64", "86", etc.)
En résumé : une ligne = un animal ; l'adresse des cellules source se trouve en lignes 4 & 6 (4 = colonne source et 6 = ligne source)
Les données contenues dans ce tableau sont mises à jour assez régulièrement à partir d'un classeur source. Sur ce classeur source, chaque feuille correspond à un animal. Le nom de la feuille = le nom de l'animal.
Par exemple je vais mettre à jour la colonne F "race" de la façon suivante :
- je regarde en E7 quel est le nom de l'animal ; je cherche la feuille correspondant à cet animal dans mon classeur source
- je souhaite indiquer la race de cet animal en F7 ; je vais chercher cette information dans la cellule E19
--> E19 car dans ma cellule F4 je trouve "E" et que dans ma cellule F6 je trouve "19"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Range(Range("F" & 4).Value & Range("F" & 6).Value).Value =Range("E" & 19).Value ="labrador"Cette macro fonctionne parfaitement telle quelle, mais comme le nombre de colonnes évolue sans cesse et que certaines colonnes sont ajoutées/supprimées/insérées... J'aimerais remplacer les A, B, C, [...], Z et boucler sur ce code avec un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Sub test() 'ActiveWorkbook étant le classeur source que je viens d'ouvrir, j'ai enlevé le code pour plus de lisibilité 'ws2 étant la feuille 2 du classeur sur lequel je travaille (feuille sur laquelle se trouve mon tableau) Dim fclass For Each fclass In ActiveWorkbook.Sheets For j = 7 To 45 If ws2.Range("E" & j).Value = fclass.Name Then 'si nom de l'animal = nom de la feuille ws2.Range("F" & j).Value = fclass.Range(ws2.Range("F" & 4).Value & ws2.Range("F" & 6).Value).Value ws2.Range("G" & j).Value = fclass.Range(ws2.Range("G" & 4).Value & ws2.Range("G" & 6).Value).Value ws2.Range("H" & j).Value = fclass.Range(ws2.Range("H" & 4).Value & ws2.Range("H" & 6).Value).Value ws2.Range("I" & j).Value = fclass.Range(ws2.Range("I" & 4).Value & ws2.Range("I" & 6).Value).Value ws2.Range("J" & j).Value = fclass.Range(ws2.Range("J" & 4).Value & ws2.Range("J" & 6).Value).Value ws2.Range("K" & j).Value = fclass.Range(ws2.Range("K" & 4).Value & ws2.Range("K" & 6).Value).Value ws2.Range("L" & j).Value = fclass.Range(ws2.Range("L" & 4).Value & ws2.Range("L" & 6).Value).Value ws2.Range("M" & j).Value = fclass.Range(ws2.Range("M" & 4).Value & ws2.Range("M" & 6).Value).Value ws2.Range("N" & j).Value = fclass.Range(ws2.Range("N" & 4).Value & ws2.Range("N" & 6).Value).Value ws2.Range("O" & j).Value = fclass.Range(ws2.Range("O" & 4).Value & ws2.Range("O" & 6).Value).Value ws2.Range("P" & j).Value = fclass.Range(ws2.Range("P" & 4).Value & ws2.Range("P" & 6).Value).Value ws2.Range("Q" & j).Value = fclass.Range(ws2.Range("Q" & 4).Value & ws2.Range("Q" & 6).Value).Value ws2.Range("R" & j).Value = fclass.Range(ws2.Range("R" & 4).Value & ws2.Range("R" & 6).Value).Value ws2.Range("S" & j).Value = fclass.Range(ws2.Range("S" & 4).Value & ws2.Range("S" & 6).Value).Value ws2.Range("T" & j).Value = fclass.Range(ws2.Range("T" & 4).Value & ws2.Range("T" & 6).Value).Value ws2.Range("U" & j).Value = fclass.Range(ws2.Range("U" & 4).Value & ws2.Range("U" & 6).Value).Value ws2.Range("V" & j).Value = fclass.Range(ws2.Range("V" & 4).Value & ws2.Range("V" & 6).Value).Value ws2.Range("W" & j).Value = fclass.Range(ws2.Range("W" & 4).Value & ws2.Range("W" & 6).Value).Value ws2.Range("X" & j).Value = fclass.Range(ws2.Range("X" & 4).Value & ws2.Range("X" & 6).Value).Value ws2.Range("Y" & j).Value = fclass.Range(ws2.Range("Y" & 4).Value & ws2.Range("Y" & 6).Value).Value ws2.Range("Z" & j).Value = fclass.Range(ws2.Range("Z" & 4).Value & ws2.Range("Z" & 6).Value).Value End If Next j Next fclass End Sub
Mais cela ne fonctionne pas. J'ai essayé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DerCol = .Range("XFD6").End(xlToLeft).Column k = 6 to DerCol
Evidemment j'ai essayé en remplaçant les lettres de colonnes en ligne 4 par les chiffres correspondants (ex : j'ai remplacé "A" par 1, "E" par 5, etc.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ws2.Range(k & j).Value = fclass.Range(ws2.Range(k & 4).Value & ws2.Range(k & 6).Value).Value ws2.Cells(j, k).Value = fclass.Range(Cells(4, k).Value & ws2.Cells(6, k).Value).Value ws2.Cells(j, k).Value = fclass.Range(Cells(4, k).Value, ws2.Cells(6, k).Value).Value ws2.Cells(j, k).Value = fclass.Cells(ws2.Cells(6, k).Value, Cells(4, k).Value).Value ws2.Cells(j, k).Value = fclass.Cells(ws2.Cells(6, k), Cells(4, k)).Value ws2.Cells(j, k) = fclass.Cells(ws2.Cells(6, k), Cells(4, k))
Partager