Bonjour à toutes et à tous,
ma question porte sur la nécessité ou pas d'utiliser la méthode Activate.
Je lis à longueur de forum qu'il vaut mieux s'en passer (et plus encore de Select), autant que possible. Je soigne cette maladie de jeunesse, contractée au contact de l'enregistreur de macros …
J'arrive à coder "en direct" mais bute à présent sur un os qui introduit le doute dans mon esprit.
De manière à pouvoir mieux contrôler ce que fait mon code, j'ai saucissonné une appli en plusieurs Sub(), que je chaîne au final par des call() et ainsi, je dévermine chaque Sub() et peux donc me concentrer là où ça coince.
Pour tester chaque sub(), je me positionne sur la feuille en question et regarde si le code fait ce que je lui demande de faire. Etant sur la feuille qui va bien, tout fonctionne. Mais quand je lance l'enchainement, j'ai quelques surprises …
1) Tri de liste
Mon code pour trier une liste semble ne pas avoir besoin que je sois sur la feuille active
Je suis sur la feuille A et mon code n'utilise pas de sheets("B").activate … mais quelque chose comme
dim last as long
last=sheets("B").range("Z" & rows.count).end(xlup).row
msgbox "La dernière ligne de la liste en feuille B est " & last
puis mon code de tri …
le msgbox renvoie bel et bien la bonne valeur, donc je n'ai pas eu à activer la feuille B ….
2) Recherche de max() et min()
idem, même si je suis sur feuille "A", j'arrive à déterminer le max() et le min() d'une liste située en feuille "B"
Pour cela, je détermine une plage avec set MaPlage= sheets("B").range("Z" & rows.count).end(xlup).row
puis DateMax=worksheetfunction.Max(MaPlage)
3) Echec quand il faut "écrire" en feuille B
Si comme précisé plus haut je suis en feuille active "A", les instruction suivantes écrivent en feuille "A" et non "B"
with sheets("B")
for i=2 to dernlign
cells(i,31)="OK"
next i
end with
En fait, quand je contrôle au compte-gouttes, c’est-à-dire chaque routine, je me positionne en feuille "B", donc ça marche mais quand je lance l'enchainement via les call(), ça écrit "OK" en colonne 31 de la feuille "A" malgré le with sheets("B")
donc en conclusion, doit-on Activate la feuille quand on écrit dedans ? (et donc se passer de cette méthode tant qu'on ne fait que lire des données dans une feuille non active) ?
J'avance de façon empirique et ne trouve pas chez Microsoft ou autre de doctrine en la matière (mais peut-être n'ai-je pas les bonne sources d'info !)
Merci d'avance pour votre aide
ma question porte sur la nécessité ou pas d'utiliser la méthode Activate.
Je lis à longueur de forum qu'il vaut mieux s'en passer (et plus encore de Select), autant que possible. Je soigne cette maladie de jeunesse, contractée au contact de l'enregistreur de macros …
J'arrive à coder "en direct" mais bute à présent sur un os qui introduit le doute dans mon esprit.
De manière à pouvoir mieux contrôler ce que fait mon code, j'ai saucissonné une appli en plusieurs Sub(), que je chaîne au final par des call() et ainsi, je dévermine chaque Sub() et peux donc me concentrer là où ça coince.
Pour tester chaque sub(), je me positionne sur la feuille en question et regarde si le code fait ce que je lui demande de faire. Etant sur la feuille qui va bien, tout fonctionne. Mais quand je lance l'enchainement, j'ai quelques surprises …
1) Tri de liste
Mon code pour trier une liste semble ne pas avoir besoin que je sois sur la feuille active
Je suis sur la feuille A et mon code n'utilise pas de sheets("B").activate … mais quelque chose comme
dim last as long
last=sheets("B").range("Z" & rows.count).end(xlup).row
msgbox "La dernière ligne de la liste en feuille B est " & last
puis mon code de tri …
le msgbox renvoie bel et bien la bonne valeur, donc je n'ai pas eu à activer la feuille B ….
2) Recherche de max() et min()
idem, même si je suis sur feuille "A", j'arrive à déterminer le max() et le min() d'une liste située en feuille "B"
Pour cela, je détermine une plage avec set MaPlage= sheets("B").range("Z" & rows.count).end(xlup).row
puis DateMax=worksheetfunction.Max(MaPlage)
3) Echec quand il faut "écrire" en feuille B
Si comme précisé plus haut je suis en feuille active "A", les instruction suivantes écrivent en feuille "A" et non "B"
with sheets("B")
for i=2 to dernlign
cells(i,31)="OK"
next i
end with
En fait, quand je contrôle au compte-gouttes, c’est-à-dire chaque routine, je me positionne en feuille "B", donc ça marche mais quand je lance l'enchainement via les call(), ça écrit "OK" en colonne 31 de la feuille "A" malgré le with sheets("B")
donc en conclusion, doit-on Activate la feuille quand on écrit dedans ? (et donc se passer de cette méthode tant qu'on ne fait que lire des données dans une feuille non active) ?
J'avance de façon empirique et ne trouve pas chez Microsoft ou autre de doctrine en la matière (mais peut-être n'ai-je pas les bonne sources d'info !)
Merci d'avance pour votre aide