XL 2010 [Résolu] Erreur 1004 dans macro

Adc

XLDnaute Nouveau
Bonjour à tous,

J'ai une erreur 1004 dans l'extrait de code ci-dessous et je n'arrive pas à régler le problème (j'ai mis XXX devant la ligne qui n'a pas envie)

Le contexte : depuis un classeur "Stock" la macro va ouvrir un classeur de demandes et doit copier des données du classeur de demandes vers le classeur "Stock"

VB:
        For Boucle = 6 To Nb_lignes_commande
                       
            If ActiveWorkbook.Sheets("Commande").Range("E" & Boucle) <> "" Then
                                  
                Dim Date_comm As Date
                Date_comm = ActiveWorkbook.Sheets("Commande").Range("B1")
                Dim Service As String
                Service = ActiveWorkbook.Sheets("Commande").Range("B2")
                Catégorie = ActiveWorkbook.Sheets("Commande").Range("A" & Boucle)
                Désignation = ActiveWorkbook.Sheets("Commande").Range("B" & Boucle)
                Dim Qté_comm As Integer
                Qté_comm = ActiveWorkbook.Sheets("Commande").Range("E" & Boucle)
                        
                Dim Nb_lignes_demlivr As Integer
XXX       Nb_lignes_demlivr = ThisWorkbook.Sheets("Demandes-livraisons").Range("A" & Rows.Count).End(xlUp).Row
                               
                ThisWorkbook.Sheets("Demandes-livraisons").Range("A" & Nb_lignes_demlivr + 1) = Date_comm
                ThisWorkbook.Sheets("Demandes-livraisons").Range("B" & Nb_lignes_demlivr + 1) = Service
                ThisWorkbook.Sheets("Demandes-livraisons").Range("C" & Nb_lignes_demlivr + 1) = Catégorie
                ThisWorkbook.Sheets("Demandes-livraisons").Range("D" & Nb_lignes_demlivr + 1) = Désignation
                ThisWorkbook.Sheets("Demandes-livraisons").Range("G" & Nb_lignes_demlivr + 1) = Qté_comm
               
            End If
      
        Next Boucle

Je comprends que le ThisWorkbook pour lui signifier de revenir au classeur "Stock" ne lui plait pas trop mais j'en suis pas sûr.

En vous remerciant par avance de voter aide.
 

vgendron

XLDnaute Barbatruc
Hello

je crois que le "ThisWorkbook" lui dit d'aller voir le classeur ACTIF.
il faut donc lui indiquer le nom du classeur que tu souhaites controler.
suis pas sur de la syntaxe (vérifie avec l'aide VBA) mais essaie Workbooks("Stock.xls").Sheets("Demandes-livraisons").Range("A" & Nb_lignes_demlivr + 1) = Date_comm
 

youky(BJ)

XLDnaute Barbatruc
Bonjour tous,
J'ai essayé de remettre un peu d'ordre dans la macro.
Les DIM passent toujours en 1er et ne doivent pas être dans une boucle
Certaines variables n'ont pas besoin d'être dans la boucle n'ont plus.
VB:
Dim Date_comm As Date
Dim Service As String
Dim Qté_comm As Integer, Nb_lignes_demlivr As Integer
With ActiveWorkbook
Date_comm = .Sheets("Commande").Range("B1")
Service = .Sheets("Commande").Range("B2")
  For Boucle = 6 To Nb_lignes_commande 'cela doit être renseigné sinon 65000(Nb_ligne......)
        If .Sheets("Commande").Range("E" & Boucle) = "" Then Exit For
     Catégorie = .Sheets("Commande").Range("A" & Boucle)
     Qté_comm = .Sheets("Commande").Range("E" & Boucle)
     Désignation = .Sheets("Commande").Range("B" & Boucle)
      Nb_lignes_demlivr = ThisWorkbook.Sheets("Demandes-livraisons").Range("A" & Rows.Count).End(xlUp).Row
     ThisWorkbook.Sheets("Demandes-livraisons").Range("A" & Nb_lignes_demlivr + 1) = Date_comm
     ThisWorkbook.Sheets("Demandes-livraisons").Range("B" & Nb_lignes_demlivr + 1) = Service
     ThisWorkbook.Sheets("Demandes-livraisons").Range("C" & Nb_lignes_demlivr + 1) = Catégorie
     ThisWorkbook.Sheets("Demandes-livraisons").Range("D" & Nb_lignes_demlivr + 1) = Désignation
     ThisWorkbook.Sheets("Demandes-livraisons").Range("G" & Nb_lignes_demlivr + 1) = Qté_comm
  Next Boucle
End With
Bruno
 

Adc

XLDnaute Nouveau
Bonjour et merci à tous les 2.

vgendron, tu avais raison, le problème de provenait du fait que ThisWorkbook ne renvoyait plsu vers le classeur "Stock". J'ai donc été obligé de mettre un code Workbooks("Stock.xls").Activate

Du coup, je m'interroge : pour réaliser des copies d'un classeur à au autre, je suis obligé d'activer à chaque fois le classeur d'export et le classeur d'import de données ?

@youky(BJ)
Merci pour le code + propre. Je vais tâcher d'appliquer ca dans toute ma macro. Comme je suis un novice, j'ai tendance à faire du bricolage (par contre, je te rassure la variable Nb_lignes_commande est bien renseignée en amont ^^)
 

vgendron

XLDnaute Barbatruc
Hello

non pas besoin d'activer systématiquement le classeur, grace à l'instruction With

Nb_lignes_demlivr = ThisWorkbook.Sheets("Demandes-livraisons").Range("A" & Rows.Count).End(xlUp).Row
ThisWorkbook.Sheets("Demandes-livraisons").Range("A" & Nb_lignes_demlivr + 1) = Date_comm
ThisWorkbook.Sheets("Demandes-livraisons").Range("B" & Nb_lignes_demlivr + 1) = Service
ThisWorkbook.Sheets("Demandes-livraisons").Range("C" & Nb_lignes_demlivr + 1) = Catégorie
ThisWorkbook.Sheets("Demandes-livraisons").Range("D" & Nb_lignes_demlivr + 1) = Désignation
ThisWorkbook.Sheets("Demandes-livraisons").Range("G" & Nb_lignes_demlivr + 1) = Qté_comm
deviendrait

VB:
with workbooks("Stock.xls").sheets("Demandes-livraisons")
         .Range("A" & Nb_lignes_demlivr + 1) = Date_comm
         .Range("B" & Nb_lignes_demlivr + 1) = Service
         .Range("C" & Nb_lignes_demlivr + 1) = Catégorie
         .Range("D" & Nb_lignes_demlivr + 1) = Désignation
         .Range("G" & Nb_lignes_demlivr + 1) = Qté_comm
end with
à tester.
 

Adc

XLDnaute Nouveau
Slt,

Si je rentre ton code, il ne copie plus les lignes. J'ai ajouté la définition de Nb_lignes_commande et là je me remange une erreur 1004.

Je suis tristesse. A défaut de mieux, je vais garder l'activation systématique.

Merci de ton aide.
 

Discussions similaires

Réponses
2
Affichages
702

Statistiques des forums

Discussions
311 727
Messages
2 081 962
Membres
101 852
dernier inscrit
dthi16088