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 entre feuillet à la suite à deux lignes équivalentes [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etd. Supply Chain Manager
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etd. Supply Chain Manager
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Par défaut Copier-coller entre feuillet à la suite à deux lignes équivalentes
    Bonjour à tous et à toutes,

    Je viens à vous dans l'espoir de trouver une solution (formule ou macro) afin de résoudre mon problème.

    Toutes les semaines, j'extrait de mon progiciel d'entreprise des lignes de commandes non-réceptionnées par des agences. Ces lignes non-réceptionnées peuvent être dûes à une livraison non-effectuée comme une réception oubliée par un magasinier. Ainsi, chaque semaine le fournisseur m'établit des réponses (colonne P, feuillet 'S02').

    D'une semaine à l'autre, je ressors la même extraction et des lignes peuvent très bien être en doublon d'une semaine à une autre.

    Mon problème : je voudrais qu'Excel puisse rechercher les lignes identiques d'un feuillet à un autre et puisse copie-colle le commentaire dans le feuillet le plus récent quand la ligne est identique d'une semaine à l'autre.

    Fichier test.xlsx

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Antoine et bienvenu sur le Forum,

    Comment définis-tu des lignes identiques?
    1 seule cellule? laquelle?
    Tous les champs de la ligne?

    Comment définis-tu le feuillet (ou plutôt la feuille de travail) le plus récent?

  3. #3
    Membre averti
    Homme Profil pro
    Etd. Supply Chain Manager
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etd. Supply Chain Manager
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Par défaut
    Bonjour Marcel,

    Le feuillet le plus ancien est le 'S02', le plus récent 'S03' (ce sont les numéros de la semaine).

    L'idée, c'est qu'Excel rentre dans le feuillet le plus récent, lise la première ligne (A2:O2) et va rechercher dans le feuillet plus ancien si la ligne y est déjà.

    SI OUI : copier-coller le commentaire du fournisseur (colonne P) de la ligne 'S02' dans 'S03'
    SI NON : passer à la ligne suivante.

    J'ai essayé avec du =RECHERCHEH, des macros 'Do Loop', 'Do While'... rien.

    En terme de code :

    Si 'S03'!A2:O2 est égal à 'S02'!A2:O2' alors
    'S02'!P2 = 'S03'!P2
    sinon (passer à la ligne suite du feuillet 'S02'!)
    Tant que 'S03!' n'a pas comparé toutes ses lignes avec 'S02!', la boucle continue

    Et l'idée est d'automatiser toujours cela, surtout quand je serai à la semaine S42.

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    salut,

    et va rechercher dans le feuillet plus ancien si la ligne y est déjà.
    Tu n'as répondu qu'à une partie des questions posées.
    Pour tester 2 lignes identiques, la vérification doit-elle porter sur
    - un champ (exemple n° de commande)
    - plusieurs champs (exemple n) de commande et code article)
    - tous les champs (de code Agence à Année)
    ?

  5. #5
    Membre averti
    Homme Profil pro
    Etd. Supply Chain Manager
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etd. Supply Chain Manager
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Par défaut
    La comparaison doit se porter sur tous les champs. Excel doit vraiment comparer une ligne à une autre avec tous les champs (de 'Agences' à 'Année').

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Antoine.

    Pour ce code:
    J'ai considéré l'égalité de la concaténation de tous les champs des colonnes A à O (de la colonne 1 à la colonne 15)
    Si l'égalité des lignes balayées est constatée, alors le commentaire s'ajoute en colonne P (colonne 16)

    Attention! Code éventuellement restant à adapter.
    J'ai considéré 2 feuilles S02et S03.
    Si une feuille seule est à compléter au niveau du commentaire, alors la procédure pourrait être argumentée.
    Ceci en lieu et place du balayage des feuilles (variable n)

    Voici, Voilou.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Option Explicit
     
    Public Sub ajout_comment()
     
    Dim n As Byte
    Dim wkvide As Worksheet, wkpréc As Worksheet
    Dim i As Integer, dernvide As Integer
    Dim j As Integer, dernpréc As Integer
     
    'Balayage de la feuille S03 à la feuille S52
    For n = 3 To ThisWorkbook.Worksheets.Count + 1
            'Définition de la feuille à complter
            Set wkvide = Worksheets("S" & Format(n, "0#"))
            With wkvide
                    dernvide = .Cells(.Rows.Count, 1).End(xlUp).Row
            End With
            'Définition de la feuille précédente d'où reporter le commentaire
            Set wkpréc = Worksheets("S" & Format(n - 1, "0#"))
            With wkpréc
                    dernpréc = .Cells(.Rows.Count, 1).End(xlUp).Row
            End With
            'Balayage de toutes les lignes à compléter
            For i = 2 To dernvide
                    'Balayage de toutes les lignes d'où reporter le commentaire éventuel
                    For j = 2 To dernpréc
                            'Test égalité concaténation - Voir fonction personnalisée ci-dessous.
                            If concat(wkvide, i) = concat(wkpréc, j) Then
                                    'Information du commentaire
                                    wkvide.Cells(i, 16).Value = wkpréc.Cells(j, 16).Value
                                    Exit For
                            End If
                    Next j
            Next i
            'libération des variables Worksheet
            Set wkvide = Nothing
            Set wkpréc = Nothing
    Next n
     
    End Sub
    Fonction de concaténation:

    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
    Public Function concat(lawks As Worksheet, laligne As Integer) As String
     
    Dim lachaine As String
    Dim col As Byte
     
    'Initialisation de la chaine de concaténation
    lachaine = ""
     
    'Concaténation de  la colonne A à la colonne O
    For col = 1 To 15
            lachaine = lachaine & lawks.Cells(laligne, col)
    Next col
     
    concat = lachaine
     
    End Function

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

Discussions similaires

  1. Boucle copier coller entre 2 fichiers pour chaque ligne
    Par cheerleaders dans le forum Excel
    Réponses: 3
    Dernier message: 19/05/2015, 18h09
  2. Copier coller entre deux feuilles
    Par charlesveillet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/08/2012, 10h59
  3. [XL-2000] Copier coller entre deux classeurs
    Par Juan Jacko dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/03/2011, 11h35
  4. Copier coller entre deux fichiers excel par macro
    Par miss-o-21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2009, 14h45
  5. Réponses: 5
    Dernier message: 16/08/2006, 20h09

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