NB Colonnes non fixes
Bonjour petite question bête j'aimerai déclarer cette plage de données :
DerCol = .Range("B2" & Columns.Count).End(xlToLeft).Column
GDP = .Range("B2:B" & DerCol)
Est-ce la bonne formulation pour déclarer une plage de données où le nombre de colonnes va changer ?
Merci d'avance !
Bonjour,
Je verrais mieux un code de ce type :
Dim GDP As Range
With ActiveSheet
Set GDP = .Range("B2", .Cells(2, Columns.Count).End(xlToLeft))
End WithA+
Est ce que cette formulation en prend pas seulement la ligne 2 ?
J'aimerai que GDP fasse 190 lignes en plus
C'est pour cela que j'avais défini DerCol car je m'en sers dans plusieurs fonctions (et je fais plusieurs variantes) :
With Worksheets("GDP_Deflator")
DerCol = .Range("B2" & Columns.Count).End(xlToLeft).Column
GDP = .Range("B2:B190" & DerCol)
GDP_Pays = .Range("B:B")
GDP_Year = .Range(Cells(2, 2).Cells(2, DerCol))
End With
Au passage comment je peux m'assurer que ces lignes de codes marchent (genre faire apparaitre quelque part les données )?
Merci beaucoup !
Plusieurs choses à savoir pour éviter de te perdre :
1) Pour déterminer le numéro de la dernière colonne renseignée sur la ligne 2 :
DerCol = .Cells(2, Columns.Count).End(xlToLeft).ColumnPour visualiser l'effet de cette instruction, tu te positionnes sur la dernière cellule de la ligne 2 (soit XFD2) puis tu appuies sur fin, puis flêche gauche.
C'est ce que fait la partie = .Cells(2, Columns.Count).End(xlToLeft)
.column renvoyant le numéro de colonne de la cellule ainsi sélectionnée.
2) Pour déterminer le numéro de la dernière ligne renseignée dans la colonne B :
DerLig = .Range("B" & Rows.Count).End(xlUp).RowPour visualiser l'effet de cette instruction, tu te positionnes sur la dernière cellule de la colonne B (soit B1048576) puis tu appuies sur fin, puis flêche haut.
3) Pour définir une plage de cellules il faut utiliser l'instruction SET qui permet d'attribuer une référence d'objet à la variable.
Exemples :
Set GDP_Pays = .Range("B3:B" & DerLig) pour la plage renseignée de la colonne B (En-têtes des lignes),
Set GDP_Year = .Range(.Cells(2, 3),.Cells(2, DerCol)) pour la plage renseignée de la ligne 2B (En-têtes des colonnes),
Set GDP_Données = .Range(.Cells(3, 3), .Cells(DerLig, DerCol)) pour la plage de données.Un code à tester pour visualiser ces instructions :
Option Explicit
Sub Test()
Dim DerLig As Long
Dim DerCol As Integer
Dim GDP_Pays As Range, GDP_Year As Range, GDP_Données As Range
With Worksheets("GDP_Deflator")
DerCol = .Cells(2, Columns.Count).End(xlToLeft).Column
DerLig = .Range("B" & Rows.Count).End(xlUp).Row
Set GDP_Pays = .Range("B3:B" & DerLig)
MsgBox "Pays :" & Chr(10) & GDP_Pays.Address
Set GDP_Year = .Range(Cells(2, 3), .Cells(2, DerCol))
MsgBox "Années :" & Chr(10) & GDP_Year.Address
Set GDP_Données = .Range(.Cells(3, 3), .Cells(DerLig, DerCol))
MsgBox "Données :" & Chr(10) & GDP_Données.Address
End With
End SubA+
Merci j'ai tout compris c'était super clair
A+