IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Copie données sur classeur intermédiaire


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Copie données sur classeur intermédiaire
    Bonjour à tous,

    Novice en VBA , j'aurais besoin de votre aide pour un code qui me permettrais de copier des données d'un classeur source vers un classeur de destination mais à partir d'un classeur de base.

    Je m'explique :

    J'ai un premier classeur sur lequel je programme ma macro. Cette macro doit ouvrir un fichier source puis copier les données de ce fichier vers un classeur de destination intermédiaire pour ensuite etre copié vers mon classeur final.

    J'ai essayer avec la macro ci-dessous mais j'ai une erreur objet qui apparâit quand je l'execute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Sub importerdonneesSAP()
     
    Application.ScreenUpdating = False
     
    Dim ClasseurSource As Workbook, classeurdestination As Workbook
    Dim AN As String 'déclare la variable AN (Année)
    Dim Fichier1 As String 'déclare nom du Fichier au format xls
    Dim F As String 'déclare la variable F (Nom Dossier)
    Dim F1 As String 'déclare la variable du Fichier destination
    Dim O1 As String 'déclare l'onglet classeur destination
    Dim D1 As String 'déclare l'onglet du classeur source1
    Dim NCF As String 'déclare la variable NCF (Nom Complet du Fichier) )
    Dim NDF As String 'Déclare la variable NDF (Chemin complet du classeur destination1)
     
    AN = CStr(Year(Date)) 'définit l'année AN
    Fichier1 = "Extract MCSI" & Format(Date, " dd.mm.yyyy") & ".xls" 'définit extraction montres
    F = "Traitement MCSI" 'définit l'emplacement du dossier
    F1 = "Traitement MCSI" & ".xls" 'Définit nom du fichier destination
    O1 = "Extractions MCSI à copier" & "" 'définit l'onglet du classeur destination
    D1 = "Extract MCSI" & Format(Date, " dd.mm.yyyy") & "" 'définit l'onglet du classeur source1
    NCF = "T:\C\SGF\DR\" & AN & "\" & Format(Date, "mm") & ". " & Format(Date, "mmmm") & "\" & F & "\" & Fichier1 'définit le chemin complet du classeur source1 à ouvrir
    NDF = "T:\C\SGF\DR\" & AN & "\" & Format(Date, "mm") & ". " & Format(Date, "mmmm") & "\" & F & "\" & F1 'définit le chemin complet du classeur de destination1
     
    'ouvrir le classeur source MCSI en lecture seule
    Set ClasseurSource1 = Application.Workbooks.Open(NCF, True)
    Application.DisplayAlerts = False
     
    'Reformater les colonnes classeur source C,E,G,I valeurs en nombre
    ClasseurSource1.Sheets(D1).Range("C6", Range("C6").End(xlDown)).TextToColumns Destination:=Range("C6"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
     
    ClasseurSource1.Sheets(D1).Range("E6", Range("E6").End(xlDown)).TextToColumns Destination:=Range("E6"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
     
    ClasseurSource1.Sheets(D1).Range("G6", Range("G6").End(xlDown)).TextToColumns Destination:=Range("G6"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
     
    ClasseurSource1.Sheets(D1).Range("I6", Range("I6").End(xlDown)).TextToColumns Destination:=Range("I6"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
     
            'définir le classeur destination
    Set ClasseurDestination1 = Workbooks.Open(NDF, True)
    'Set ongletdestination = ClasseurDestination1.Worksheets(O1)
    Application.DisplayAlerts = False
     
    'copier les données du ClasseurSource vers le ClasseurDestination
    ClasseurSource1.Sheets(D1).Range("B6:J6", Range("B6:J6").End(xlDown)).Copy ClasseurDestination1.Sheets(O1).Range("A4:I4")
    sur la dernière ligne cela plante pouvez vous m'aider svp?

    Merci bcp par avance.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Dans le classeur source, as-tu du contenu dans les cellules en dessous de la ligne 6 ?
    As-tu regardé le contenu de la variable O1 ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Bonjour Menhir,

    Oui il y a du contenu c'est pour ca que je met un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B6:J6", Range("B6:J6").End(xlDown))
    la variable O1 c'est juste le nom de ma feuille au sein de cette feuille je veux coller sur la plage de A à I les valeurs copiées.

    As tu une idée d'où pourrait venir l'erreur d'execution 1004 "Erreur définie par l'application ou par l'objet"

    merci

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Floflo1007 Voir le message
    la variable O1 c'est juste le nom de ma feuille au sein de cette feuille je veux coller sur la plage de A à I les valeurs copiées.
    J'ai bien compris ce que tu souhaites mettre dans cette variable.
    Mais l'important n'est pas ce que tu veux qu'elle contienne mais ce qu'elle contient "pour de vrai".
    Utilise un debug.print, un MsgBox ou regarde dans la fenêtre des variables locales pour voir quel est son VERITABLE contenu au moment où elle est utilisée.

    Sans avoir de certitude, je dois reconnaitre que la ligne 19 où cette variable est renseignée me semble étrange.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Dans le’ classeur de destination il y a déjà des cellules remplie est ce qu’il faut les effacer avant collage sur la plage ? Sinon le contenu c’est Du texte et des nombres rien de particulier

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Floflo1007 Voir le message
    Dans le’ classeur de destination il y a déjà des cellules remplie est ce qu’il faut les effacer avant collage sur la plage ? Sinon le contenu c’est Du texte et des nombres rien de particulier
    Qu'il y ait des données dans une cellules n'empêche en rien de faire une copie dessus.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Je ne vois pas alors d’ou Vient le problème

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Dans le post #2, je t'ai demandé de faire une vérification et dans le post #4 je t'ai expliqué comment la faire.
    Si tu ne veux pas répondre aux questions, je ne vais pas te forcer la main.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    J’ai effectué debug.print ça met erreur 2029
    Je ne vois pas ce que c’est car j’ai le même nom d’en variable que mes’ onglets.

  10. #10
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Est-ce que ton classeur destination est correctement ouvert par ta ligne 50 ?

    Citation Envoyé par Floflo1007 Voir le message
    J’ai effectué debug.print ça met erreur 2029
    Pour un debug.print sur une variable de type String ? C'est le première fois que j'entends ça.
    Peux-tu montrer la ligne de code de ton Debug.Print ? Où l'as-tu placée dans ton code ?

    j’ai le même nom d’en variable que mes’ onglets.
    Comment l'as-tu vérifié ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    J’ai réussi à copier mais bizarrement il faut que je décompose le copier en faisant un sheet(D1).Activate avant et le coller en faisant un sheet(O1).Activate avant également est ce normal ou il y a un moyen de faire une plus petite écriture

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Floflo1007 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClasseurSource1.Sheets(D1).Range("B6:J6", Range("B6:J6").End(xlDown)).Copy ClasseurDestination1.Sheets(O1).Range("A4:I4")
    Je viens de comprendre où est le problème.
    Dans ton premier Range, tu fixes la fin de la plage par un autre Range : Range("B6:J6").End(xlDown)
    Or, comme il n'y a pas de référence à une feuille ou un classeur pour cet autre Range, VBA considère que c'est une cellule de la feuille par défaut.
    Comme juste avant tu as ouvert le fichier destination et que tu n'as pas fait d'autre activation après, la feuille par défaut au moment de ton Copy est la feuille active au moment de la dernière sauvegarde de ton fichier de destination.

    Bref, tu demandes à VBA de copier une plage qui est répartie sur plusieurs feuilles (et même plusieurs fichiers), chose qu'il ne peut pas accepter.
    Il faut que tu indiques à que ton second Range appartient aussi à la feuille source.

    Autre détail : la propriété End ne renvoie qu'une seule cellule, pas une plage.
    Donc ton Range("B6:J6").End(xlDown) ne renverra pas la dernière cellule de la colonne J mais la dernière cellule de la colonne B, sans se préoccuper du remplissage des colonne C:J.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Menhir,

    merci pour ton retour. Ca m'a aidé
    Pour end.(xlDown) que faut-il mettre alors pour que cela prenne en compte les colonnes C à J?

    Merci pour ton aide.

Discussions similaires

  1. [XL-2003] Recuperation de données sur classeur XlsX 2010
    Par La Pistoule dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/05/2013, 15h02
  2. Besoin d'aide Macro récupéré les mêmes données sur classeur fermé
    Par djinero dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/10/2011, 15h40
  3. [XL-2003] Aide recuperation de donnée sur autre classeur
    Par PUARAI dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/05/2009, 15h23
  4. Réponses: 1
    Dernier message: 27/11/2007, 11h38
  5. UserForm + Extraction de données sur nouveau classeur
    Par tpcforever dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2007, 12h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo