Erreur d'exécution '1004':Classe range échoue

[Résolu/Fermé]
Signaler
-
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
-
Bonjour,

je suis débutant dans la programmation d'Excel et je ne parviens pas à passer par dessus mon problème.

Voici la situation :
J'ai 2 fichiers différents -File1 et File2.
Dans File1 j'ai un bouton qui va exécuter une série de commande dans File2.

Pour bâtir le code du bouton, je me suis servi d'un enregistrement d'une macro.
Cette macro fonctionne très bien lorsqu'elle est lancé à partir de File2. Mais lorsque je l'exécute à parti de mon bouton dans File1 cela ne marche plus et j'obtient cette erreur :
Erreur d'exécution '1004' :
La méthode Select de la classe Range a échoué.

Voici mon code :

Private Sub maj_Click()

Workbooks.Open Filename:= _
"P:\File1.xls"

If Range("M1") = "1" Then

Else

Rows("1:10000").Select
Selection.UnMerge

Range("M1").Select
ActiveCell.FormulaR1C1 = "1"
Range("C2:C10000").Select
Selection.Copy
Range("M2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("C2").Select
ActiveCell.FormulaR1C1 = "=IF(R1C13=1,CONCATENATE(""L"",RC[10]),RC[10])"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C10000"), Type:=xlFillDefault
Range("A1").Select

End If

Windows("File2.xls").Activate
...
etc.. le reste est correct.


Le programme arrête au premier "Rows("1:10000").Select"
J'ai ensuite essayé de mettre cette partie en commentaire mais l'erreur survient ensuite pour le prochain "Range" et ainsi de suite.



Avez vous une idée ?
Merci énormément !

p.s. le fichier "File2" sera fréquemment effacer et updaté par une nouvelle version. C'est une sorte de petite base de donnée mis à jour manuellement.
A voir également:

3 réponses

Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
620
Bonjour,

Ton code est associé au bouton qui se trouve dans la feuille donc le problème vient certainement de là (c'est le même problème que si la macro était associée à une feuille).

Donc je te propose la solution suivante :

Tu déporte tout ton traitement dans un module de macro (dans VBA en faisant menu Insertion/module).
Tu appelle ta macro par exemple "Traitement".
Dans ton nouveau module tu as donc une macro qui ressemble à ça :

Sub Traitement()
Workbooks.Open Filename:= _ 
"P:\File1.xls" 
If Range("M1") = "1" Then 
...
Else 
...
Rows("1:10000").Select 
Selection.UnMerge 
...
End Sub



Dans le code de ton bouton tu fais juste appel à cette macro. Ton code bouton ressemble donc à ça :

Private Sub maj_Click() 
Call Traitement
End Sub


Voila ça doit marcher ...

A+
5
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Salut Pilas31,

Tu viens de faire ma journée, ma semaine et tu viens également de me réconcilier avec la programmation dans Excel ! T'as solution fonctionne à merveille et cela vient de régler mon problème !

Ce n'est pas évident d'apprendre cela tout seul et je te remercie de ton aide. C'est grandement apprécié.
Je vais essayer d'aider à mon tour quelqu'un de la communauté !

Merci encore et bonne semaine !
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
620 > Brainster
Merci et bienvenu parmi les helpeurs si tu fais ce choix (tu peux t'inscrire)

Je passe le sujet à résolu.

Bonne continuation.
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
620
Bonjour,

A priori, deux petites idées :

1/ Est-ce que la macro est bien une macro dans un module et non pas une macro d'une feuille ?
2/ il manque (peut-être) la selection d'une feuille dans File1 avant la selection Rows("1:10000") il faut peut-être mettre par exemple sheets("Feuil1").select

A+
Salut pilas31 !

merci de t'être penché sur mon problème. Voici quelques infos supplémentaires suite à tes pistes d'idées.

1 - La macro est disimulé dans un bouton qui se situe sur une feuille. Le code est directement sur le bouton lors que l'usager clic dessus. Donc la macro n'est pas un module unique et ce n'est pas non plus

2 - Suite à mes problèmes, j'ai ensuite essayé plusieurs solutions de ce type. J'ai fait des combinaisons de ce type juste avant la sélection Rows("1:10000") :
Sheet("sheet1").Activate
Sheet("sheet1").select
J'ai les ai essayé seul, ensemble et inversé mais sans aucun résultat (des tests essaie-erreur sans connaître la raison du pourquoi...)

... Après avoir lu plusieurs problème similaire, je voyais que plusieurs réussisais à s'en sortir ainsi. Mais dans mon cas, ce fut en vain.

:-/
C'est pas la gloire... !