Excel VBA : selection d'une plage impossible
Résolu/Fermé
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
-
17 déc. 2011 à 13:07
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 - 18 déc. 2011 à 08:54
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 - 18 déc. 2011 à 08:54
A voir également:
- Excel VBA : selection d'une plage impossible
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
2 réponses
Syzygy
Messages postés
378
Date d'inscription
vendredi 29 avril 2011
Statut
Membre
Dernière intervention
31 décembre 2011
143
17 déc. 2011 à 14:13
17 déc. 2011 à 14:13
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,
17 déc. 2011 à 16:39
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
17 déc. 2011 à 18:33
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,
17 déc. 2011 à 19:21
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
17 déc. 2011 à 21:44
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,
18 déc. 2011 à 00:09
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