Problème avec une instruction VBA

Résolu
Jpeg69 Messages postés 28 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 8 février 2008 - 22 mai 2007 à 11:04
Jpeg69 Messages postés 28 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 8 février 2008 - 24 mai 2007 à 17:34
Bonjour,
Selon l'aide d'Excel, pour utiliser une plage de cellule avec l'instruction Cells, il faut utiliser l'instruction Range.

Exemple :

Range( Cells(1,1), Cells(2,2) )

Cependant, ma macro n'accepte pas : Range( Cells(1,1), Cells(2,2) ).Select ou Range( Cells(1,1), Cells(2,2) ).ClearContents

Je me demande alors où est le problème.

Merci d'avance.

11 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
22 mai 2007 à 12:12
Salut,
Tu es sûr que c'est la car je viens de testé sur Excel 2000 et ca semble fonctionner. (si toutefois ton fichier possède une feuille nommée Feuil1

Tyu peux essayer ceci.

Index = 2
Worksheets("Feuil1").Range("G" & CStr(Index * 6), "J" & CStr(Index * 6)).ClearContents
, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 mai 2007 à 11:15
Bonjour,

Réflexe élémentaire :
sers-toi de ton enregistreur de macro ==>> fais une sélection quelconque ===>> ferme ===> édikte la macro ===>> tu sauras ainsi comment écrit la chose Monsieur VBA !
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
22 mai 2007 à 11:23
Et répondre en même temps à la question : ton code est situé dans la même feuille que les cellules ou le range que tu tentes d'appeler ? Sinon, pour bien faire les choses, précise la feuille avec, quelque chose du style :

Worksheets("Feuille1").Range( Worksheets("Feuille1").Cells(1,1), Worksheets("Feuille1").Cells(2,2) ).ClearContents

Et sinon, comme d'hab. Message d'erreur ? A quel endroit de ton code ? etc etc ...

jmfmarques : Je ne suis pas sûr que l'éditeur de Macro fonctionne dans ce cas, parce que, comme on sélectionne la plage directement, il va donner la plage sous une forme simple genre Range("A1:B10"); la syntaxe avec des Cells imbriqués n'est utilisée qu'en pur VBA il me semble.

Molenn
0
Jpeg69 Messages postés 28 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 8 février 2008
22 mai 2007 à 11:23
Le problème c'est que j'utilise des variable pour connaître le numéro de ligne et de colonne.
L'instruction Range ne prend pas des variable, mais l'instruction Cells oui.

Range( Cells(x,y) ).Clear fonctionne à merveille.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 mai 2007 à 11:28
"jmfmarques : Je ne suis pas sûr que l'éditeur de Macro fonctionne dans ce cas, parce que, comme on sélectionne la plage directement, il va donner la plage sous une forme simple genre Range("A1:B10"); la syntaxe avec des Cells imbriqués n'est utilisée qu'en pur VBA il me semble."

Et à moi il me semble que tu devais être absent, le jour d'une certaine distibution !!!
1) la macro de Monsieur VBA est écrite en VBA !
2) tu ne vois vraiment pas comment substituer le contenu de variables à "A1:B10" ???
0
Jpeg69 Messages postés 28 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 8 février 2008
22 mai 2007 à 11:36
Bonne idée (bien que lourde) Molenn ! Mais ça ne marche toujours pas.

Erreur d'exécution '9' : L'indice n'appartient pas à la sélection.

Mes variables dépendent d'un indice calculé avant en fonction de l'action choisie.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
22 mai 2007 à 11:43
Salut,
Quand allez vous comprendre que pour obtenir une aide précise, il faut que l'on ai le plus de billes possible....

C'est déjà bien d'avoir donné l'erreur mais tu pourrais donner le code qui te donne cette erreur et les valeur des variables à l'instant de cette erreur

@+: Ju£i?n
Pensez: Réponse acceptée
0
Jpeg69 Messages postés 28 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 8 février 2008
22 mai 2007 à 12:01
Exemple :

Index = 2

Worksheets("Feuil1").Range( Cells( Index * 6, 7 ), Cells( Index * 6, 10 ) ).ClearContents

Lorsque la macro plante, c'est cette ligne qui est surligné en jaune.

Voila, j'espère avoir été assez clair cette fois.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
22 mai 2007 à 15:15
615490
jmfmarques
: Je me suis mal exprimé. Quand je disais "pur VBA", je voulais dire qu'en allant directement dans l'Editeur taper avec ses petits doigts boudinés les quelques lignes de code aptes à faire notre bonheur. Bien sûr que l'éditeur de macro va fonctionner pour obtenir ce qu'il veut, par contre, jamais au grand jamais il n'écrira la définition d'une cellule avec cette syntaxe (ou alors effectivement, j'étais absent le jour de la distribution)
Pour la simple et bonne raison qu'avec l'éditeur de macro, on ne peut pas écrire de boucle pour défiler toute les cellules d'une plage.
Je vois très bien comment substituer les coordonnées d'une plage par les références de cellules, mais, et c'est ça qui est bien avec le VBA, tu peux remplacer des bouts de code par leur équivalent et relancer la macro aussitôt, et quand même parfois te retrouver avec des erreurs d'exécution '9' bien connue. Après, tout dépend du code et là, il nous manque plein de choses pour comprendre.

=1001945 Jpeg69 : Ton exemple
Index = 2
Worksheets("Feuil1").Range( Cells( Index * 6, 7 ), Cells( Index * 6, 10 ) ).ClearContents

Il manque des choses. De mémoire, il me semble avoir déjà eu ce problème, si ta variable Index est de type String, ça plante, il faut un Integer pour que cela fonctionne, donc soit modifier le type de ta variable, soit l'encadrer d'un Cint( ).
Autrement, ce code fonctionne très bien sous EXCEL 2003 à condition bien entendu que le code soit attaché à "Feuil1". Si ce code se trouve par exemple dans "Feuil2" et que tu veuilles supprimer des cellules dans "Feuil1", c'est insuffisant, il faudrait :
Worksheets("Feuil1").Range( Worksheets("Feuil1").Cells( Index * 6, 7 ), Worksheets("Feuil1").Cells( Index * 6, 10 ) ).ClearContents

Molenn
0
Jpeg69 Messages postés 28 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 8 février 2008
22 mai 2007 à 19:22
Intéressant ton code [auteurdetail.aspx?ID=89254 jrivet], je le testerai.

Je te rassure [auteurdetail.aspx?ID=528680 Molenn], ma variable est bien déclarée en tant que Integer et la macro s'exécute au bon endroit.
0
Jpeg69 Messages postés 28 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 8 février 2008
24 mai 2007 à 17:34
Ton code marche à la perfection  89254 jrivet !! Merci !

Réctification  =528680 Molenn , ma macro exécutait ce code en allant chercher ces cellules dans une autre feuille.
Si c'est ce que tu entend par " exécuter au bon endroit " , effectivement j'avais tous faux.
0
Rejoignez-nous