Macro Tri tableau Excel ! Help :) [Résolu]

Signaler
-
 Dvr77X -
Salut à tous !

--> j'ai pas trouvé de thème VBA, donc je l'ai mis en VB6/autre par défaut.

J’ai des extractions Excel qui tombent fréquemment et je dois faire un peu de tri ! Seulement voilà, mes cours de VB ça remonte à belle lurette :D
Je me suis remis un peu dedans, mais plus j’avance, plus je me dis que sans aide, j’arriverai à rien !

J’un un tableau du style de celui ci-dessous (Version très raccourcis).

1 – je voudrais recopier ce tableau dans une feuille en supprimant les « doublonds ». Il y a des numéros d’appels identiques en colonne A.
Je veux garder uniquement le première ligne rencontrée pour chaque appel.

2 – Ensuite dans une autre feuille, j’aimerais ressortir uniquement les lignes ou la date en colonne F et inférieur ou égale a la date « date ref ».

J’ai un peu l’algo en tête, le problème, c’est la conversion :D

Si une âme généreuse peut m’orienter ! Après je modifierai à ma sauce et pourrai comprendre ce que je fais.

Merci !!

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut

En fait, il te suffit de parcourir les données actuelles pour décider, ligne après ligne, si la donnée doit être copiée ou non.
Pour faciliter les choses, on va partir du principe que tes données sont déjà ordonnées, c'est à dire que les textes de la colonne A (avec laquelle tu veux faire ce tri) vont de A à Z.
Créer une nouvelle feuille, ça, c'est facile à faire (voir enregistreur de macros)
On va supposer que les nouvelles données à coller dans la nouvelle feuille commencent à la ligne 4 (comme sur l'original).
Pour parcourir les cellules de la colonne et ne copier que la première de chaque item de la colonne A :
    Dim oDestination    As Range
    Dim oCellule        As Range
    Dim sAppelMemo      As String
    Dim r               As Long
    
    ' Destination de la première donnée
    Set oDestination = Sheets("Feuil2").Range("A4")
    ' Dernière cellule lue = rien
    sAppelMemo = ""
    ' Enumération des données actuelles
    For Each oCellule In Sheets("Feuil1").Range("A4:A9999")
        ' On stoppe la boucle dès qu'on rencontre une ligne vide
        If oCellule.Text = vbNullString Then Exit For
        If oCellule.Text <> sAppelMemo Then
            ' Cellule lue différente de la précédente : On la traite
            ' Recopie des données - On suppose qu'on recopie 10 colonnes
            '   de plus que la colonne A (de A à K)
            For r = 0 To 10
                oDestination.Offset(0, r).Value = oCellule.Offset(0, r).Value
            Next r
            ' Mémo du texte pour la prochaine ligne
            sAppelMemo = oCellule.Text
            ' Décalage de ligne de destination
            Set oDestination = oDestination.Offset(1, 0)
        End If
    Next

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Pour ta question "2", le principe est le même : énumérer ligne après ligne et faire le test d'égalité entre les contenus des cellules.
Reprends la même structure.
Merci, super ! a partir de là, je devrais m'en sortir.
Et merci pour les explications intégrés également, cela m'a bien aidé à comprendre ;)

Je valide la réponse :)