J'ai besoin d'une petite explication....
J'ouvre deux fichiers pour faire des recherches. Je définis une plage avec ceci :
Set Plage = Workbooks(Source).Sheets("Cdes").Range("J2:J" & Range("F1000000").End(xlUp).Row)
Cela fonctionne MAIS, si Í l'écran j'active l'autre classeur, ma plage est définie par rapport Í la feuille active de ce deuxième classeur ??????????
Comme si l'instruction set se fichait éperdument du nom de fichier et du nom de feuille en ne tenant compte que de la feuille active....
Est-ce normal, ou alors qu'est-ce que je loupe ????
Bonjour, Quand tu travailles avec des objets tels que Range, workbook,, Worksheeet, etc., il est préférable d'utiliser ce type de syntaxe. Au lieu de : Workbooks(Source).Sheets("Cdes").Range("J2:J" & Range("F1000000").End(xlUp).Row) Ceci : '------------------------------- dim Plage as range Dim Sh as worksheet Set sh = workbooks(Source).worksheets("Cdes") with sh set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row) End with '------------------------------- OU '------------------------------- dim Plage as range With workbooks(Source).worksheets("Cdes") set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row) End With '------------------------------- Pour écrire l'équivalent avec la méthode, tu dois utiliser : Set Plage - Workbooks(Source).Sheets("Cdes").Range("J2:J" & Workbooks(Source).Sheets("Cdes").Range("F1000000").End(xlUp).Row) Dans ta syntaxe in1tiale, Range("F1000000").End(xlUp).Row) la valeur de Range() prend la valeur de la feuille active Í l'écran puisqu'il n'est pas défini comme appartenant Í un classeur et une feuille particulière de ce dernier. C'est ce Í quoi sert le "POINT" devant l'expression "Range". MichD
Quand tu travailles avec des objets tels que Range, workbook,,
Worksheeet, etc.,
il est préférable d'utiliser ce type de syntaxe.
Au lieu de :
Workbooks(Source).Sheets("Cdes").Range("J2:J" &
Range("F1000000").End(xlUp).Row)
Ceci :
'-------------------------------
dim Plage as range
Dim Sh as worksheet
Set sh = workbooks(Source).worksheets("Cdes")
with sh
set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row)
End with
'-------------------------------
OU
'-------------------------------
dim Plage as range
With workbooks(Source).worksheets("Cdes")
set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row)
End With
'-------------------------------
Pour écrire l'équivalent avec la méthode, tu dois utiliser :
Set Plage - Workbooks(Source).Sheets("Cdes").Range("J2:J" &
Workbooks(Source).Sheets("Cdes").Range("F1000000").End(xlUp).Row)
Dans ta syntaxe in1tiale, Range("F1000000").End(xlUp).Row)
la valeur de Range() prend la valeur de la feuille active Í l'écran
puisqu'il n'est pas défini comme appartenant Í un classeur et une
feuille particulière de ce dernier. C'est ce Í quoi sert le "POINT"
devant l'expression "Range".
Bonjour, Quand tu travailles avec des objets tels que Range, workbook,, Worksheeet, etc., il est préférable d'utiliser ce type de syntaxe. Au lieu de : Workbooks(Source).Sheets("Cdes").Range("J2:J" & Range("F1000000").End(xlUp).Row) Ceci : '------------------------------- dim Plage as range Dim Sh as worksheet Set sh = workbooks(Source).worksheets("Cdes") with sh set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row) End with '------------------------------- OU '------------------------------- dim Plage as range With workbooks(Source).worksheets("Cdes") set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row) End With '------------------------------- Pour écrire l'équivalent avec la méthode, tu dois utiliser : Set Plage - Workbooks(Source).Sheets("Cdes").Range("J2:J" & Workbooks(Source).Sheets("Cdes").Range("F1000000").End(xlUp).Row) Dans ta syntaxe in1tiale, Range("F1000000").End(xlUp).Row) la valeur de Range() prend la valeur de la feuille active Í l'écran puisqu'il n'est pas défini comme appartenant Í un classeur et une feuille particulière de ce dernier. C'est ce Í quoi sert le "POINT" devant l'expression "Range". MichD
Bonjour, Quand tu travailles avec des objets tels que Range, workbook,, Worksheeet, etc., il est préférable d'utiliser ce type de syntaxe. Au lieu de : Workbooks(Source).Sheets("Cdes").Range("J2:J" & Range("F1000000").End(xlUp).Row) Ceci : '------------------------------- dim Plage as range Dim Sh as worksheet Set sh = workbooks(Source).worksheets("Cdes") with sh set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row) End with '------------------------------- OU '------------------------------- dim Plage as range With workbooks(Source).worksheets("Cdes") set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row) End With '------------------------------- Pour écrire l'équivalent avec la méthode, tu dois utiliser : Set Plage - Workbooks(Source).Sheets("Cdes").Range("J2:J" & Workbooks(Source).Sheets("Cdes").Range("F1000000").End(xlUp).Row) Dans ta syntaxe in1tiale, Range("F1000000").End(xlUp).Row) la valeur de Range() prend la valeur de la feuille active Í l'écran puisqu'il n'est pas défini comme appartenant Í un classeur et une feuille particulière de ce dernier. C'est ce Í quoi sert le "POINT" devant l'expression "Range". MichD
Quand tu travailles avec des objets tels que Range, workbook,,
Worksheeet, etc.,
il est préférable d'utiliser ce type de syntaxe.
Au lieu de :
Workbooks(Source).Sheets("Cdes").Range("J2:J" &
Range("F1000000").End(xlUp).Row)
Ceci :
'-------------------------------
dim Plage as range
Dim Sh as worksheet
Set sh = workbooks(Source).worksheets("Cdes")
with sh
set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row)
End with
'-------------------------------
OU
'-------------------------------
dim Plage as range
With workbooks(Source).worksheets("Cdes")
set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row)
End With
'-------------------------------
Pour écrire l'équivalent avec la méthode, tu dois utiliser :
Set Plage - Workbooks(Source).Sheets("Cdes").Range("J2:J" &
Workbooks(Source).Sheets("Cdes").Range("F1000000").End(xlUp).Row)
Dans ta syntaxe in1tiale, Range("F1000000").End(xlUp).Row)
la valeur de Range() prend la valeur de la feuille active Í l'écran
puisqu'il n'est pas défini comme appartenant Í un classeur et une
feuille particulière de ce dernier. C'est ce Í quoi sert le "POINT"
devant l'expression "Range".
Bonjour, Quand tu travailles avec des objets tels que Range, workbook,, Worksheeet, etc., il est préférable d'utiliser ce type de syntaxe. Au lieu de : Workbooks(Source).Sheets("Cdes").Range("J2:J" & Range("F1000000").End(xlUp).Row) Ceci : '------------------------------- dim Plage as range Dim Sh as worksheet Set sh = workbooks(Source).worksheets("Cdes") with sh set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row) End with '------------------------------- OU '------------------------------- dim Plage as range With workbooks(Source).worksheets("Cdes") set Plage = .Range("J2:J" & .Range("F1000000").End(xlUp).Row) End With '------------------------------- Pour écrire l'équivalent avec la méthode, tu dois utiliser : Set Plage - Workbooks(Source).Sheets("Cdes").Range("J2:J" & Workbooks(Source).Sheets("Cdes").Range("F1000000").End(xlUp).Row) Dans ta syntaxe in1tiale, Range("F1000000").End(xlUp).Row) la valeur de Range() prend la valeur de la feuille active Í l'écran puisqu'il n'est pas défini comme appartenant Í un classeur et une feuille particulière de ce dernier. C'est ce Í quoi sert le "POINT" devant l'expression "Range". MichD
ThierryP
Bonjour Denis, Bien vu ! Erreur d'inattention de ma part, je ne me suis pas relu ! En tous cas, toujours aussi rapide et pédagogique ! Merci Í toi, ThierryP
Bonjour Denis,
Bien vu ! Erreur d'inattention de ma part, je ne me suis pas relu !
En tous cas, toujours aussi rapide et pédagogique !
Bonjour Denis, Bien vu ! Erreur d'inattention de ma part, je ne me suis pas relu ! En tous cas, toujours aussi rapide et pédagogique ! Merci Í toi, ThierryP
MichD
Le 15/03/22 Í 06:37, ThierryP a écrit :
Bonjour Denis, Bien vu ! Erreur d'inattention de ma part, je ne me suis pas relu ! En tous cas, toujours aussi rapide et pédagogique ! Merci Í toi, ThierryP
Set Plage = Workbooks(Source).Sheets("Cdes").Range("J2:J" & Range("F1000000").End(xlUp).Row) Même si tu insérais un point devant: .Range("F1000000").End(xlUp).Row) La ligne de code générerait une erreur, et sans ce "POINT", ce range .Range("F1000000").End(xlUp).Row) appartiendrait Í la feuille active au même de l'exécution et non Í la feuille et au classeur spécifiquement définit. Ce type de syntaxe est erroné. MichD
Le 15/03/22 Í 06:37, ThierryP a écrit :
Bonjour Denis,
Bien vu ! Erreur d'inattention de ma part, je ne me suis pas relu !
En tous cas, toujours aussi rapide et pédagogique !
Merci Í toi,
ThierryP
Set Plage = Workbooks(Source).Sheets("Cdes").Range("J2:J" &
Range("F1000000").End(xlUp).Row)
Même si tu insérais un point devant: .Range("F1000000").End(xlUp).Row)
La ligne de code générerait une erreur, et sans ce "POINT", ce range
.Range("F1000000").End(xlUp).Row) appartiendrait Í la feuille active au
même de l'exécution et non Í la feuille et au classeur spécifiquement
définit. Ce type de syntaxe est erroné.
Bonjour Denis, Bien vu ! Erreur d'inattention de ma part, je ne me suis pas relu ! En tous cas, toujours aussi rapide et pédagogique ! Merci Í toi, ThierryP
Set Plage = Workbooks(Source).Sheets("Cdes").Range("J2:J" & Range("F1000000").End(xlUp).Row) Même si tu insérais un point devant: .Range("F1000000").End(xlUp).Row) La ligne de code générerait une erreur, et sans ce "POINT", ce range .Range("F1000000").End(xlUp).Row) appartiendrait Í la feuille active au même de l'exécution et non Í la feuille et au classeur spécifiquement définit. Ce type de syntaxe est erroné. MichD