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 :

Pb Macro de Tri


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 37
    Par défaut Pb Macro de Tri
    Bonjour,

    J'ai réalisé une macro pour les tri de données, je m'explique :
    Dans la feuille Administration, j'ai une liste de personnes avec 5 colonnes de données ;
    Dans la feuille Web, j'ai une liste de personnes avec 4 colonnes de données ;
    Dans la feuille Resultat, je voudrais voir apparaitre la liste des personne qui sont dans la feuille Web mais qui ne sont pas dans la liste de la feuille Administration (avec l'ensemble des informations s'y rapportant (5 colonnes).

    Je pensais que ma macro (Macro1) fonctionnait or je m’aperçois que cela ne va pas : exemple Mlle Corbelle et Passy figure dans la liste de la feuille Resultat.

    Quelqu'un aurait il une idées, une remarque ou un conseil ? SVP Merci

    Voici le code de la macro :

    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 Macro1()
    Dim plgA As Range, plgB As Range, c As Range
    Dim listA(), listB()
    Dim i As Integer, x As Integer, col As Integer
    Dim a As String, b As String, champ As Variant, sp As Variant
     
    Set plgA = Sheets("Administration").Range("A2:A" & Sheets("Administration").Range("A65536").End(xlUp).Row)
    Set plgB = Sheets("web").Range("A2:A" & Sheets("web").Range("A65536").End(xlUp).Row)
    col = Sheets("Administration").Range("IV1").End(xlToLeft).Column
     
    For Each c In plgA
    'CONCATENER chaque cellule Colonne 1 à 4 de chaqu'une des lignes des tableau A et B
    ' et renseigne les listA et lisB, pour éviter les doublons
        For i = 1 To col
        a = a & "," & Sheets("Administration").Cells(c.Row, i)
        b = b & "," & Sheets("web").Cells(c.Row, i)
        Next
                ReDim Preserve listA(x)
          listA(x) = Right(a, Len(a) - 1)
          a = ""
          ReDim Preserve listB(x)
          listB(x) = Right(b, Len(b) - 1)
          b = ""
          x = x + 1
    Next
     
    'vérifier si chaque item(champ) de listA est présente dans listB
    'si non présente mets l'information sur la feuille résultat en commencant à la
    'ligne 2
     
    x = 2
    For Each champ In listA()
    If champ = Empty Then Exit Sub
      If IsError(Application.Match(champ, listB, 0)) Then
      sp = Split(champ, ",")
        For i = 0 To col - 1
            Sheets("résultat").Cells(x, i + 1) = sp(i)
        Next
        x = x + 1
      End If
    Next
    Ci joint le fichier exemple
    Raphael
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant de joindre un fichier dans ton premier message, affiche plutôt le code de ta macro entre les balises prévues à cet effet.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ton erreur vient de la ligne 34
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsError(Application.Match(champ, listB, 0)) Then
    Tu utilises la fonction Match qui est la fonction VBA qui simule la fonction (Equiv/Match) de recherche Excel donc qui doit être utilisée sur une plage de cellules (1 colonne ou 1 ligne).
    Sa syntaxe complète est Application.WorksheetFunction.Match
    Extrait de l'aide en ligne
    Renvoie la position relative d'un élément dans une matrice (matrice : permet de créer des formules uniques permettant d’obtenir plusieurs résultats et qui agissent sur un groupe d’arguments répartis dans des lignes et des colonnes. Une plage matricielle partage une même formule tandis qu’une constante matricielle est un groupe de constantes qui sert d’argument.), qui correspond à une valeur spécifiée dans un ordre spécifié. Utilisez la fonction MATCH au lieu de l'une des fonctions LOOKUP lorsque vous avez besoin de la position d'un élément dans une plage au lieu de l'élément proprement dit.
    Or, tu fais une recherche sur la variable tableau listB et pas sur une plage de cellules. Il y a donc incompatibilité et tu aura toujours une erreur.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 37
    Par défaut Prob de macro de tri
    Merci pour cette explication.

    Aurais tu une solution pour obtenir le résultat (comparaison des deux listes et affichage des infos n'existant que dans une) que je souhaite ? SVP Merci

    Raphaël

  5. #5
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Voici une solution.
    A la lecture de tes explications, j’ai compris qu’il fallait comparer les données des 5 premières colonnes de la feuille Administration avec les 5 premières colonnes de la feuille Web et qu’il fallait inscrire dans la feuille résultat la liste des personne qui sont dans la feuille Administration mais qui ne sont pas dans la feuille Web, avec l'ensemble des informations s'y rapportant (6 colonnes).

    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
    Option Explicit
    Sub Macro1()
    Dim plgA As Range, plgB As Range, c As Range, Cel As Range
    Dim Idem As Boolean
    Dim i As Byte
    Dim LigneAjout As Long
        Set plgA = Sheets("Administration").Range("A2:A" & Sheets("Administration").Range("A65536").End(xlUp).Row)
        Set plgB = Sheets("web").Range("A2:A" & Sheets("web").Range("A65536").End(xlUp).Row)
        Sheets("résultat").Range("A1").CurrentRegion.Offset(1, 0).ClearContents
        For Each Cel In plgA
            Idem = False
            Set c = plgB.Find(Cel.Value, LookIn:=xlValues)
            If Not c Is Nothing Then
                Idem = True
                For i = 1 To 4
                    If c.Offset(0, i) <> Cel.Offset(0, i) Then Idem = False
                Next i
            End If
            If Not Idem Then
                LigneAjout = Sheets("résultat").Range("A65536").End(xlUp).Row + 1
                Cel.Resize(, 6).Copy Destination:=Sheets("résultat").Range("A" & LigneAjout)
            End If
            Set c = Nothing
        Next Cel
        Set plgA = Nothing
        Set plgB = Nothing
    End Sub
    Cordialement.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 37
    Par défaut Macro Tri
    Bonjour,

    Merci pour ta reponse mais cela ne semble pas fonctionner :

    Par exemple je ne devrais pas retrouver
    Corbel
    Lagarde
    Passy

    dans la page resultats pourtant je les retrouve.

    Je ne comprends pas pourquoi ?

    As tu une idée

    Ci joint mon fichier

    SVP Merci

    Raphael
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [XL-2007] macro pour tri
    Par Bernardf57 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 06/02/2011, 12h15
  2. [OpenOffice][Tableur] Macro de tri d'une zone
    Par coachllb dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 18/02/2010, 18h02
  3. Macro de tri & effacement des lignes inutiles
    Par malabarbe dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 14/09/2008, 22h36
  4. Faire une macro de tri
    Par willyol3 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/04/2008, 21h08
  5. " Excel" : Macro pour tri trois variables
    Par jeremtokyo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/06/2007, 12h37

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