Problèmes lignes vides et doublons
H
Bonjour à tous :)
Je vous implore votre aide car je cherche désespérément une solution pour supprimer automatiquement les doublons ou les lignes nulles ou égales à 0.
Je souhaiterai exécuter les formules présentes dans "lat num" et "pilo num" en supprimant automatiquement les doublons (présents dans les colonnes B de "lat num" et "pilo num") et les lignes nulles ou égales a 0.
Je vous joint mon fichier ici présent.
Je remercie la communauté par avance de votre aide en vous souhaitant une bonne journée ;)
Bonjour Hugo, bonjour le forum,
Essaie le code ci-dessous. Il ne te restera plus qu'à supprimer les colonnes A et B après vérification...
Sub Macro1()
Dim NdO As Byte 'déclare la variable NdO (Nombre d'Onglets)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
For NdO = 1 To 2 'boucle 1 : sur deux onglets
Select Case NdO 'agit en fonction de Ndo
Case 1 'cas 1
Set O = Worksheets("lat num") 'définit l'onglet O
Case 2 'cas 2
Set O = Worksheets("pilo num") 'redéfinit l'onglet O
End Select 'fin de l'action en fonction de Ndo
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 2) <> "" Then D(TV(I, 2)) = "" 'alimente le dictionnaire D avec les données non vides en colonne 2 du tableau des valeurs TV
Next I 'prochaine ligne de la boucle 2
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
K = 1 'initialise la variable K
For J = 0 To UBound(TMP) 'boucle 3 : sur tous les éléments J du tableau temporaire TMP
For I = 2 To UBound(TV, 1) 'boucle 4 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If Not TV(I, 2) = "0;0;0;0" Then 'condition 1 : si la valeur de la donnée ligne I colonne 2 de TV n'est pas "0;0;0;0"
If TV(I, 2) = TMP(J) Then 'condition 2 : si la valeur de la donnée ligne I colonne 2 de TV est égale à l'élément J de la boucle 3
ReDim Preserve TL(1 To 2, 1 To K) 'redimensionne le tableau des lignes TL (2 ligne, K colonnes)
TL(1, K) = TV(I, 1) 'récupère dans la ligne 1 de TL la donnée en colonne 1 de TV (=>Transposition)
TL(2, K) = TV(I, 2) 'récupère dans la ligne 2 de TL la donnée en colonne 2 de TV (=>Transposition)
K = K + 1 'incrémente K
Exit For 'sort de la boucle 4 (une seule ligne est stockée dans TL)
End If 'fin de la condition 2
End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle 4
Next J 'prochaine élément de la boucle 3
O.Range("A1:B1").Copy 'copie la plage A1:B1
O.Range("C1").PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes en C1
O.Range("A1:B1").Copy O.Range("C1") ''copie la plage A1:B1 et la colle en C1
O.Range("C2").Resize(UBound(TL, 2), 2).Value = Application.Transpose(TL) 'renvoie en C2 redimensionnée le tableau TL transposé
Next NdO 'prochain onglet de la boucle 1
End Sub