Consolider des donnés à partir de 2 classeur, erreur d'execution 424

nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011 - 30 mars 2010 à 10:13
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011 - 7 avril 2010 à 14:49
Bonjour,

j'ai réaliser cette macro pour que les données du classeur principal soit reporté dans le classeurN1 mais cela me met erreur d'exécution 424 'objet requis'

Sub report()
'sauvegarde des donnés sous planning salarié
Dim vclasseurprincipal As Worksheets
Dim vclasseurN1 As Worksheets
Dim vchemin As String
vchemin = thisworbook.Path
Set vclasseurprincipal = Workbooks("contrats.xls").Worksheets("avenant")
Set vclasseurN1 = Workbooks("planningsalariés.xls").Worksheets("Feuil2")
vclasseurprincipal.Range("A2").Value = vclasseurN1.Range("B2").Value
End Sub

Svp trouvez moi le problème ... !!!!


nanie

30 réponses

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
30 mars 2010 à 10:43
Bonjour,

Et sur quelle ligne as-tu cette erreur. Ma boule de cristal étant en réparation je ne peux pas le deviner.


Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
30 mars 2010 à 10:54
C'était vchemin = thisworbook.Path qui coincé
j'ai changé en mettant le chemin et maintenant ca marche
Dim vclasseurprincipal As Worksheet
Dim vclasseurN1 As Worksheet
Dim vchemin As String
vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
Set vclasseurprincipal = Workbooks("contrats.xls").Worksheets("avenant")
Set vclasseurN1 = Workbooks("planning.xls").Worksheets("Feuil2")
vclasseurN1.Range("B2").Value = vclasseurprincipal.Range("A2").Value
vclasseurN1.Range("C2").Value = vclasseurprincipal.Range("B2").Value

Merci de votre aide

nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
30 mars 2010 à 11:00
Je m'en doutais un peu, essaie comme ceci

vchemin = thisworkbook.Path (il manquait le "k".
Evite aussi les chemins en dur, le jour où tu déplaces ton dossier, il faut aussi modifier le code.


Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
30 mars 2010 à 11:04
Par contre j'ai un autre problème je voudrais que dans le classeur principal il recopie toutes les lignes non vides et que toutes ces lignes se reportent dans le classeurN1. J'ai fait la macro suivante mais ca met erreur d'execution 1004, la méthode range de l'objet worksheet a échoué, sur la ligne que j'ai mis en violet

Dim vclasseurprincipal As Worksheet
Dim vclasseurN1 As Worksheet
Dim vchemin As String
Dim l As Integer, x As Integer


vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
Set vclasseurprincipal = Workbooks("contrats.xls").Worksheets("avenant")
Set vclasseurN1 = Workbooks("planning.xls").Worksheets("Feuil2")

vclasseurN1.Range("B2").Value = vclasseurprincipal.Range("A2").Value
vclasseurN1.Range("C2").Value = vclasseurprincipal.Range("B2").Value

l = 14
While Not IsEmpty(vclasseurprincipal.cells(l, 1))
l = l + 1
Wend

x = 2
While Not IsEmpty(vclasseurN1.cells(l, 1))
x = x + 1
Wend

vclasseurN1.Range(cells(x, 4)).Value = vclasseurprincipal.Range(cells(l, 1)).Value
vclasseurN1.Range(cells(x, 5)).Value = vclasseurprincipal.Range(cells(l, 2)).Value
vclasseurN1.Range(cells(x, 6)).Value = vclasseurprincipal.Range(cells(l, 4)).Value
vclasseurN1.Range(cells(x, 7)).Value = vclasseurprincipal.Range(cells(l, 5)).Value
vclasseurN1.Range(cells(x, 8)).Value = vclasseurprincipal.Range(cells(l, 6)).Value
vclasseurN1.Range(cells(x, 9)).Value = vclasseurprincipal.Range(cells(l, 7)).Value
vclasseurN1.Range(cells(x, 10)).Value = vclasseurprincipal.Range(cells(l, 8)).Value
vclasseurN1.Range(cells(x, 11)).Value = vclasseurprincipal.Range(cells(l, 9)).Value

Qui peur m'aider svp ?

nanie
0

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

Posez votre question
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
30 mars 2010 à 11:15
c'est vrai je vais avoir le problème si je laisse le chemin en dur
Avez vous une solution pour mon problème du dessus??
Merci pour votre réponse

nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
30 mars 2010 à 11:31
Essaie comme ceci:

vclasseurN1.Range(x, 4).Value = vclasseurprincipal.Range(l, 1).Value

C'est non testé, il peut donc y avoir des ajustements à faire.
Modifie seulement la 1ère ligne, quand elle marchera, tu pourras modifier les autres sur le même modèle.

Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
30 mars 2010 à 11:41
ca marche pas et c'est toujours la même erreur ...

nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
30 mars 2010 à 14:09
Tu as essayé ce que je t'ai dit sans faire d'essais comme je te l'avais dit. La méthode Range accepte un string, ce qui n'est pas le cas ici:

Essaye ceci:

vclasseurN1.cells(x, 4).Value = vclasseurprincipal.cells(l, 1).Value

Et je me répète: C'est non testé, il peut donc y avoir des ajustements à faire (peut être en supprimant le .Value).

Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
30 mars 2010 à 14:35
Je viens d'essayer ce que tu viens de me dire. que je mette le .value ou non, cela ne me met plus le message d'erreur. Mais autre problème, cela ne fait rien du tout....

Sub report()


'sauvegarde des donnés sous planning salarié
Dim vclasseurprincipal As Worksheet
Dim vclasseurN1 As Worksheet
Dim vchemin As String
Dim l As Integer, x As Integer

vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
Set vclasseurprincipal = Workbooks("contrats.xls").Worksheets("avenant")
Set vclasseurN1 = Workbooks("planning.xls").Worksheets("Feuil2")

l = 14

While Not IsEmpty(vclasseurprincipal.cells(l, 1))
l = l + 1
Wend

x = 2
While Not IsEmpty(vclasseurN1.cells(x, 1))
x = x + 1
Wend

vclasseurN1.cells(x, 4) = vclasseurprincipal.cells(l, 1)
vclasseurN1.cells(x, 5) = vclasseurprincipal.cells(l, 2)
vclasseurN1.cells(x, 6) = vclasseurprincipal.cells(l, 4)
vclasseurN1.cells(x, 7) = vclasseurprincipal.cells(l, 5)
vclasseurN1.cells(x, 8) = vclasseurprincipal.cells(l, 6)
vclasseurN1.cells(x, 9) = vclasseurprincipal.cells(l, 7)
vclasseurN1.cells(x, 10) = vclasseurprincipal.cells(l, 8)
vclasseurN1.cells(x, 11) = vclasseurprincipal.cells(l, 9)

End Sub

c'est chiant VBA quand ça ne marche pas
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
30 mars 2010 à 14:42
Effectivement, il y a un problème. Malheureusement je n'ai plus le temps de regarder cela de plus près ce soir.

Je te recontacte demain.
Désolé.

Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
30 mars 2010 à 14:48
Je pense que c'est dans mes boucles qu'il y a un problème

Merci pour ton aide

nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
31 mars 2010 à 08:58
Bonjour,

J'ai eu le temps de faire des essais avec la méthode suivante:
vclasseurN1.Cells(x, 4).Value = vclasseurprincipal.Cells(l, 1).Value

Comme je te l'ai dit, la méthode .Range attendant un String, ton code ne pouvait pas marcher.
Le problème est que le code ci-dessus fonctionne très bien chez moi.

Donne-moi les valeurs de l et de X au moment du plantage au cas où.

Accessoirement es-tu sous un OS 64 bits ou non, et quelle est ta version d'Office.

Enfin j'ai fait mes essais directement sous Excel, est-ce ton cas ?

Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
31 mars 2010 à 09:27
je fais mes test directement sur excel. En fait l et x ne font rien. je veux que ce qui est inscris dans le classeur principal se mette dans l'autre classeur. mais ca marche pas


nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
31 mars 2010 à 09:31
>> En fait l et x ne font rien

Elles ont forcément une valeur. Et comme tu l'utilises juste en amont, ton erreur pourrait venir de là.

Quelle est cette valeur ?


Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
31 mars 2010 à 09:36
Désolé je ne t'ai pas dit bonjour

x=2 et l=14
Quand j'écris ma macro ainsi :
Sub report()


'sauvegarde des donnés sous planning salarié
Dim vclasseurprincipal As Worksheet
Dim vclasseurN1 As Worksheet
Dim vchemin As String
Dim l As Integer, x As Integer


vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
Set vclasseurprincipal = Workbooks("contrats.xls").Worksheets("avenant")
Set vclasseurN1 = Workbooks("planning.xls").Worksheets("Feuil2")

x = 2
While Not IsEmpty(vclasseurN1.cells(x, 1))
x = x + 1
Wend
l = 14
While Not IsEmpty(vclasseurprincipal.cells(l, 1))


vclasseurN1.cells(x, 4) = vclasseurprincipal.cells(l, 1)
vclasseurN1.cells(x, 5) = vclasseurprincipal.cells(l, 2)
vclasseurN1.cells(x, 6) = vclasseurprincipal.cells(l, 4)
vclasseurN1.cells(x, 7) = vclasseurprincipal.cells(l, 5)
vclasseurN1.cells(x, 8) = vclasseurprincipal.cells(l, 6)
vclasseurN1.cells(x, 9) = vclasseurprincipal.cells(l, 7)
vclasseurN1.cells(x, 10) = vclasseurprincipal.cells(l, 8)
vclasseurN1.cells(x, 11) = vclasseurprincipal.cells(l, 9)


l = l + 1



Wend
End Sub

seule la première ligne du classeur principal s'inscris, ca ne continue pas. soit ca butte parce que ca ne va pas chercher un nouvelle ligne x, soit x=3 soit la l=16. Non ?



nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
31 mars 2010 à 10:03
Le code que tu montres fonctionne parfaitement chez moi, même si tu l'a changé (l'assignation des cellules est cette fois dans la boucle).

Vérifie que par exemple pour une ligne l donné, toutes les colonnes soient bien remplis. Une cellule vide est REMPLI avec une valeur que l'on ne voit pas (façon de parler), sa valeur sera bien copié mais tu ne la verras pas.

Regarde tout ça et si cela ne marche pas poste la totalité de ton code mais par pitié en utilisant le bouton de coloration syntaxique (3ème en partant de la droite).

Réponds aussi à mes autres questions restées sans réponse.


Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
31 mars 2010 à 10:24
c à quoi que je n'ai pas répondu ?
l=14
x=1
c'est quoi un OS 64bit ?
version excel 2007
j'ai vérifié aucune cellule vide dans mon tableau principal

j'ai fait les test et ca me copie seulement la dernière ligne pleine de mon tableau principal


nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
31 mars 2010 à 10:51
Désolé, je dois avoir des peaux de saucisson devant les yeux. En fait ta variable x ne variait pas et donc tu recopiais toutes les lignes l sur x.

Voici ton code qui fonctionne cette fois:

   x = 2
   While Not IsEmpty(vclasseurN1.Cells(x, 1))
      x = x + 1
   Wend
   l = 14
   While Not IsEmpty(vclasseurprincipal.Cells(l, 1))
      vclasseurN1.Cells(x, 4) = vclasseurprincipal.Cells(l, 1)
      vclasseurN1.Cells(x, 5) = vclasseurprincipal.Cells(l, 2)
      vclasseurN1.Cells(x, 6) = vclasseurprincipal.Cells(l, 4)
      vclasseurN1.Cells(x, 7) = vclasseurprincipal.Cells(l, 5)
      vclasseurN1.Cells(x, 8) = vclasseurprincipal.Cells(l, 6)
      vclasseurN1.Cells(x, 9) = vclasseurprincipal.Cells(l, 7)
      vclasseurN1.Cells(x, 10) = vclasseurprincipal.Cells(l, 8)
      vclasseurN1.Cells(x, 11) = vclasseurprincipal.Cells(l, 9)
      l = l + 1
      x = x + 1
   Wend


en gras et en rouge la ligne a ajouté.
Encore désolé pour ne pas avoir vu plus tôt ce qui clochait.
Un OS 64 bits est un OS qui gère + 4G0 de mémoire (la limite de Win 2000, XP, Vista et 7 en 32 bits).


Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
31 mars 2010 à 10:58
Merci !!!!!!!!!!!!!!!!!!!
C'est tout à fait ca il me semblait bien que le problème venait de x mais je ne voyais pas comment faire pour le résoudre! c'est super !!!
merci

si j'ai d'autres soucis je pourrais encore te déranger ?

nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
31 mars 2010 à 11:04
Tu postes dans le forum. Si je suis là et si je penses pouvoir y répondre je te ferais signe.


Calade
0
Rejoignez-nous