re-bonjour 
Gorfael, avant d'utiliser un style péremptoire...
Salut à tous
Citation:
Envoyé par Ormonth
Bonjour,
en vba pour sélectionner une plage dans une feuille, il faut impérativement que la feuille soit la feuille active... sinon Boum !
Petite erreur
essaies
Code :
Sub test()
Sheets("Feuil1").[A1:B8].Copy Sheets("Feuil2").[D5]
End SubCopiera la plage de A1 à B8 de la feuille "Feuil1" dans la feuille "Feuil2", à partir de la cellule D5, même si c'est une troisième feuille qui est active.
Analyse ce que tu cites et écris
...Mon propos repris in extenso dans ta citation parles bien de Sélection qui ne peut-être opérée que dans la feuille active
Hors le code que tu mets en avant n'opère pas de sélection et utilise l'argument de la méthode Copy ce qui reviens comme si bien explicité dans le lien fourni dans mon post précédent à :
Copy
Cette méthode utilise ou non l'argument Destination. Lorsque l'argument est omis, la méthode copie la plage dans le presse-papiers, sinon le collage à lieu dans le même temps. Sauf cas très particulier il faut toujours préciser l'argument Destination. Cet argument doit être soit un objet Range de la même dimension que la plage source, soit une cellule unique qui deviendra le coin supérieur gauche de la plage collée. Pour donner un
exemple, le code généré par l'enregistrement automatique serait :
Range("A1 :E5") .Select Selection.Copy Sheets("Feuil2").Select Range("C3").Select ActiveSheet.Paste
Ce qui revient à écrire :
Range("A1:E5") .Copy Destination :=Worksheets("Feuil2") .Range("C3")
Dernière instruction qui peut être encore condensée comme tu l'as faite pour la plus grande clarté / débutants.
de même si tu veux mettre dans la feuille 3 (active par défaut) le résultat de la concaténation d'une cellule de la feuille 1 et une de la 2, en vba tu auras par exemple :
ActiveCell.FormulaR1C1 = "=Feuil1!R[-8]C[1]&Feuil2!R[-11]C"
alors que si tu passes par le moteur de macro pour ce résultat, tu passes bien par des sélections "physiques" à la souris..
Bon en reprenant les bases pour être plus clair:
si sur ton classeur de 3 feuilles tu te mets en feuil1 et que tu lances :
1 2 3
| Sub vv()
Sheets("feuil1").Range("C19").Select
End Sub |
= OK
si tu te mets en Feuil3 et que tu lances la même chose :
BOUM !!
si tu te mets en Feuil3 et que tu lances :
1 2 3 4
| Sub vv2()
Sheets("feuil1").Select
Range("C19").Select
End Sub |
= OK, encore que... il aurait été plus correct d'écrire :
1 2 3 4
| Sub vv2()
Sheets("feuil1").Select
Range("C19").Activate
End Sub |
mais bon...
donc on n 'est pas ici pour polémiquer (même si Bricofire avait déjà eu ces mésaventures...), mais pour ne pas induire en erreur 
rajout : Arf, la hazard faisant bien les choses, voir démo plus explicite en fin de ce post 
http://www.developpez.net/forums/sho...00#post3403200
Bonne journée et sincères compliments pour le volume de tes interventions 
Didier
Partager