Excel VBA : selection d'une plage impossible
Résolu
mic13710
Messages postés
1087
Date d'inscription
Statut
Membre
Dernière intervention
-
mic13710 Messages postés 1087 Date d'inscription Statut Membre Dernière intervention -
mic13710 Messages postés 1087 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis en train de me battre avec un truc incompréhensible : je cherche à copier les valeurs d'une plage vers une autre, mais ma macro plante avec une erreur d'exécution 1004, que ce soit sur Excel 2003 ou 2010.
J'ai écrit le code suivant afin de localiser le problème, et je suis tombé sur un truc bizarre : je peux sélectionner les cellules variables de début et de fin, je peux sélectionner la plage entière à partir des cellules définies (ici G4 et R159 correspondants aux cellules variables), mais impossible de sélectionner la même plage avec les cellules variables !
Voici mon code :
Bien entendu la variable ColDAT est définie As Long.....
Je n'y comprends rien.
Quelqu'un aurait-il une suggestion ?
Merci pour votre aide.
Je suis en train de me battre avec un truc incompréhensible : je cherche à copier les valeurs d'une plage vers une autre, mais ma macro plante avec une erreur d'exécution 1004, que ce soit sur Excel 2003 ou 2010.
J'ai écrit le code suivant afin de localiser le problème, et je suis tombé sur un truc bizarre : je peux sélectionner les cellules variables de début et de fin, je peux sélectionner la plage entière à partir des cellules définies (ici G4 et R159 correspondants aux cellules variables), mais impossible de sélectionner la même plage avec les cellules variables !
Voici mon code :
Sheets("Blabla").Select ActiveSheet.Cells(4, ColDAT).Select 'Fonctionne ActiveSheet.Cells(159, ColDAT + 11).Select 'Fonctionne ActiveSheet.Range("G4:R159").Select 'Fonctionne (c'est la même plage que la suivante) ActiveSheet.Range(Cells(4, ColDAT), Cells(159, ColDAT + 11)).Select 'Plante !
Bien entendu la variable ColDAT est définie As Long.....
Je n'y comprends rien.
Quelqu'un aurait-il une suggestion ?
Merci pour votre aide.
A voir également:
- Excel VBA : selection d'une plage impossible
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
2 réponses
Bonjour,
Je viens de tester votre code et la ligne utilisée fonctionne parfaitement dans mon fichier essai.
Une piste éventuelle, assurez-vous que le variable ColDAT (que j'aurai plutôt définit en Integer au passage), n'est pas null, est un nombre entier et n'est pas inférieure ou égale 0.
Sinon n'hésitez pas à mettre votre fichier (sans donnée confidentielle) sur https://www.cjoint.com/ et à nous transmettre le lien pour que nous puissions vous aider davantage.
Bonne après-midi,
Je viens de tester votre code et la ligne utilisée fonctionne parfaitement dans mon fichier essai.
Une piste éventuelle, assurez-vous que le variable ColDAT (que j'aurai plutôt définit en Integer au passage), n'est pas null, est un nombre entier et n'est pas inférieure ou égale 0.
Sinon n'hésitez pas à mettre votre fichier (sans donnée confidentielle) sur https://www.cjoint.com/ et à nous transmettre le lien pour que nous puissions vous aider davantage.
Bonne après-midi,
ColDAT est positif, non nul. Sinon, les deux premières lignes du code ne fonctionneraient pas.
Bonne remarque concernant la définition de la variable en Integer (j'étais un peu généreux avec mon Long), mais ça ne change rien à mon problème.
J'ai essayé ce code sur une autre feuille de mon classeur : ça plante.
J'ai utilisé un autre nom pour la variable ColDAT (on ne sait jamais) : ça plante pareil.
Puis comme vous j'ai essayé le code sur un autre classeur, et là, ça fonctionne.
C'est à n'y rien comprendre.
Au moins, je sais maintenant que ça vient de mon fichier. Mais où ? Mystère.
Je ne peux pas suspecter une saturation du presse papier puisque la sélection de la même plage avec les références fixes se fait sans problème.
J'ai pas mal de plages nommées dans ce fichier. Y'a t'il une limitation sur le nombre de plages que peut traiter Excel ? Je pense que non, mais sait-on jamais, et en tout cas pourquoi celle-là et pas les autres ?
Je vais continuer mes investigations.
Merci encore.
Michel
Sans votre classeur, difficile de vous aider plus, j'espère que vos recherches ont été fructueuse.
Sinon pour répondre à vos questions, je ne pense pas que les plages nommées aient une influence quelconque sur l'exécution de votre code.
Si vraiment vous ne trouvez pas de solution, essayez de vous passer de cette procédure. Avez-vous essayé de nommer la plage que vous souhaitez sélectionner de façon dynamique en utilisant la fonction DECALER() ?
Personnellement, je nomme la plupart de mes plages de données non fixes à l'aide de cette fonction, ce qui rend sa sélection plus facile en VBA.
Bonne soirée,
Pour tout dire et sans rentrer dans les détails, c'est justement pour me débarrasser des fonctions décaler d'Excel actuellement en place que je cherche à copier les valeurs d'une plage vers une autre. Les fonctions, décaler ou autres, sont incompatibles avec ce que je souhaite faire par la suite.
Rassurez-vous, je maitrise assez bien vba et j'ai dans mes codes une foultitude de offset sur des ranges définis pour justement éviter d'avoir à nommer des plages et surtout parce que ces plages sont variables.
En fait, j'ai trouvé d'où venait l'erreur : en déplaçant le code de la feuille vers un module, la sélection de la plage variable se fait correctement. J'aurais pu y penser plus tôt.
Je suppose que la variable étant déclarée sur la feuille, elle n'est pas exportable vers une autre feuille pour aller y chercher une plage. Ce qui est surprenant c'est que la sélection d'une cellule était tout de même possible.
Enfin, l'essentiel c'est que ça marche.
Merci encore pour votre aide.
Michel
Ravi que votre problème soit résolu. Il est toutefois possible de résoudre le problème autrement :
Comme vous l'avez remarqué, l'endroit où était stocké la procédure avait son importance. Le problème ne vient pas de la variable (si vous la remplacez par une constante écrite "en dur", le problème persiste). Le problème venait plutôt de la fonction comme le suggère Sylvau.
La commande suivante, (exécutée depuis la feuille "Feuil2")
Sheets("Blabla").Select
ActiveSheet.Range(Cells(4, ColDAT), Cells(159, ColDAT + 11)).Select
demande à Excel de sélectionner une plage située dans la feuille "Blabla" (ActiveSheet.Range) mais qui contient des cellules stockées dans la feuille depuis laquelle est exécutée le code (Cells(4, ColDAT),Cells(159, ColDAT + 11).
En effet si vous ne lui indiquez pas le contraire explicitement, Excel interprétera que la fonction Cells(4,ColDAT), renvoie une cellule contenue dans "Feuil2".
Et vous l'aurez compris, il est impossible de sélectionner une plage dans une feuille qui contient des cellules d'une autre feuille.
Pour résoudre le problème il fallait légèrement changer votre code en :
Sheets("Blabla").Select
ActiveSheet.Range(ActiveSheet.Cells(4, ColDat), ActiveSheet.Cells(159, ColDat + 11)).Select
Le code s'exécute ainsi normalement, ActiveSheet.Cells(4, ColDAT) renvoyant une cellule contenue dans la feuille active, c'est à dire "Blabla"
(Pour éviter la resaisie du ActiveSheet, vous pouvez bien entendu utiliser un With ActiveSheet -End With)
Bonne soirée,
Je pense effectivement que vous avez raison. Un activesheet devant mes cells aurait résolu le problème.
Mais le module fonctionne tout aussi bien,donc j'en suis resté à cette solution.
Par contre j'ai voulu copier les valeurs d'une plage à l'autre avec les codes suivants :
mais ça bloque.
Sans doute est-ce un problème similaire.
J'ai été contraint de passer par des Select et PasteSpecial (xlPasteValues)
C'est pas très propre, mais ça à le mérite de fonctionner.
Je tenterai d'améliorer ça plus tard.
Bonne soirée,
Michel