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 :

Macro de comparaison, tri, traitement de deux tableaux


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut Macro de comparaison, tri, traitement de deux tableaux
    Bonjour, bonsoir,

    Je viens chercher quelques conseils dans le but d'améliorer une macro. Je fais quelques choses qui pour l'instant semble fonctionner mais c'est vraiment du bricolage et j'aimerais avoir un peu d'aide pour faire quelques choses de plus "robuste".

    Alors je vous explique ce que j'essaie de faire. J'ai fait un fichier exemple simplifié des mes tableaux avec ma macro que j'ai mis en pièce jointe.

    Toutes les semaines, je reçois un tableau Excel avec un certain nombre de lignes. Chaque semaine, je veux pouvoir comparer mes deux tableaux et faire ressortir les changements.

    - Pour cela, je copie sur une première feuille mes deux tableaux côte à côte.

    - Ma colonne id est un numéro qui ne change jamais, elle me permet d'associer la ligne de la semaine S-1 à la semaine S.
    J'ai une premier macro comparer (bouton Macro) qui me permet de faire le tri de mettre mes lignes les unes en face par rapport à ce numéro id.

    - Ensuite une seconde macro traitement va mettre en couleur les nouvelles lignes (vert), les lignes supprimées (jaune) et les modifications dans les noms ou date (orange).

    Je compte aussi faire apparaitre le nouveau tableau (celui créer par la macro) sur une seconde feuille, mais je ne pense pas que la difficulté soit ici.
    Comme je vous l'ai dit, c'est du bricolage, je suis donc preneur de tous conseils et avis me permettant de faire quelques choses qui tient debout.

    En vous remerciant,

    Neversoft
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 104
    Par défaut
    Bonjour,

    Peux-tu nous envoyer le code (en balise CODE), en effet, presque personne n'ouvre de fichier joint (surtout xlsm) pour des raisons de sécurité :

    https://www.developpez.net/forums/d8...s-discussions/

    En plus tu aura plus de réponse :o)

    Bonne journée

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    Les voici :

    Comparer tableaux
    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
    Sub comparer()  
     
        Dim l, ll As Integer 'ligne colonne 1 et 5'
        Dim nbl, nbll As Integer
        Dim sup As Integer
     
    'nombre de lignes'
        nbl = Application.CountA(Columns(1)) ' si lignes vide en en tete, ajouter "+ ...'
        nbll = Application.CountA(Columns(5))
        nbc = Application.CountA(Rows(5)) + 1
     
        For l = 3 To nbl 'recopier les lignes du premier tableau'
            Cells(l, 10) = Cells(l, 1)
            Cells(l, 11) = Cells(l, 2)
            Cells(l, 12) = Cells(l, 3)
            Cells(l, 13) = Cells(l, 4)
     
            For ll = 3 To nbll 'chercher la ligne correspondante dans second tableau et recopier'
                If Cells(l, 1) = Cells(ll, 5) Then
                    Cells(l, 14) = Cells(ll, 5)
                    Cells(l, 15) = Cells(ll, 6)
                    Cells(l, 16) = Cells(ll, 7)
                    Cells(l, 17) = Cells(ll, 8)
                    Cells(ll, 9) = "x"
     
                End If
            Next
        Next
     
        sup = 1
        For l = 3 To nbll 'ajouter les lignes nouvelles'
            If Cells(l, 9) <> "x" Then
                Cells(nbl + sup, 14) = Cells(l, 5)
                Cells(nbl + sup, 15) = Cells(l, 6)
                Cells(nbl + sup, 16) = Cells(l, 7)
                Cells(nbl + sup, 17) = Cells(l, 8)
                sup = sup + 1
            End If
        Next
     
    End Sub
    Traiter info
    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
    Sub traitement()
     
    Dim l, ll, c As Integer
    Dim nbl, nbll As Integer
     
    For l = 3 To nbll + 20
        For c = 10 To 13 'Modifié'
            If Cells(l, c) <> Cells(l, c + 4) Then
                Cells(l, c).Interior.ColorIndex = 46
                Cells(l, c + 4).Interior.ColorIndex = 46
                Cells(l, 18) = "Modifié"
            End If
        Next
        If Cells(l, 10) = "" And Cells(l, 14) <> "" Then 'Nouveau'
            For c = 10 To 17
                Cells(l, c).Interior.ColorIndex = 43
                Cells(l, 18) = "Nouveau"
            Next
        End If
        If Cells(l, 10) <> "" And Cells(l, 14) = "" Then 'Supprimé'
            For c = 10 To 17
                Cells(l, c).Interior.ColorIndex = 44
                Cells(l, 18) = "Supprimé"
            Next
        End If      
    Next 
    End Sub

Discussions similaires

  1. [awk] Comparaison par colonne de deux tableaux
    Par luckythrice dans le forum Shell et commandes GNU
    Réponses: 18
    Dernier message: 05/09/2015, 10h35
  2. [XL-2003] Comparaison de nombres entre deux tableaux
    Par boxtom dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/07/2010, 15h12
  3. PL/SQL COMPARAISON DE DEUX TABLEAUX APRES BULK
    Par mimi_été dans le forum PL/SQL
    Réponses: 5
    Dernier message: 30/06/2009, 12h14
  4. [Tableaux] Problème tri de tableau à deux dimensions
    Par squall62 dans le forum Langage
    Réponses: 21
    Dernier message: 24/05/2006, 18h18
  5. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Langage
    Réponses: 8
    Dernier message: 27/12/2005, 14h27

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