Problème avec une instruction VBA

Résolu
Signaler
Messages postés
28
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
8 février 2008
-
Messages postés
28
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
8 février 2008
-
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.
A voir également:

11 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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 !
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
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
Messages postés
28
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
8 février 2008

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.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
"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" ???
Messages postés
28
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
8 février 2008

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.
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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
Messages postés
28
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
8 février 2008

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.
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
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
Messages postés
28
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
8 février 2008

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.
Messages postés
28
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
8 février 2008

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.