Microsoft 365 Utilisation des plages en VBA

Sly le globe trotter

XLDnaute Occasionnel
Bonjour à tous,

Je me retrouve coincé sur l'utilisation de plages de cellules et ne parviens pas à déverminer le problème malgré mes recherches sur le net.

J'ai une fonction ayant en paramètres d'entrées, 2 "Worksheet".
VB:
Sub Traitement_DV(FResult As Worksheet, FAnalyse As Worksheet)

J'utilise ensuite dans la fonction mes variables FResult et FAnalyse pour effectuer mes traitements dont certains sur des cellules, par exemple
Code:
FAnalyse.Cells(6 + 10 * (CptRefCord - 1), 11) = ID_RefCord

En revanche, quand je cherche à travailler sur des plages, j'ai des soucis en fonction de la manière d’exécuter le code sur une ligne où je cherche à sélectionner une plage.
Code:
FAnalyse.Range("K" & i + 1 & ":M" & i + 5).Select

Si la feuille correspondant à FAnalyse est active, cela fonctionne sinon non...

Je me dis que cela pourrait venir de la manière de déclarer mes variables "feuilles" mais ne parviens pas à trouver la solution...
Pourriez-vous m'orientez vers la solution pour que le code puisse s’exécuter même si la feuille FAnalyse n'est pas active ?

Merci d'avance pour votre aide,
Sylvain
 
Solution
Bonjour.
Les Select sont généralement inutiles dans les macros. Ils ne sont là, dans les instruction engendrées par l'enregistreur de macro, que pour demeurer inutilement fidèle à l'état du classeur laissé par les actions effectuées pendant son enregistrement. Même si, à l'intention de l'utilisateur, je souhaite que la macro laisse une certaine plage sélectionnée, je préfère utiliser Application.GoTo. La méthode Select d'une expression Range désignant une plage n'appartenant pas à la feuille active ne peut jamais marcher. Mais on peut toujours affecter par un Set cette même expression à une variable locale déclarée As Range, qui peut ensuite s'utiliser directement mais avantageusement comme expression Range, tout comme Selection.

Dranreb

XLDnaute Barbatruc
Bonjour.
Les Select sont généralement inutiles dans les macros. Ils ne sont là, dans les instruction engendrées par l'enregistreur de macro, que pour demeurer inutilement fidèle à l'état du classeur laissé par les actions effectuées pendant son enregistrement. Même si, à l'intention de l'utilisateur, je souhaite que la macro laisse une certaine plage sélectionnée, je préfère utiliser Application.GoTo. La méthode Select d'une expression Range désignant une plage n'appartenant pas à la feuille active ne peut jamais marcher. Mais on peut toujours affecter par un Set cette même expression à une variable locale déclarée As Range, qui peut ensuite s'utiliser directement mais avantageusement comme expression Range, tout comme Selection.
 

Discussions similaires