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 toutes les données de lignes sélectionnées


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Copier toutes les données de lignes sélectionnées
    Bonjour,

    Voici, mon problème, plus précisément :

    2 classeurs, "suivi de factures" et "document imprimable", sous-divisés en 2 onglets ("administration" / "comptabilité" et "doc" / "datas")
    Dans "doc", la plupart des cellules font référence à des valeurs copiées (pour le moment à la main), sur les lignes 1 et 2 de "datas".
    Une facture est caractérisée par un numéro de ligne (par exemple 9) dans le classeur "suivi de facture". En copiant les lignes 9 des onglets "administration" et "comptabilité" dans "datas", j'obtiens immédiatement une facture dans l'onglet "doc", absolument nickel.

    Ce que je veux faire, c'est automatiser la tâche qui copie-colle les données issues d'un numéro de ligne choisi selon la procédure ci-dessus. Des solutions plus pertinentes, si vous avez, seront également les bienvenues.

    Idéalement, je souhaiterais créer une liste déroulante dans le premier classeur, qui me permette de choisir la facture à imprimer en visualisant quelques informations de la ligne (par exemple issues des colonnes B / D / F de l'onglet "admin..." et C de l'onglet "comptabilité").

    Ca fait quelques jours que j'essaie de le faire, c'est mon premier gros projet en Excel, d'avance merci pour votre aide !

    lien vers une discussion assez proche/macros-vba-excel/copier-ligne-selectionner/

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    PS : EN plus, à force de "bosser", sur le sujet, j'ai "perdu", le petit élément qui se mettait sur le classeur lorsque je lançais une macro (pour activer / désactiver les références relatives en cours d'enregistrement)... HELP !!!

  3. #3
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Je sais que certain ne sont pas adepte du fichier joint, mais dans ton cas ce serait pas mal je pense, veuilles bien a supprimer toutes donnée perso du fichier si tu choisi de mettre un fichier a dispo bien sur.
    Pour ce qui est du menu qui a disparu, lance l'enregistrement d'une macro et va dans le menu Affichage -> Barre d'outils, tu trouvera une barre nommée "Arrêt macro" ou un truc dans le genre, je répète qu'il faut qu'une macro soit lancer pour que tu puisses la trouver dans la liste des barre dispo.
    A++
    Qwaz

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon, j'ai quasiment résolu mon problème, mais, c'est bizarre, le programme ne fonctionne pas si j'utilise les raccourcis clavier (je voulais affecter "Ctrl Shit P" à la macro... Du coup, c'est pas encore ça. Voici ma macro actuelle :

    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 CREERDoc()
    '
    'Raccourci Ctrl+Shift+P
    '
      ligne = InputBox("veuillez saisir le numéro de ligne du document à créer")
     
        If ligne = "" Then
            MsgBox "Création du document annulé"
        Exit Sub
     
        Else
        'On se positionne sur l'onglet "Suivi comptable"
        Sheets("Suivi comptable").Select
        'Message de vérification (information)
        MsgBox "La ligne sélectionnée est la ligne n° " & ligne & ", correspondant au document " & Range("A" & ligne)
     
    ' NOTE : jusqu'ici tout va bien !'
     
        'On copie la ligne
        Rows(ligne & ":" & ligne).Select
    'Ci-après je sais pas à quoi ça sert, mais c'est généré par l'enregistreur de macro
        Application.CutCopyMode = False 
        Selection.Copy
     
    'emplacement du classeur "Doc Type", que l'on ouvre.
        ChDir _
            "D:\ASSOCIATIONS\Devis et Factures"
        Workbooks.Open Filename:= _
            "D:\ASSOCIATIONS\Devis et Factures\Doc Type.xls"
     
    'On colle la ligne copiée en ligne 2 de la feuille "Datas"
        Windows("Doc Type.xls").Activate
        Sheets("Datas").Select
        Rows("2:2").Select
        ActiveSheet.Paste
     
    'Idem avec nouvelle ligne - de la feuille "Suivi administratif" - vers ligne 1 de la feuille "Datas"
        Windows("Suivi devis et factures.xls").Activate
        Sheets("Suivi administratif").Select
        Rows(ligne & ":" & ligne).Select
        Application.CutCopyMode = False
        Selection.Copy
     
        Windows("Doc Type.xls").Activate
        Sheets("datas").Select
        Rows("1:1").Select
        ActiveSheet.Paste
     
        'On visualise le résultat
        'Sheets("Document").Select
    'NOTE : j'ai mis en commentaire la dernière ligne, or, avec raccourci clavier,
    'le résultat est le classeur "Doc type" ouvert sur la feuille "Document" (comme 
    ' si une fois le fichier ouvert la suite ne s'effectuait pas, ou trop vite ?!?
      End If
      End Sub

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Je n'ai pas trop de tems ce matin mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Windows("Suivi devis et factures.xls").Activate
        Sheets("Suivi administratif").Select
        Rows(ligne & ":" & ligne).Select
        Application.CutCopyMode = False 'inutile ici
        Selection.Copy
     
        Windows("Doc Type.xls").Activate
        Sheets("datas").Select
        Rows("1:1").Select
        ActiveSheet.Paste
    c'est pas bien "beau"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dim ClaSuivi as workbook
    dim ClaDoc as workbook
     
    Set ClaSuivi = Windows("Suivi devis et factures.xls")
    Set ClaDoc = Windows("Doc Type.xls")
     
    with ClaSuivi.Sheets("Suivi admin")
       .Rows(ligne).copy ClaDoc.sheets("datas").rows(1)
    end with
    Application.CutCopyMode = False 'ici pour supprimer le cadre de "sélection copy"
    Essai de structurer un peu ton code comme ça plutôt regarde l'aide sur Copy tu peux passer directement en paramètre le lieu ou ça doit être collé.

    a++
    Qwaz

  6. #6
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Slt , à tous,
    comme tu me l'as demandé et en appliquant les conseils de Qwazerty,que je salue, voici comment devrais etre a peu près () ton code:
    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
    Dim ligne As String
    '
    'Raccourci Ctrl+Shift+P
    '
    'met dans une variable le classeur ouvert
    Set wk1 = Workbooks("Suivi devis et factures.xls")
     
     'ouvre le deuxieme classeur
     Workbooks.Open Filename:= _
            "D:\ASSOCIATIONS\Devis et Factures\Doc Type.xls"
    'met dans une variable le 2eme classeur
    Set wk2 = Workbooks("Doc type.xls")
     
    wk1.Activate
    With wk1
      ligne = InputBox("veuillez saisir le numéro de ligne du document à créer")
     
        If ligne = "" Then
            MsgBox "Création du document annulé"
        Exit Sub
     
        Else
        'Message de vérification (information)
        MsgBox "La ligne sélectionnée est la ligne n° " & ligne & ", correspondant au document " & .Sheets("Suivi comptable").Range("A" & ligne)
     
        'On copie et colle la ligne
        wk1.Sheets("Suivi comptable").Rows(ligne).Copy wk2.Sheets("Datas").Rows(2)
        wk1.Sheets("Suivi administratif").Rows(ligne).Copy wk2.Sheets("datas").Rows(1)
        End If
    End With
     
        'On visualise le résultat
        wk2.Sheets("Document").Activate
    End Sub
    Effectivement le code ne fonctionne pas avec le raccourcis clavier. Il ouvre le fichier 2 et s'arrête. pourquoi? ?????? Je ne sais pas. Peux-etre que ton raccourcis (ctrl+maj+P) est utilisé par excel... je ne sais pas.

    Si tu met ton code sur un bouton de commande pas de problème donc ...

    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CutCopyMode = False
    sert à enlever la bordure qui scintille lorsque tu sélectionnes une plage que tu la copie et que tu la colle.
    Avec la méthode appliquer dans le code tu n'en as pas besoin.
    A+

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    Salut
    [...]
    Pour ce qui est du menu qui a disparu, lance l'enregistrement d'une macro et va dans le menu Affichage -> Barre d'outils, tu trouvera une barre nommée "Arrêt macro" ou un truc dans le genre, je répète qu'il faut qu'une macro soit lancer pour que tu puisses la trouver dans la liste des barre dispo.
    A++
    Qwaz
    Merci, ça marche très bien, excellente suggestion ; la barre s'appele "arrêter l'enregistrement", et naïvement, je ne pensait pas que ça pouvait être ça, donc j'ai pas testé tout de suite !!!

    PS (je suis un vrai adepte du PS ) : à quoi sert le bouton "référence relative", et comment fonctionne-t-il ?
    PPS (tant qu'à faire !) : si je comprends bien le sens des réponses que vous me donnez, il vaut mieux créer des variables pour "alléger" le code et "l'universaliser" que d'utiliser directement le nom des classeurs ?

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Dernières questions pour clore le sujet (car vos suggestions fonctionnent bien) :
    - pourquoi le raccourci clavier ne fait pas "fonctionner" le programme (j'ai essayé avec d'autres, idem ; petite piste, avec votre version, c'est encore plus rapide, comme si l'opération d'ouverture de ClaDoc - ou wk2, arrêtait la macro) ? cf cet autre post, c'est un bug il faut enlever "Shift" du raccourci.
    - comment voir l'aide sur "copy" (question de fond, je sais, mais je début, et sous Excel 2003, j'ai l'impression que mon fichier d'aide ne "fonctionne" pas) ?
    - Euh... Faire un bouton cliquable "Créer doc" (là, je frise un peu la paresse, sûr que ça doit être expliqué ailleurs, mais des fois que... ) ?
    - PS et PPS du post précédent.

    Merci !

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Alors une petit post... mais beaucoup de questions

    à quoi sert le bouton "référence relative"
    Quand tu sélectionnes une cellule en mode "normal" tu dis je vais en C2 par exemple, maintenant si tu te mets en mode relatif et que tu veux pointer en D4, excel va partir e C2 et te dire que tu te décale d'une colonne et de 2 lignes, le référence a ta cellule est donc relative a ta position de départ.

    il vaut mieux créer des variables pour "alléger" le code et "l'universaliser" que d'utiliser directement le nom des classeurs
    Pour ce qui est de l'utilisation des noms de classeur, ça ne change rien a la vitesse de ton code, mais par contre au niveau lisibilité tu y gagnes énormément. Gardes en tête que tu auras peut être un jour a retoucher ton code... alors plus claire et commenté il sera et plus vite tu retrouveras tes p'tits.
    Pour ce qui est des variables c comme je le dis dans l'autre poste, c'est intéressant si tu fait souvent référence a un contenu, au lieu d'aller chercher 50 fois une valeur dans une cellule, il est préférable (si celle ci ne change pas en cours de route bien sur) de mettre cette valeur une bonne fois pour toute dans une variable et de ce référer a cette variable.

    pourquoi le raccourci clavier ne fait pas "fonctionner" le programme
    La je ne vois pas ou est le problème, mais j'utilise jamais le raccourci clavier, d'autre te donneront peut être une réponse.

    comment voir l'aide sur "copy"
    Dans ton code tu clique sur le mot copy et tu tapes sur F1 et biensur ca marche sur a peu près tout les mot clef utilisé par VBA Excel et donc super utile.

    Faire un bouton cliquable "Créer doc"
    Regarde du coté des barres d'outil, l'une d'elle se nomme "Outils visual" (un truc dans le genre) dedans tu trouveras le bouton, ensuite tu fais un clique droit dessus -> propriétés pour afficher ... ses propriétés .
    Et sinon tu double cliques direct sur le bouton (attention il faut être en mode création => l'icône en forme d'équerre sur le menu "Outil visual") et tu arriveras direct dans l'implémentation code du bouton (dans cette partie tu feras appelle a ta sub/function pour l'exécuter)

    Voila je pense avoir distiller ce que je sais
    A++
    Qwaz

Discussions similaires

  1. [XL-2007] Récupérer toutes les données d'une ligne liées a un indice
    Par cwamm dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/10/2014, 17h26
  2. Copier Toutes les lignes des cellules active.
    Par pradaseven dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/06/2011, 18h42
  3. [XL-2003] copier toutes les lignes concernées et les coller dans un autre onglet
    Par spacesheep dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/10/2009, 15h40
  4. Réponses: 2
    Dernier message: 02/06/2007, 17h21
  5. Réponses: 2
    Dernier message: 11/10/2005, 09h15

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