Range(Cells.Value & Cells.Value)
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:
1 2 3
| Range(Range("F" & 4).Value & Range("F" & 6).Value).Value
=Range("E" & 19).Value
="labrador" |
Code:
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 |
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:
1 2
| DerCol = .Range("XFD6").End(xlToLeft).Column
k = 6 to DerCol |
Mais cela ne fonctionne pas. J'ai essayé :
Code:
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)) |
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.)