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 automatiquement des valeurs vers une autre feuille [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Points : 21
    Points
    21
    Par défaut Copier automatiquement des valeurs vers une autre feuille
    Bonjour,

    Voila j'ai une feuille appellé "facture" qui a les renseignements suivant :

    N° de la facture, Réference du dossier, nom de la société facturé, nom des clients prise en Charge, le montant total et date de la facture.

    Dans une autre feuille appellé CA, je voudrais bien dans un tableau, collecter certain données telle que :
    Nom de la société, nom du clients, date de la facture et montant

    Comment puis je les copier automatiquement si a chaque fois que je change de référence, ces données seront copier à la première ligne vide de la feuille CA

    Merci beaucoup

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Est-ce que tu peux avoir plusieurs noms de client ? Si oui, il faudra un bouton pour copier les données; sinon, on peut s'en passer.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Oui mais je voudrais bien l'automatiser avec Worksheet_Change mais l'essais que j'ai fait n'a pas marché.

    ce que je souhaite faire c'est quand je change de reference clients, les infos correspondant au référence précédant se copie automatiquement dans la feuille CA

    Merci et a+

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Oui, mais comme tu peux avoir plusieurs noms de clients pour la même référence, on ne sait pas quand déclencher la copie. Ou j'ai mal compris ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Excusez moi! c'est moi qui a mal compris.

    Une référence correspond à un clients donc la copie se fera à chaque fois que je change de client.

    Merci beaucoup

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Voici le code qui fonctionne avec le classeur joint.. J'ai nommé les cellules de la feuille "Facture" (leur nom se trouve en ligne 3) les cellules à remplir se trouvent en ligne 2. Les cellules se copient si la référence dossier n'existe pas sur la feuille "CA".

    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 Worksheet_Change(ByVal Target As Range)
    Dim Ligne As Long, Plage As Range, C As Range
    If Intersect(Target, Union([Facture], [RéfDossier], [Société], [Client], [Montant], _
        [DateFacture])) Is Nothing Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    If Application.CountA(Union([Facture], [RéfDossier], [Société], [Client], [Montant], _
        [DateFacture])) < 6 Then Exit Sub
    If Not IsNumeric(Application.Match([RéfDossier].Value, [CA!B:B], 0)) Then
        With Sheets("CA")
            Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            Set Plage = Union([Facture], [RéfDossier], [Société], [Client], [Montant], _
                [DateFacture])
            For i = 1 To Plage.Count
                .Cells(Ligne, i) = Plage(i)
            Next
        End With
    End If
    End Sub
    Fichiers attachés Fichiers attachés

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Bonjour!

    Je vous remercie beaucoup pour le travail parce que le code fonctionne bien. Toutefois, j'ai du mal à l'adapter avec mon fichier que vous trouverez attaché avec ce message. Aussi, j'ai du mal à inclure mon code pour automatiser le numéro de facture (code en vert). Je ne sais pas si vous pouvez m'aider à l'affiner car je suis un débutant en VB.

    Encore merci pour votre aide

    Bruno
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Je n'arrive pas à localiser le tour opérateur (le nom "TO" fait référence à "Facture!#REF!")
    La feuille "CA" montre plusieurs lignes avec le même numéro de facture. Est-ce qu'il faut faire une ligne dans CA par ligne de la facture ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Ci-joint le fichier rectifié. En fait les numéro de factures sont les seul qui fonctionnent quand j'ai fait l'essai. Une ligne correspond à une facture, un client , ...

    Merci beaucoup
    Fichiers attachés Fichiers attachés

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    J'ai modifié le code comme suit (regarde le fichier en PJ) :

    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 Worksheet_Change(ByVal Target As Range)
    Dim Ligne As Long, Plage As Range, C As Range
    If Intersect(Target, Union([Facture], [RéfDossier], [To], [Client], [Montant], _
        [DateFacture])) Is Nothing Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    If Application.CountA(Union([Facture], [RéfDossier], [To], [Client], [Montant], _
        [DateFacture])) < 6 Then Exit Sub
        Set Plage = Union([Facture], [RéfDossier], [To], [Client], [Montant], _
            [DateFacture])
    If Not IsNumeric(Application.Match([Facture].Value, [CA!A:A], 0)) Then
        With Sheets("CA")
            Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            For i = 1 To Plage.Count
                .Cells(Ligne, i) = Plage.Areas(i)
            Next
        End With
    End If
    End Sub
    Fichiers attachés Fichiers attachés

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Il fonctionne très bien merci beaucoup une dernière soucis que je n'arrive pas à gérer c'est l'incrémentation automatique du N° de Facture qui est en relation avec la valeur de P1. Comment puis je l'insérer sachant que le code que j'ai utilisé pour ce faire est en vert.

    Merci beaucoup

    Bruno

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    J'ai un peu de mal à comprendre. La macro incrémente Q1 alors que le numéro de facture prend la valeur de P1. Qu'est-ce que je dois faire ?

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    En fait, ça c'est une erreur due au faite que j'ai supprimé des collones pour alèger le fichier afin de l'evoyer. Normalement pour ce fichier le macro doit incrémenter p1 mais non pas q1.

    Salutations

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    En utilisant P1, mets cette macro dans la feuille "Facture" :

    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
    Const celref = "n17"
    Const celnum = "P1"
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Ligne As Long, Plage As Range, C As Range
        If Not Intersect(Target, Range(celref)) Is Nothing Then
          Application.EnableEvents = False
          Range(celnum).Value = Range(celnum).Value + 1
          Application.EnableEvents = True
        ElseIf Intersect(Target, Union([Facture], [RéfDossier], [To], [Client], [Montant], _
            [DateFacture])) Is Nothing Then Exit Sub
            If Target.Count > 1 Then Exit Sub
            If Application.CountA(Union([Facture], [RéfDossier], [To], [Client], [Montant], _
                [DateFacture])) < 6 Then Exit Sub
                Set Plage = Union([Facture], [RéfDossier], [To], [Client], [Montant], _
                    [DateFacture])
            If Not IsNumeric(Application.Match([Facture].Value, [CA!A:A], 0)) Then
                With Sheets("CA")
                    Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                    For i = 1 To Plage.Count
                        .Cells(Ligne, i) = Plage.Areas(i)
                    Next
                End With
            End If
        End If
    End Sub

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Après avoir copier le dernier code, j'ai constaté :
    1°) P1 s'incrémente automatiquement
    2°) la copie de n'effectue pas

    en cherchant source du problème, j'ai comparé les deux codes la 1er sans incrémentation mais la copie marche et la deuxième ; j'ai trouvé que cette ligne de code (sur la dernière code que vous avez suggéré) empêche la copie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ElseIf Intersect(Target, Union([Facture], [RéfDossier], [To], [Client], [Montant], _
          [DateFacture])) Is Nothing Then Exit Sub
    Tout en essayant de comprendre les codes, je voudrais savoir si c'est vraiment ca qui fait bloquer la copie car quand j'ai mis un apostrophe devant la copie s'est éfféctué

    Salutations

    Bruno

  16. #16
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bien vu !

    Il faut modifier le code comme suit :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Ligne As Long, Plage As Range, C As Range
        If Not Intersect(Target, Range(celref)) Is Nothing Then
          Application.EnableEvents = False
          Range(celnum).Value = Range(celnum).Value + 1
          Application.EnableEvents = True
        ElseIf Not Intersect(Target, Union([Facture], [RéfDossier], [To], [Client], [Montant], _
            [DateFacture])) Is Nothing Then
            If Target.Count > 1 Then Exit Sub
            If Application.CountA(Union([Facture], [RéfDossier], [To], [Client], [Montant], _
                [DateFacture])) < 6 Then Exit Sub
                Set Plage = Union([Facture], [RéfDossier], [To], [Client], [Montant], _
                    [DateFacture])
            If Not IsNumeric(Application.Match([Facture].Value, [CA!A:A], 0)) Then
                With Sheets("CA")
                    Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                    For i = 1 To Plage.Count
                        .Cells(Ligne, i) = Plage.Areas(i)
                    Next
                End With
            End If
        End If
    End Sub

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Je n'arrive pas à comprendre pourquoi le code proposé ci-dessus n'effectue pas la copie alors que ceci effectue la copie
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Ligne As Long, Plage As Range, C As Range
        If Not Intersect(Target, Range(celref)) Is Nothing Then
          Application.EnableEvents = False
          Range(celnum).Value = Range(celnum).Value + 1
          Application.EnableEvents = True
            If Target.Count > 1 Then Exit Sub
            If Application.CountA(Union([Facture], [RéfDossier], [To], [Client], [Montant], _
                [DateFacture])) < 6 Then Exit Sub
                Set Plage = Union([Facture], [RéfDossier], [To], [Client], [Montant], _
                    [DateFacture])
            If Not IsNumeric(Application.Match([Facture].Value, [CA!A:A], 0)) Then
                With Sheets("CA")
                    Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                    For i = 1 To Plage.Count
                        .Cells(Ligne, i) = Plage.Areas(i)
                    Next
                End With
            End If
        End If
    End Sub
    Avec ce code mon problème est résolu mais je cherche seulement à comprendre pourquoi?

    En tout cas, Grand merci pour votre aide

    Bruno

  18. #18
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Désolé, ENORME erreur de logique !

    Oui, le code que tu publies fonctionne, mais il risque de déclencher la macro intempestivement (à chaque fois que tu remplis la facture). Il n'y aurait rien de copié parce qu'il y a d'autres sécurités, mais c'est inutile.

    Remplace par ce code (testé, cette fois-ci) :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Ligne As Long, Plage As Range, C As Range
        If Not Intersect(Target, Range(celref)) Is Nothing Then
          Application.EnableEvents = False
          Range(celnum).Value = Range(celnum).Value + 1
          Application.EnableEvents = True
        End If
        If Not Intersect(Target, Union([Facture], [RéfDossier], [To], [Client], [Montant], _
            [DateFacture])) Is Nothing Then
            If Target.Count > 1 Then Exit Sub
            If Application.CountA(Union([Facture], [RéfDossier], [To], [Client], [Montant], _
                [DateFacture])) < 6 Then Exit Sub
                Set Plage = Union([Facture], [RéfDossier], [To], [Client], [Montant], _
                    [DateFacture])
            If Not IsNumeric(Application.Match([Facture].Value, [CA!A:A], 0)) Then
                With Sheets("CA")
                    Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                    For i = 1 To Plage.Count
                        .Cells(Ligne, i) = Plage.Areas(i)
                    Next
                End With
            End If
        End If
    End Sub

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    SUPER!

    Ceci fonctionne très bien. Je vous remercie beaucoup pour votre aide.

    A bientôt pour un autre problème

    Bruno

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CountIfs sur des valeurs d'une autre feuille
    Par darki24 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/04/2015, 16h16
  2. [XL-2010] Copier plage de cellules vers une autre feuille selon un critère dans une boucle
    Par klash384 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/01/2015, 17h53
  3. [XL-2010] copier des cellules vers une autre feuille
    Par fredplusvar dans le forum Excel
    Réponses: 1
    Dernier message: 22/03/2014, 12h34
  4. [XL-2003] copier en automatique le code d'un module d'une feuille EXCEL vers une autre feuille
    Par MichaSarah dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/05/2009, 00h13
  5. copier des cellule d'une feuille vers une autre feuille
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/04/2008, 12h13

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