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

Excel Discussion :

Comparer toutes les lignes d'un tableau


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Pharmacien
    Inscrit en
    Novembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Comparer toutes les lignes d'un tableau
    Bonjour à tous,

    Dans le cadre d'un projet, j'aurais besoin de comparer l'ensemble des lignes d'un tableau. Ce tableau à double entrée constitue une assignation de tâches à des groupes de fonctions au sein de l'entreprise ; les cellules contiennent donc soit la valeur "OUI" si la tâche doit être assignée au groupe de fonction présent en colonne, soit la valeur "NON" dans le cas contraire.

    Mon but est de déterminer quelles sont les lignes qui contiennent les mêmes valeurs pour chacune des colonnes ; en d'autres termes, de déterminer quelles sont les tâches qui sont assignées aux mêmes groupes de fonctions.

    Par exemple :

    Nom : Capture.PNG
Affichages : 654
Taille : 4,1 Ko

    J'aimerai qu'Excel me dise que les tâches 1 et 3 sont assignées aux mêmes fonctions, et que, si possible, il mette en couleur/regroupe les tâches qui sont assignées aux mêmes fonctions.

    Mon objectif final est de créer des groupes de tâches afin d'éviter une assignation de tâches 1 par 1 dans l'outil informatique dédié à ces assignations.


    Je ne sais pas si cela est réalisable, car je n'ai trouvé aucune réponse à ce sujet sur le net... C'est pour cela que je me permets de poster cette discussion !


    Je remercie d'avance chaleureusement les personnes qui prendront le temps de me répondre.


    Joyeuses fêtes de fin d'années !

  2. #2
    Expert éminent
    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 : 66
    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
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Possible mais complexe en VBA.
    Sur Excel tableur,
    Créer une colonne E, chaque enregistrement étant la concaténation des colonnes B, C et D..
    Créer une colonne F, NB.SI de chaque enregistrement de la colonne E
    Mise en forme conditionnelle sur les colonnes adéquates en utilisant une formule référencée sur la colonne F.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Employer
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Employer
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Voila un bout de code qui te met les ligne ayant les même ligne contenant oui et non en couleur (Bleu, parsque j'aime pas le rouge, et surtout j'ai pas eu envie de chercher l'index), mais c'est du VBA, a metre dans le code d'un bouton par exemple...

    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
     
        Dim LignePrem As Integer
        Dim LigneDeux As Integer
        Dim ValeurPrem As String
        Dim ValeurDeux As String
        'Sous excel la première ligne est 1, et première colonne commence à 1
        LignePrem = 2 'car la premiere cellule est probablement vide
     
        'boucle pour enlever les couleur avant le test
        While Sheets("Feuil1").Cells(LignePrem, 1).Value & "" <> ""
            Sheets("Feuil1").Rows(LignePrem).Interior.ColorIndex = xlColorIndexNone
            LignePrem = LignePrem + 1
        Wend
     
        LignePrem = 2
        'boucle sur toute les valeurs de la colonne 1 , et quand c'est vide , je sors de la boucle
        While Sheets("Feuil1").Cells(LignePrem + 1, 1).Value & "" <> "" '(+1 car je veux sortir à l'avant-derniere ligne)
     
           'on recup les valeur ouinon de chaque cellule de la ligne en cours d'annalyse
           'le trim serre enleve les espace avant et apres le ouinon
           ValeurPrem = Trim(Sheets("Feuil1").Cells(LignePrem, 2).Value) & Trim(Sheets("Feuil1").Cells(LignePrem, 3).Value) & Trim(Sheets("Feuil1").Cells(LignePrem, 4).Value)
     
           LigneDeux = LignePrem + 1 'pour commencer avec la ligne suivant la première
     
           While Sheets("Feuil1").Cells(LigneDeux, 1).Value & "" <> ""
     
              'on recup les valeur ouinon de chaque cellule de la ligne que l'on va comparé
              'le trim serre enleve les espace avant et apres le ouinon
              ValeurDeux = Trim(Sheets("Feuil1").Cells(LigneDeux, 2).Value) & Trim(Sheets("Feuil1").Cells(LigneDeux, 3).Value) & Trim(Sheets("Feuil1").Cells(LigneDeux, 4).Value)
     
              'je compare les valeurs , et si je trouve la meme valeur c'est que les tache sont les meme
              'le ucase sers a mettre tout en majuscule.
              If UCase(ValeurPrem) = UCase(ValeurDeux) Then
     
                'met les deux ligne identique en couleur
                Sheets("Feuil1").Rows(LignePrem).Interior.ColorIndex = 5
                Sheets("Feuil1").Rows(LigneDeux).Interior.ColorIndex = 5
     
              End If
     
              LigneDeux = LigneDeux + 1 'on incrémente pour passer à la prochaine ligne
           Wend
     
     
           LignePrem = LignePrem + 1 'on incrémente pour passer à la prochaine ligne
        Wend

  4. #4
    Membre à l'essai
    Homme Profil pro
    Pharmacien
    Inscrit en
    Novembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Bonjour Marcel ,

    Merci beaucoup pour votre réponse. Cela m'a permis de mettre en valeur les lignes qui sont identiques. Je me rends cependant compte grâce à cela que sur 140 lignes, 120 sont uniques... Ma constitution de groupes de tâches va donc s'avérer plus compliquée que prévu !

    Cela m'amène à une seconde question : est-il possible d'intégrer un critère disant que des lignes sont identiques à 1 ou 2 cellules près ? Je ne sais pas s'il est possible de demander une telle réflexion à un ordinateur, mais qui ne tente rien n'a rien

    Merci d'avance une nouvelle fois !!

  5. #5
    Membre à l'essai
    Homme Profil pro
    Pharmacien
    Inscrit en
    Novembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Bonjour Macstorm,

    Merci beaucoup pour le temps que tu m'as accordé. J'ai essayé le code que tu m'as fourni ; une erreur apparaît : "Erreur de compilation : instruction incorrecte à l'extérieur d'une procédure".

    Je suis très loin d'être un expert en VBA (les seules macros que j'ai faites l'ont été via le suivi scrupuleux de tutos) donc je fais probablement une mauvaise manip'.

    En pièce jointe, un extrait anonymisé de mon tableur de travail... Si cela peut aider pour comprendre le problème.

    Merci du temps que vous m'accordez !
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent
    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 : 66
    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
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut bilbilou,

    est-il possible d'intégrer un critère disant que des lignes sont identiques à 1 ou 2 cellules près
    Désolé mais tu oublies.
    Excel est un tableur, et ce genre de scénario à gérer par VBA devient vite une usine à gaz.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Employer
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Employer
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Voila le même code, avec petite amélioration pour tes modification si besoin. Avant, le code était pour 3 colonnes contenant les oui/non, mais dans l'exemple de ton lien, il y a 6 colonne, de plus elle ne sont pas en colonne 2, 3, 4, mais en colonne 4 à 9. Deuxième bug, concernait le nom de la feuil1, tu doit avoir une version anglaise d'excel, et par défaut en anglais c'est Sheet1 et non pas Feuil1 qui est en français par défaut.

    Donc ajout de quelque variable supplémentaire pour si tu as besoin de modifié certaine valeur sans avoir à les chercher trop longtemps.

    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
     
        Dim LignePrem As Integer
        Dim LigneDeux As Integer
        Dim ValeurPrem As String
        Dim ValeurDeux As String
        Dim ColDeb As Integer
        Dim ColFin As Integer
        Dim i As Integer
        Dim NomDeLaFeuille As String
        Dim Couleur As Integer
        'Defini l'index de couleur à utilisé (le 5 = Bleu Foncé, le 3 = Rouge) et sur le net il existe des tableaux de se genre d'info
        Couleur = 3
        'defini une variable qui contien le nom de la feuille car chez moi la feuille s'appelle "Feuil1", et
        'comme tu doit avoir une version anglaise de l'excel, elle s'appellerio Quesak... heuuu.. "Sheet1"
        NomDeLaFeuille = "Sheet1"
        ColDeb = 4 'defini le numero de colonne contenant le premier oui/non
        ColFin = 9 'defini le numero de colonne contenant le dernier oui/non
     
        'Sous excel la première ligne est 1, et première colonne commence à 1
        LignePrem = 2 'car la premiere cellule est probablement vide
     
        'boucle pour enlever les couleur avant le test
        While Sheets(NomDeLaFeuille).Cells(LignePrem, 1).Value & "" <> ""
            Sheets(NomDeLaFeuille).Rows(LignePrem).Interior.ColorIndex = xlColorIndexNone
            LignePrem = LignePrem + 1
        Wend
     
        LignePrem = 2
        'boucle sur toute les valeurs de la colonne 1 , et quand c'est vide , je sors de la boucle
        While Sheets(NomDeLaFeuille).Cells(LignePrem + 1, 1).Value & "" <> "" '(+1 car je veux sortir à l'avant-derniere ligne)
     
           'on recup les valeur ouinon de chaque cellule de la ligne en cours d'annalyse
           'le trim serre enleve les espace avant et apres le ouinon
           ValeurPrem = ""
           For i = ColDeb To ColFin
               'grace à cette boucle je reduit la longeur de la ligne qui originalement aurait été:
               'ValeurPrem = Trim(Sheets(NomDeLaFeuille).Cells(LignePrem, 4).Value) & Trim(Sheets(NomDeLaFeuille).Cells(LignePrem, 5).Value) & Trim(Sheets(NomDeLaFeuille).Cells(LignePrem, 6).Value) & Trim(Sheets(NomDeLaFeuille).Cells(LignePrem, 7).Value) & Trim(Sheets(NomDeLaFeuille).Cells(LignePrem, 8).Value) & Trim(Sheets(NomDeLaFeuille).Cells(LignePrem, 9).Value)
               ValeurPrem = ValeurPrem & Trim(Sheets(NomDeLaFeuille).Cells(LignePrem, i).Value)
           Next i
     
           LigneDeux = LignePrem + 1 'pour commencer avec la ligne suivant la ligne en cour d'analyse
     
           While Sheets(NomDeLaFeuille).Cells(LigneDeux, 1).Value & "" <> ""
     
                'on recup les valeur ouinon de chaque cellule de la ligne que l'on va comparé
                'le trim serre enleve les espace avant et apres le ouinon
                ValeurDeux = ""
                For i = ColDeb To ColFin
                    ValeurDeux = ValeurDeux & Trim(Sheets(NomDeLaFeuille).Cells(LigneDeux, i).Value)
                Next i
     
              'je compare les valeurs , et si je trouve la meme valeur c'est que les tache sont les meme
              'le ucase sers a mettre tout en majuscule.
              If UCase(ValeurPrem) = UCase(ValeurDeux) Then
     
                'met les deux ligne identique en couleur
                Sheets(NomDeLaFeuille).Rows(LignePrem).Interior.ColorIndex = Couleur
                Sheets(NomDeLaFeuille).Rows(LigneDeux).Interior.ColorIndex = Couleur
     
              End If
     
              LigneDeux = LigneDeux + 1 'on incrémente pour passer à la prochaine ligne
           Wend
     
     
           LignePrem = LignePrem + 1 'on incrémente pour passer à la prochaine ligne
        Wend
        'affiche un message de fin de traitement
       MsgBox ("Analyse terminée")
    Voilà en prime une version de ton tableau d'exemple (Attention: Fichier xlsm) avec l'activation par double-clik dans la cellule "Nom de la tâche" (Ligne1Colonne3).

    Extrait tableau anon.xlsm

    Comme tu débute, je te conseille quand même de prendre le temps de bien comprendre ce code qui est écrit avec le moins de raccourci possible, ce qui facilite la compréhension pour les non initiés.

    Je pense que pour ta deuxième demande, cela nécessiterait d'analyser chaque cellule oui/non individuellement, et d'avoir un compteur de différence lors de la comparaison. Donc deux boucle supplémentaire imbriquées... ce qui devient vite horrible à s'y retrouver quand on débute, mais pas impossible avec du temps et de la patience.

  8. #8
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 416
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 416
    Points : 16 259
    Points
    16 259
    Par défaut
    Bonjour à tous

    C'est faisable relativement simplement selon le principe des requêtes mais tout dépend du nombre de fonctions. Est-ce 3 ou bien davantage ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

Discussions similaires

  1. [WD-2010] Boucle qui ne supprime pas toutes les lignes d'un tableau
    Par Amos81 dans le forum VBA Word
    Réponses: 2
    Dernier message: 01/08/2018, 21h03
  2. [XL-2010] Info applicables à toutes les lignes d'un tableau
    Par BensiBen dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/01/2015, 20h47
  3. Tableau dynamique+Récupérer id de toutes les lignes
    Par tidus_6_9_2 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 01/09/2010, 10h39
  4. Réponses: 0
    Dernier message: 26/05/2010, 15h38
  5. Supprimer toutes les lignes et colonnes d'un tableau
    Par pekka77 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/12/2005, 11h26

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