Bonjour,
J'ai constaté par hasard aujourd'hui que l'objet Range était lié à un objet Worksheet, et que cela ne pouvait pas être changé facilement.
Je m'explique au moyen d'un exemple:
L'objet rg1 est lié à la feuille 1 (car il semble qu'un set rg1 = range lie l'objet rg1 à la feuille active), rg2 à la feuille 2. Du coup, la fonction intersect me retourne une erreur.
J'avais pensé à un truc du genre
, mais il semble que la propriété address ne couvre pas forcément tout l'objet range... Notamment si on récupère les cellules visibles après un filtre automatique.
Une solution serait évidemment d'activer la feuille 2 avant d'utiliser la fonction intersect, mais je voudrais éviter de passer visuellement d'une feuille à l'autre.
Je me demandais donc comment je pourrais résoudre mon problème. Je pensais aux pistes suivantes, dont je n'ai pas encore trouvé de solution:
-activer une feuille en tâche de fond
-changer la propriété range.worksheet, ou trouver une solution qui remplace
(ne marche pas, retourne un code d'erreur 1004)
-arriver à récupérer l'adresse d'un objet range qui soit complète.
Si vous avez des idées, je suis preneur!
Merci par avance,
Haleakala
J'ai constaté par hasard aujourd'hui que l'objet Range était lié à un objet Worksheet, et que cela ne pouvait pas être changé facilement.
Je m'explique au moyen d'un exemple:
Code:
dim rg1, rg2 as Range
dim ws1, ws2 as Worksheet
set ws1 = worksheets(1) 'dans notre exemple, feuille active
ws1.activate
set ws2 = Worksheets(2)
With ws2
.AutoFilterMode = False
.Rows(1).AutoFilter
.Rows(1).AutoFilter Field:=1,_
Criteria1:="<>"
End With
'par exemple, le résultat d'un filtre automatique sur la feuille 2
Set rg2= ws2.Cells.SpecialCells(xlCellTypeVisible)
set rg1= Range("A:A")
'Et là l'erreur arrive
set rg1 = application.intersect(rg1, rg2)
L'objet rg1 est lié à la feuille 1 (car il semble qu'un set rg1 = range lie l'objet rg1 à la feuille active), rg2 à la feuille 2. Du coup, la fonction intersect me retourne une erreur.
J'avais pensé à un truc du genre
Code:
set rg2=rg2.address(rg2)
Une solution serait évidemment d'activer la feuille 2 avant d'utiliser la fonction intersect, mais je voudrais éviter de passer visuellement d'une feuille à l'autre.
Je me demandais donc comment je pourrais résoudre mon problème. Je pensais aux pistes suivantes, dont je n'ai pas encore trouvé de solution:
-activer une feuille en tâche de fond
-changer la propriété range.worksheet, ou trouver une solution qui remplace
Code:
set rg1= ws2.Range("A:A")
-arriver à récupérer l'adresse d'un objet range qui soit complète.
Si vous avez des idées, je suis preneur!
Merci par avance,
Haleakala