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 :

copier / coller Macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    Par défaut copier / coller Macro
    Bonjour a tous

    ce que j'essaye de faire c'est tout simplement
    j'ai deux onglets : 1) Fiche ; 2) Tableau

    Quand je renseigne la fiche, j'aimerais à partir d'une macro recupérer ces données pour ensuite renseigner automatiquement le tableau.

    Comment faire pour retranscrire cela à partir de l'onglet BDD : =SI(C2>0;'Fiche'!F17;0)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub test2()
    'With Sheets("BDD")
    For Each x In Sheets("BDD").Range("C2", [C2].End(xlDown))
    If x > 0 Then Sheets("Fiche").Range("F17").Copy
    Sheets("BDD").Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
    Next x
    'End With
    End Sub
    Ce j'ai reussi à faire c'est de copier / coller automatiquement les données "article" ; "description" et "prix" de la fiche vers le tableau, mais là où je bloque et que je n'arrive pas, c'est dire :

    De renseigner la "date début", "date de fin", "numero client" et la "devise".

    ci-joint mon fichier

    Pourrais je avoir votre aide SVP?

    merci
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Déjà avant d'aller plus loin, en fonction de ce que je vois sur vos feuilles, essayer :

    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
    Sub test()
     
    Sheets("BDD").Range("A2:CL65536").ClearContents
     
    dlng = Range("C32").End(xlDown).Row
    Sheets("Fiche").Range("C32:C" & dlng).Copy
    Sheets("BDD").Range("C2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
     
    Sheets("Fiche").Range("F32:F" & dlng).Copy
    Sheets("BDD").Range("D2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
    Sheets("BDD").Range("E2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
     
    Sheets("Fiche").Range("I32:I" & dlng).Copy
    Sheets("BDD").Range("AH2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
     
    Application.CutCopyMode = False
    Sheets("Fiche").Range("C32").Select
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    Par défaut
    merci Jacques_jean;

    Mais ca ne m'aide pas pour le reste, ca je bloque pour la suite :

    De renseigner la "date début", "date de fin", "numero client" et la "devise".

    merci de laide

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    Par défaut
    Re,

    J'ai fait cela, mais je ca ne commence pas à partir de la ligne 21 et non pas à partir de la ligne 2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub tst2()
    For Each x In Sheets("BDD").Range("C2", [C2].End(xlDown))
    If x > 0 Then Sheets("Fiche").Range("F17").Copy
    i = i + 1
    Sheets("BDD").Range("A2" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
    Next
    End Sub
    merci de l'aide svp

  5. #5
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    je ca ne commence pas à partir de la ligne 21 et non pas à partir de la ligne 2.
    Ca fait tellement de négation que je me perd, ca ne commence pas a la ligne 21 et pas a la 2 ca commence ou alors?

    A mon avis le problème bien de la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C2", [C2].End(xlDown))
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dlng = Sheets("BDD").Range("C65536").End(xlUp).Row
    'ou en fonction de ce qui te conviens le mieu
    dlng = Sheets("BDD").Range("C32").End(xlDown).Row
    For Each x In Sheets("BDD").Range("C32:C" & dlng).
    Edit Ca y est, je croi que j'ai compris ta phrase
    avec
    Range("A2" & i)
    tu copie ligne
    20
    21
    22
    ..
    28
    29
    210
    211

    essaye un i=2 avant ta boucle for
    et

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    Par défaut
    Bonjour Krovax
    J'ai fait ce que tu m'a dit et toujours rien.

    Si je mets i = 2 ca colle à la ligne A2, mais ne continus pas à coller le numero client en A3, A4, A5


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub test3()
     
    dlng = Sheets("BDD").Range("C65536").End(xlUp).Row
    i = 2
    For Each x In Sheets("BDD").Range("C2:C" & dlng)
    If x > 0 Then Sheets("Fiche").Range("F17").Copy
    Sheets("BDD").Range("A" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
    Next
    End Sub

    merci de l'aide svp

    merci

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si j'ai bien compris ce que vous voulez, essayez :
    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
     
    Sub test()
    Set wks1 = Worksheets("Fiche")
    Set wks2 = Worksheets("BDD")
     
    wks2.Range("A2:CL65536").ClearContents
     
    plng = 32
    dlng = wks1.Range("C" & plng).End(xlDown).Row
     
        If dlng < plng Then
        MsgBox "Aucune ligne à copier n'a été trouvée !"
        Exit Sub
        End If
     
    nblng = dlng - plng + 1
     
    wks1.Range("F17").Copy
    wks2.Range("A2:A" & nblng + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
     
    wks1.Range("F23").Copy
    wks2.Range("BC2:BC" & nblng + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
     
    wks1.Range("F22").Copy
    wks2.Range("BB2:BB" & nblng + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
     
    wks1.Range("I25").Copy
    wks2.Range("AI2:AI" & nblng + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
     
    wks1.Range("C" & plng & ":C" & dlng).Copy
    wks2.Range("C2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
     
    wks1.Range("F" & plng & " :F" & dlng).Copy
    wks2.Range("D2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
    wks2.Range("E2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
     
    wks1.Range("I" & plng & ":I" & dlng).Copy
    wks2.Range("AH2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
     
    wks1.Select
    Application.CutCopyMode = False
     
     
    Set wks1 = Nothing
    Set wks2 = Nothing
    End Sub
    Ce qui m'étonne, c'est que vous supprimiez toutes les données précédentes sur la feuille "BDD" qui ressemble plutôt à une récapitulation, mais vous seul savez pourquoi.

  8. #8
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    il fau garder le i=i+1
    Sinon tu copies toujours sur A2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dlng = Sheets("BDD").Range("C65536").End(xlUp).Row
    i=2
    For Each x In Sheets("BDD").Range("C2:C" & dlng)
    If x > 0 Then 'on va a la ligne après le then c'est plus simple au début ;)
    Sheets("Fiche").Range("F17").Copy
    Sheets("BDD").Range("A" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
    i=i+1
    end if
    Next
    End Sub
    La i=2
    tu copie sur A2
    i=i+1 donc 3
    si tu trouve tu copie sur A3
    i=4
    ...
    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If x > 0 Then Sheets("Fiche").Range("F17").Copy
    Sheets("BDD").Range("A" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
    i=i+1
    Si tu ne va pas a la ligne il va faire copy uniquement si la condition est vérifié
    mais va a chaque fois collé la valeur
    si cellule1 passe le test pas pas la 2 la 3, mais la 4 oui tu aura
    cellule1
    cellule1
    cellule1
    cellul4

    si tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If x > 0 Then 
       Sheets("Fiche").Range("F17").Copy
       Sheets("BDD").Range("A" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
       i=i+1
    end if
    dans le meme cas tu aura
    cellule1
    cellule4

    C'est tous ce qui se trouve entre if et end if qui sera exécuté si le test est bon (et qui ne le sera pas si le test n'est pas bon)

    A toi de voir ce que tu veux faire

    En résumé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if condition1 then action1
    action2
    équivaut a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if condition1 then
       action1
    end if
    action2
    Edit bonjour Jacques Jean effectivement je me suis contenté de modifier le code précédent Je devrais peut être plus m'inquiéter de l'objectif final

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour Krovax,

    Je crois que Roidurif veut intégrer une boucle dans son code, mais uniquement pour les données communes à chaque ligne et je n'en vois pas l'utilité puisqu'il a déjà procédé à la copie de plages pour les données non communes.

    C'est la raison pour laquelle je copie une donnée dans une plage pour les données communes, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wks1.Range("F17").Copy
    wks2.Range("A2:A" & nblng + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
    Mais ai-je raison ? On verra bien avec la réponse.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    Par défaut
    Merci Krovax et jacques_jean

    Vous etes super geniaux !!

    cordialement

Discussions similaires

  1. Création macro word pour copier-coller
    Par marmi dans le forum VBA Word
    Réponses: 2
    Dernier message: 18/04/2017, 09h26
  2. Problème de copier coller macro VBA
    Par Piernod dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/11/2009, 18h56
  3. Macro copier/coller colonne- insérer nouvelle colonne
    Par rembliec dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/11/2007, 16h32
  4. Macro Excel : copier-coller-concaténer
    Par neo2k2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/06/2007, 10h39
  5. Réponses: 3
    Dernier message: 23/09/2006, 15h19

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