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

nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
6 avril 2010 à 12:05
J'ai encore un petit problème peux-tu m'aider stp ?

En fait je voudrais que lorsque je clique sur un truc ca m'imorte les données que j'ai déjà exporté une première fois. Ensuite je modifie ce que j'ai à modifier et je réexporte.
Pb lors de l'importation, en effet cela me réimporte tout et nom les données concernant juste ce salarié.
Voici ce que j'ai fait.

Dim vclasseurprincipal As Worksheet
Dim vclasseurN1 As Worksheet
Dim vchemin As String
Dim i 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 UCase(vclasseurN1.cells(x, 1) & vclasseurN1.cells(x, 2)) = nom
x = x + 1

i = 14

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

vclasseurprincipal.cells(i, 1).Value = vclasseurN1.cells(x, 3).Value
vclasseurprincipal.cells(i, 2).Value = vclasseurN1.cells(x, 4).Value
vclasseurprincipal.cells(i, 3).Value = vclasseurN1.cells(x, 5).Value

x = x + 1

Wend

Wend

il doit y avoir un problème au niveau de la première boucle, ca ne s'arrete pas lorsque le nom est différent de ce que j'ai tapper. Oh fait j'ai pas de message d'erreur qui apparait.
j'espère que tu sera encore là pour m'aider Calade !!!
nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
6 avril 2010 à 14:11
Bonjour,

Je vois plusieurs problèmes à ton code.

1) Tu ne rentres dans ta boucle principale que si Cells(x,1) & Cells(x, 2) = nom, sinon tu sorst directement du code que tu me montres.

2) En admettant que tu rentres dans la boucle tu incréments d'office x de 1, puis tant que Cells(i, 1) n'est pas vide tu importes tes données mais dans le i suivant puisque tu viens de l'incrémenter à la ligne précédente.

En fait vérifie que tu incrémentes bien x et i au bon endroit. Passe par l'exécution pas à pas en vérifiant à chaque fois les valeurs de chacunes de tes variables, cela t'aidera.

Enfin, prends l'habitude d'indenter ton code aussi petit soit-il, tu verras beaucoup mieux ce qui se passe.

Ci-dessous la version indentée de ton code:

   Dim vclasseurprincipal As Worksheet
   Dim vclasseurN1 As Worksheet
   Dim vchemin As String
   Dim i 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 UCase(vclasseurN1.Cells(x, 1) & vclasseurN1.Cells(x, 2)) = nom
      x = x + 1
      
      i = 14
      
      While Not IsEmpty(vclasseurprincipal.Cells(i, 1))
         i = i + 1
   
         vclasseurprincipal.Cells(i, 1).Value = vclasseurN1.Cells(x, 3).Value
         vclasseurprincipal.Cells(i, 2).Value = vclasseurN1.Cells(x, 4).Value
         vclasseurprincipal.Cells(i, 3).Value = vclasseurN1.Cells(x, 5).Value
   
         x = x + 1
      
      Wend
   
   Wend



Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
6 avril 2010 à 15:09
je ne comprends pas la macro
je n'ai rien modifier et maintenant ca ne va plus rien chercher
qu'est qui se passe ?

nanie
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
7 avril 2010 à 10:21
Bonjour

je n'arrives pas à comprendre ce que la macro fait. Moi ce que je veux c'est que quand la macro voit le même nom dans les 2 fichiers elle me relève les info du classeurN1 et les mets dans le classeur principal.
J'ai essayé l'exécution pas à pas mais je n'y arrives pas. As tu une solution ?

Sub toto()


Dim vclasseurprincipal As Worksheet
  Dim vclasseurN1 As Worksheet
  Dim vchemin As String
  Dim i As Integer, x As Integer
  Dim nom As String
 
  vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
   Set vclasseurprincipal = Workbooks("contrats.xls").Worksheets("avenant")
    nom = UCase(vclasseurprincipal.cells(2, 1) & " " & vclasseurprincipal.cells(2, 2))
   Set vclasseurN1 = Workbooks("planning.xls").Worksheets("Feuil2")

 x = 2
 While UCase(vclasseurN1.cells(x, 1) & " " & vclasseurN1.cells(x, 2)) = nom

      i = 14
      While Not IsEmpty(vclasseurprincipal.cells(i, 1))
      i = i + 1
      vclasseurprincipal.cells(i, 1).Value = vclasseurN1.cells(x, 3).Value
      vclasseurprincipal.cells(i, 2).Value = vclasseurN1.cells(x, 4).Value
      vclasseurprincipal.cells(i, 3).Value = vclasseurN1.cells(x, 5).Value
     
   x = x + 1
    Wend
 Wend
End Sub


nanie
0

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

Posez votre question
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
7 avril 2010 à 11:21
Bonjour,

je n'arrives pas à comprendre ce que la macro fait.

D'où vient cette macro ? Si tu l'as écrite tu devrais comprendre ce qu'elle fait, sinon ce n'est pas en faisant bêtement du copier-coller que tu y arriveras.

Dans le code ci-dessous:

A l'entrée de la boucle 1, vérifie que la condition
UCase(vclasseurN1.Cells(x, 1) & " " & vclasseurN1.Cells(x, 2)) = nom
est bien vérifiée au besoin en mettant un point d'arrêt sur cette ligne. puis avance pas à pas.

Si elle rentre dans la boucle 1, vérifie de la même façon son entrée dans la boucle 2.

Contente-toi déjà de la bonne recopie des infos pour le 1er salarié. Ensuite, mais ensuite seulement vérifie qu'il rentre bien une 2ème fois dans la boucle 1 et ce pour un autre salarié.

Dim vclasseurprincipal As Worksheet
Dim vclasseurN1 As Worksheet
Dim vchemin As String
Dim i As Integer, x As Integer
Dim nom As String

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

x = 2
While UCase(vclasseurN1.Cells(x, 1) & " " & vclasseurN1.Cells(x, 2)) = nom ' Boucle 1

i = 14
While Not IsEmpty(vclasseurprincipal.Cells(i, 1)) And _
UCase(vclasseurN1.Cells(x, 1) & " " & vclasseurN1.Cells(x, 2)) = nom 'Boucle 2
i = i + 1
vclasseurprincipal.Cells(i, 1).Value = vclasseurN1.Cells(x, 3).Value
vclasseurprincipal.Cells(i, 2).Value = vclasseurN1.Cells(x, 4).Value
vclasseurprincipal.Cells(i, 3).Value = vclasseurN1.Cells(x, 5).Value

x = x + 1
Wend
nom = UCase(vclasseurprincipal.Cells(x, 1) & " " & vclasseurprincipal.Cells(x, 2))
Wend

Attention, je n'ai pas testé le code, j'ai simplement ajouté ou modifié les lignes en bleu.

Calade
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011
7 avril 2010 à 11:53
c'est moi qui l'ai écrite, j'ai repris ce que j'avais fait pour l'exportation de mes données et me suis dit qu'en copiant et en modifiant certaines choses cela marcherai mais non.
Qu'est ce que ca veut dire quand la ligne "UCase(vclasseurN1.Cells(x, 1) & " " & vclasseurN1.Cells(x, 2)) = nom" est jaune lors de l'exécution de la macro avec point d'arrêt?


nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
7 avril 2010 à 12:03
La couleur, est en principe défini par toi (je ne connais pas les couleurs par défaut).

Un point d'arrêt signifie que lors de l'exécution, le programme va s'arrêter AVANT d'exécuter la ligne en question. A ce moment, tu peux voir la valeur de toutes tes variables (dans la fenêtre de code, Menu Affichage/Fenêtre d'exécution et/ou Fenêtres Variables locales) et avec cette dernière et - dans une certaine mesure - tu peux modifier la valeur des variables pour voir ce que cela donne, attention dans ce cas cette valeur n'est évidemment pas modifié dans le code mais uniquement pour l'exécution en cours.


Calade
0
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:05
rien ne s'affiche dans la fenêtre d'execution quand je place le curseur après i=i+1. J'ai essayé toutes les lignes après et rien ne s'y affiche. cela signifie donc qu'il y a un problème avec la seconde boucle ?
 Dim vclasseurprincipal As Worksheet
  Dim vclasseurN1 As Worksheet
  Dim vchemin As String
  Dim i As Integer, x As Integer
  Dim nom As String
 
  vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
   Set vclasseurprincipal = Workbooks("contrats.xls").Worksheets("avenant")
    nom = UCase(vclasseurprincipal.cells(2, 1) & " " & vclasseurprincipal.cells(2, 2))
   Set vclasseurN1 = Workbooks("planning.xls").Worksheets("Feuil2")

 x = 2
 While UCase(vclasseurN1.cells(x, 1) & " " & vclasseurN1.cells(x, 2)) = nom

      i = 14
      While Not IsEmpty(vclasseurprincipal.cells(i, 1))
      
      i = i + 1
      vclasseurprincipal.cells(i, 1).Value = vclasseurN1.cells(x, 3).Value
      vclasseurprincipal.cells(i, 2).Value = vclasseurN1.cells(x, 4).Value
      vclasseurprincipal.cells(i, 3).Value = vclasseurN1.cells(x, 5).Value
     
   x = x + 1
    Wend
 Wend

End Sub


nanie
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
7 avril 2010 à 14:28
Je ne suis pas sur que tu es bien lu mon dernier post.

J'y avais mis une version légèrement modifié de ton code. Il faudrait peut-être essayé celui-ci avant d'appeler au secours.


Calade
0
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
Ah je crois que je t'ai saoulé avec toutes mes questions ! désolé
je l'ai testé mais comme ca ne faisait rien je n'ai pas continué avec, je suis revenu à l'ancien.
Alors avec ta macro, quand je fais pas à pas détaillé (toute la macro est lancée), ca ne trouve aucune valeur pour toutes les "expressions" que j'ai défini au départ.
Par contre quand je met le curseur sur i=14 et que je demande d'exécuter jusqu'au curseur, la ca trouve les données. pareil que tout à l'heure si je descend le curseur ca ne fait rien, page blanche pour les variables locales


nanie
0
Rejoignez-nous