--> 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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 mars 2013 à 11:57
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)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 mars 2013 à 12:01
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.