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 :

code VBA copier coller


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 52
    Par défaut code VBA copier coller
    Bonjour,
    Y a-t-il des instructions VBA Excel 2003 qui permettent de copier certaines lignes d'une base de données contenue dans une feuille de calcul et de les coller dans une feuille vierge ?

    Merci d'avance
    AVNAIM

  2. #2
    Membre éprouvé
    Inscrit en
    Mai 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 104
    Par défaut
    Bonjour,
    Copy, Paste, Pastespecial à moins que je n'aie loupé un truc dans la question ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 52
    Par défaut
    Merci de vouloir bien m'aider.
    Avec Copy Je dois indiquer la feuille ou se trouve la Base de données et le N° de ligne à sélectionner par VBA, je ne sais pas comment écrire tout cela
    Un petit exemple de code m'aiderait bien
    A nouveau merci
    AVNAIM

  4. #4
    Membre éprouvé
    Inscrit en
    Mai 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 104
    Par défaut
    Salut,

    Dans Visual Basic Editor, tu tapes copy, tu mets le curseur dessus et tu appuies sur F1. Après tu recommences avec paste et pastespecial

    Aide toi...

  5. #5
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sheets(le nom de ta feuille).range(la plage a copier).copy sheets(la feuille de destination).range(la destination)
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sheets(le nom de ta feuille).range(la plage a copier).copy 
    sheets(la feuille de destination).range(la destination).pastespecial

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 52
    Par défaut
    Bonjour et merci Machekeul
    Je vais essayer ça je crois que cela devrait marcher
    je te tiendra au courant des résultats
    Encore merci Cordialement et à +
    AVNAIM

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 52
    Par défaut
    ReBonjour,
    Voilà :
    Petit problème c'est la plage à copier. Le N° de ligne n'est pas le même à chaque clic du bouton ajouter Je l'obtiens donc sous forme de variable Or Range n'accepte pas de variable à coté de la colonne, il lui faut un nombre.
    Voici ma procédure :

    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
    Option Explicit
    Public Cat As String
    Private Sub CommandButton1_Click()
    Dim L As Integer
      Dim i As Integer
               For i = 0 To ListBox3.ListCount - 1
                    If ListBox3.Selected(i) Then
                    L = i + 7
                        ListBox4.AddItem (L)
    Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 2).End(xlUp)(2) = L
    Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 1).End(xlUp)(2) = Cat
    ' La var cat récupère le nom de la feuille où se trouve l'élément sélectionné
    ' Avec Cells j'obtiens donc dans ma feuille le nom de celle où je dois extraire et le N° de ligne
    'Worksheets(Cat).Range("AL:TL").Copy Worksheets("A_Vous_de_Jouer").Range("AL:TL")
                 End If
             Next i
      End Sub
    Peut être il y aurait une solution avec Cells mais je ne comprends pas bien le fonctionnement de cette fonction
    Peut être trouverez vous une combine ?
    Merci d'avance
    AVNAIM

  8. #8
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Si je comprend bien ce que tu essayes d'obtenir, la variable L doit récupérer le numéro de ligne de la première cellule vide dans la colonne B, il faut donc préciser que c'est le numéro de ligne que tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 2).End(xlUp)(2).Row = L
    Concernant la variable Cat, il y a un problème parce que là tu lui dit de prendre la valeur de la première cellule vide de la colonne A. Donc Cat sera vide également et Sheets(Cat) te renverra une erreur. Si c'est la valeur de la dernière cellule que tu souhaites récupérer, il faut enlever l'offset (2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 1).End(xlUp) = Cat
    Ensuite pour utiliser la variable L dans ta syntaxe, 2 possibilités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Worksheets(Cat).Range("A" & L & ":T" & L).Copy Worksheets("A_Vous_de_Jouer").Range("A" & L & ":T" & L)
     
    'soit
     
    Worksheets(Cat).Range(Cells(L, 1), Cells(L, 20)).Copy Worksheets("A_Vous_de_Jouer").Range(Cells(L, 1), Cells(L, 20))
    Pour terminer, 2 petites remarques :
    Si tout se passe dans le Classeur "Gestion-Alimentaire", il n'est pas nécessaire de préciser Workbooks("Gestion_Alimentaire") dans ton code, ce qui l'allègera.
    Pense à utiliser la balise [ Code ]...[ /Code ] à l'aide du bouton # pour mieux faire ressortir le code du reste du texte

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 52
    Par défaut
    Bonjour Fring
    Les deux premières lignes de code écrites en suivant tes conseils marchent parfaitement bien. Elles réalisent la copie des éléments sélectionnés ( feuille et N° de ligne) placés dans la ListBox4 vers ma feuille de calcul vierge .Dans la colonne A j'obtiens le nom de la feuille Colonne B le N° de ligne et l'utilisateur peut entrer dans la colonne C les quantités.

    Il me faut maintenant extraire toute la ligne(Colonnes A à T) dont j'ai le N°, de la feuille dont j'ai le nom, afin de faire les calculs en fonction des quantités entrées par l'utilisateur

    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Worksheets(Cat).Range("A" & L & ":T" & L).Copy Worksheets("A_Vous_de_Jouer").Range("A" & L & ":T" & L)
    J'obtiens le message d'erreur "l'indice n'appartient pas à la sélection "
    Et aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Worksheets(Cat).Range(Cells(L, 1), Cells(L, 20)).Copy Worksheets("A_Vous_de_Jouer").Range(Cells(L, 1), Cells(L, 20))
    Erreur (1004) "Erreur définie par l'application ou par l'objet "
    En fait ces lignes correspondent parfaitement à ce que je désire et il n'y a pas d'erreur de syntaxe. Les deux messages sont pour ma petite cervelle deux sentences hermétiques ! mais toi peut être sauras tu les déchiffrer ?
    Merci encore pour ton Aide
    AVNAIM

  10. #10
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    je devais être très fatigué...il faut inversé la syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    L = Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 2).End(xlUp)(2).Row
     
    Cat = Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 1).End(xlUp)

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 52
    Par défaut
    Mon cher Fring c'est peut être moi la cause de ta fatigue mais c'est que tu es ma bouée de sauvetage !
    Cette fois pas de message d'erreur mais les lignes appelées ne s'affichent pas
    Ma Sélection sur la feuille vierge fonctionne toujours j'ai Colonne A le nom des feuilles sélectionnées et en B les N°s de ligne mais je m'aperçoit que dans les lignes inversées le mot copy ne figure pas c'est peut être la raison ?
    Cordialement à +
    Avnaim

  12. #12
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par AVNAIM Voir le message
    mais je m'aperçoit que dans les lignes inversées le mot copy ne figure pas c'est peut être la raison ?
    Désolé mais là je ne te suis pas, réaffiche ton code complet stp.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 52
    Par défaut
    Bonjour Fring ,
    Voici donc le code complet

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Option Explicit
    Public Cat As String
    Private Sub CommandButton1_Click()
    Dim L As Integer
      Dim i As Integer
               For i = 0 To ListBox3.ListCount - 1
                    If ListBox3.Selected(i) Then
                    L = i + 7
                        ListBox4.AddItem (L)
    Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 2).End(xlUp)(2) = L
    Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 1).End(xlUp)(2) = Cat
     
    ' Worksheets(Cat).Range("A" & L & ":T" & L).Copy 'Worksheets("A_Vous_de_Jouer").Range("A" & L & ":T" & L)
           End If
             Next i
      End Sub
    -------------
    Private Sub CommandButton2_Click()     ' bouton  terminer 
    Feuil10.Activate
    UserForm3.Hide
    UserForm2.Hide
    End Sub
    -------------
    Private Sub OptionButton1_Click()
     ListBox3.RowSource = ""
      Feuil4.Activate
    ListBox3.RowSource = "$B$7:$C$100"
    ListBox4.AddItem " Viandes..."
    Cat = "viandes"                            
    End Sub
    --------
    Private Sub OptionButton2_Click()
     
     ListBox3.RowSource = ""
      Feuil3.Activate
    ListBox3.RowSource = "$B$7:$C$100"
    ListBox4.AddItem "Charcuterie..."
    Cat = "Charcuterie_Volailles"
    End Sub
    ----------
    Private Sub OptionButton3_Click()
     ListBox3.RowSource = ""
      Feuil1.Activate
     ListBox3.RowSource = "$B$7:$C$100"
     ListBox4.AddItem "Poissons..."
    Cat = "Poissons_Crustacés_Mollusques"
    End Sub
    -------------
    Private Sub OptionButton4_Click()
     ListBox3.RowSource = ""
      Feuil2.Activate
    ListBox3.RowSource = "$B$7:$C$100"
    ListBox4.AddItem " oeufs,lait..."
    Cat = " oeufs_lait et dérivés"
    End Sub
    --------------
    Private Sub OptionButton5_Click()
     ListBox3.RowSource = ""
      Feuil5.Activate
     ListBox3.RowSource = "$B$7:$C$100"
     ListBox4.AddItem " Céréales et dérivés"
    Cat = " Céréales et dérivés_Gateaux"
    End Sub
    --------------------
    Private Sub OptionButton6_Click()
     ListBox3.RowSource = ""
      Feuil6.Activate
    ListBox3.RowSource = "$B$7:$C$100"
    ListBox4.AddItem "Légumes, purées..."
    Cat = "Légumes_Purées_Potages"
     End Sub
    ---------------
    Private Sub OptionButton7_Click()
     ListBox3.RowSource = ""
      Feuil7.Activate
    ListBox3.RowSource = "$B$7:$C$100"
    ListBox4.AddItem " fruits....."
    Cat = " fruits"
    End Sub
    ---------------
    Private Sub OptionButton8_Click()
     ListBox3.RowSource = ""
      Feuil8.Activate
    ListBox3.RowSource = "$B$7:$C$100"
    ListBox4.AddItem " Divers, graisses.."
    Cat = " Divers"
    End Sub
    La variable public Cat récupère le nom de la base à chaque clic des boutons options
    La listeBox 3 liste 2 éléments de ligne ( Denrée et type) de toute la base sélectionnée par le bouton option et l'utilisateur sélectionne une ligne (i dans la listeBox) et clique le bouton Ajouter
    Le N° de ligne dans la base (i+7) vient alors s'ajouter dans la listBox 4 et grace aux deux lignes que tu m'as fait rajouter je retrouve dans ma feuille vierge le nom de la base en colonne A et le N° de ligne en colonne B. L'utilisateur peur alors entrer dans les cellules de la colonne C la quantité utilisée
    Mon problème est maintenant d'extraire Chaque ligne complète ( Colonnes A à T) de chaque base vers ma feuille de calcul pour pouvoir effectuer les calculs .
    J'espère n'avoir pas été trop confus dans mes explications.
    Merci infiniment de m'aider
    Très cordialement
    AVNAIM

  14. #14
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Je commence à y voir plus clair mais cela reste malgré tout encore un peu nébuleux.

    Donc sur la feuille "a vous de jouer", sur la dernière ligne de la colonne A tu insères la valeur de la variable "CAT" et sur la dernoère ligne de la colonne B tu insères la valeur de la variable "L", jusque là c'est ça ?

    Alors supposons que CAT = viandes et L = 7
    Tu récupères la ligne A7:T7 de la feuille "viandes" que tu colles dans la feuille "a vous de jouer".

    Ce qui reste nébuleux pour moi c'est où tu veux coller les données dans la feuille "a vous de jouer":
    - sur la ligne A7:T7 également ?
    - ou sur la première ligne vide dans laquelle tu as précédemment inscrit les valeurs de CAT et de L ? auquel cas, selon ton code tu écrases les valeurs CAT et L ???

    Si tu pouvais essayer de m'expliquer cette dernière partie

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 52
    Par défaut
    C'est vrai faut être un peu devin pour me comprendre :
    La procédure CommandBouton1 c'est le bouton Ajouter du UserForm
    Quand l'utilisateur a sélectionné une ligne de la listbox 3 du User Form il clique le bouton Ajouter Il voit alors un N° de ligne dans la liste box 4 qui correspond au N° de ligne de la listBox3 (i) plus 7 (i+7) = L c'est le N° de ligne dans la base de données.
    Simultanément j'obtiens dans ma feuille vierge " A vous de jouer " colonne A nom de la base (cat) et en B N° de ligne (L) dans la base Cat grâce au deux lignes de code (Workbooks(….) de la procédure Ajouter
    Pour l'exemple Cat = Viande et L = ( i+ 7 ) J'ai un nombre qui correspond au N° de ligne dans la catégorie Viandes et qui peut être 78, 33, 94…. Selon la valeur de i (ligne sélectionnée dans la list Box3 du UserForm .
    L'utilisateur fait toutes ses sélections et clique alors le bouton CommandBouton2 (Terminer) qui m'affiche la feuille 'à vous de jouer" où sont écrites toutes les sélections faites colonne A les catégories , colonne B les N° de ligne .

    Je voudrais maintenant copier a compter de la première ligne vide de la feuille les lignes dont j'ai le N° c'est-à-dire la plage A & Noligne : T & Noligne dans la catégorie dont j'ai le nom , afin d'effectuer les calculs .
    Peut être y vois tu maintenant un peu plus clair dans mon fouillis ?
    Merci de nouveau pour ton aide
    Avnaim

  16. #16
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    oui ok mais je vais reformuler ma question autrement

    dans un premier temps tu insères sur la première ligne vide (disons la ligne 5) de ta feuille "vierge" les variables CAT et L, tu as donc en A5 = viandes et en B5 = 33

    Les valeurs A33:T33 que tu récupères dans la feuille(CAT) tu veux à ce moment là les copier sur la première ligne vide, c'est à dire sous CAT et L précédemment introduit en A5 et B5, c'est à dire en A6:T6 ?

    Si c'est bien ça, voici une proposition que tu pourras peut-être adapter si ce n'est pas ça que tu souhaites obtenir
    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
    Private Sub CommandButton1_Click()
    Dim L As Integer, i As Integer, DerL As Integer
    Dim Sh As Worksheet
     
    Set Sh = Sheets("A_Vous_de_Jouer") '<-- uniquement pour simplifier l'écriture du code par la suite
    DerL = Sh.Cells(Rows.Count, 1).End(xlUp)(2).Row
     
    For i = 0 To ListBox3.ListCount - 1
        If ListBox3.Selected(i) Then
            L = i + 7
            ListBox4.AddItem (L)
            Sh.Cells(DerL, 2) = L
            Sh.Cells(DerL, 1) = Cat
            Worksheets(Cat).Range("A" & L & ":T" & L).Copy Sh.Range("A" & DerL + 1)
        End If
    Next i
     
    End Sub

Discussions similaires

  1. Simplifier code VBA copier Coller
    Par myk636 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/08/2015, 20h34
  2. [XL-2007] Aide sur code vba copier/coller
    Par youlig dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/03/2013, 11h28
  3. Réponses: 4
    Dernier message: 17/12/2012, 13h29
  4. [PPT-2000] code vba pour coller en metafichier
    Par alex830001 dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 02/12/2009, 08h23
  5. [XL-2007] VBA copier/coller image
    Par kaena dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/04/2009, 11h38

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