|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
MACRO COMPLÉMENTAIRE DE DÉDOUBLONNAGE POUR EXCEL
Information sur la source
Description
Cette macro permet de dédoublonner une base excel en fonction de colonnes ou en-têtes de colonnes choisies par l'utilisateur. Le classeur contient : * un menu "Dédoublonnage" qui se met en place à l'ouverture (permettant de choisir le dédoublonnage en prenant en compte ou non la première ligne), * un formulaire de selection permettant de sélectionner la ou les colonnes à prendre en compte et de choisir l'ordre dans lequel les colonnes seront triées, (il est autonome et peut être utilisé dans un autre projet) * du code VBA dont le code servant au dédoublonnage (dans le module "Dedoublonnage") présenté ci-après peut être inclu dans un autre projet.
Source
- '*********************************************************
- ' Une partie du code qui peut être utilisée séparément *
- ' avec un exemple d'utilisation *
- '*********************************************************
- Sub Exemple()
- 'Pour inséere cette macro à un autre projet copier ce module
- 'appeler la procédure suivante
- 'Dedoublonnage(ListCol, LigneEnTete)
- 'ListCol : tableau contenant les numéros de colonne
- ' si une seule colonne x utiliser quand-même un tableau : array(x)
- 'LigneEnTete : True si la première ligne est une ligne d'entête
- ' False s 'il n'y a pas de ligne d'entête
- 'L'exemple suivant fait le dédoublonnage sur les colonnes 1 et 3
- 'la première ligne étant l'entête
- 'La première clé de tri est la colonne 1 et la seconde la colonne 3
- Call Dedoublonnage(Array(1, 3), True)
- End Sub
- Sub ProcDedoublonnage(ListCol, LigneEnTete) 'LigneEnTete = True ou False
- Cells(1, 1).Select
- ListCol2 = IntervertionTab(ListCol)
- If LigneEnTete Then
- NumLig = 2
- Else
- NumLig = 1
- End If
-
- NoLgnFin = ActiveSheet.UsedRange.Rows.Count
- NoColFin = ActiveSheet.UsedRange.Columns.Count
- Min = LBound(ListCol2)
- Max = UBound(ListCol2)
- ReDim TabTest1(Max - Min)
- ReDim TabTest2(Max - Min)
- For I = Min To Max
- Call TriTab(ListCol2(I), NumLig)
- Next I
- ' Tag des Doublons
- For Ligne = NumLig To NoLgnFin - 1
- CptColTest = Min
- For CptTabTest = LBound(TabTest1) To UBound(TabTest1)
- TabTest1(CptTabTest) = Cells(Ligne, ListCol2(CptColTest))
- TabTest2(CptTabTest) = Cells(Ligne + 1, ListCol2(CptColTest))
- CptColTest = CptColTest + 1
- Next CptTabTest
- VarEstDoublon = EstDoublon(TabTest1, TabTest2)
- If VarEstDoublon Then
- Cells(Ligne + 1, NoColFin + 1).Value = "Doublon"
- Mini1Doublon = True
- End If
- Next Ligne
- ' Suppression des doublons
- If Mini1Doublon Then
- Call TriTab(NoColFin + 1, NumLig)
- LigDoub = NumLig
- Do While Cells(LigDoub + 1, NoColFin + 1).Value = "Doublon"
- LigDoub = LigDoub + 1
- Loop
- Range(Cells(NumLig, NoColFin + 1), Cells(LigDoub, NoColFin + 1)).EntireRow.Delete 'Select
- End If
- End Sub
- Sub TriTab(NumCol, NumLig)
- If NumLig = 2 Then
- Entete = xlYes
- Else
- Entete = xlGuess
- End If
- Selection.Sort Key1:=Cells(NumLig, NumCol), Order1:=xlAscending, Header:=Entete, _
- OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
- End Sub
- Function EstDoublon(Tab1, Tab2)
- EstDoublon = True
- NbChamp = UBound(Tab1)
- If NbChamp = UBound(Tab2) Then
- I = 0
- Do
- If Tab1(I) <> Tab2(I) Then
- EstDoublon = False
- End If
- I = I + 1
- Loop While EstDoublon = True And I <= NbChamp
- Else
- EstDoublon = False
- End If
- End Function
- Function IntervertionTab(Tableau)
- Min = LBound(Tableau)
- Max = UBound(Tableau)
- Nb = (Max - Min + 1) \ 2
- For I = Min To Nb - 1 + Min
- VarIntermed = Tableau(I)
- Tableau(I) = Tableau(Max - I + Min)
- Tableau(Max - I + Min) = VarIntermed
- Next I
- IntervertionTab = Tableau
- End Function
-
'*********************************************************
' Une partie du code qui peut être utilisée séparément *
' avec un exemple d'utilisation *
'*********************************************************
Sub Exemple()
'Pour inséere cette macro à un autre projet copier ce module
'appeler la procédure suivante
'Dedoublonnage(ListCol, LigneEnTete)
'ListCol : tableau contenant les numéros de colonne
' si une seule colonne x utiliser quand-même un tableau : array(x)
'LigneEnTete : True si la première ligne est une ligne d'entête
' False s 'il n'y a pas de ligne d'entête
'L'exemple suivant fait le dédoublonnage sur les colonnes 1 et 3
'la première ligne étant l'entête
'La première clé de tri est la colonne 1 et la seconde la colonne 3
Call Dedoublonnage(Array(1, 3), True)
End Sub
Sub ProcDedoublonnage(ListCol, LigneEnTete) 'LigneEnTete = True ou False
Cells(1, 1).Select
ListCol2 = IntervertionTab(ListCol)
If LigneEnTete Then
NumLig = 2
Else
NumLig = 1
End If
NoLgnFin = ActiveSheet.UsedRange.Rows.Count
NoColFin = ActiveSheet.UsedRange.Columns.Count
Min = LBound(ListCol2)
Max = UBound(ListCol2)
ReDim TabTest1(Max - Min)
ReDim TabTest2(Max - Min)
For I = Min To Max
Call TriTab(ListCol2(I), NumLig)
Next I
' Tag des Doublons
For Ligne = NumLig To NoLgnFin - 1
CptColTest = Min
For CptTabTest = LBound(TabTest1) To UBound(TabTest1)
TabTest1(CptTabTest) = Cells(Ligne, ListCol2(CptColTest))
TabTest2(CptTabTest) = Cells(Ligne + 1, ListCol2(CptColTest))
CptColTest = CptColTest + 1
Next CptTabTest
VarEstDoublon = EstDoublon(TabTest1, TabTest2)
If VarEstDoublon Then
Cells(Ligne + 1, NoColFin + 1).Value = "Doublon"
Mini1Doublon = True
End If
Next Ligne
' Suppression des doublons
If Mini1Doublon Then
Call TriTab(NoColFin + 1, NumLig)
LigDoub = NumLig
Do While Cells(LigDoub + 1, NoColFin + 1).Value = "Doublon"
LigDoub = LigDoub + 1
Loop
Range(Cells(NumLig, NoColFin + 1), Cells(LigDoub, NoColFin + 1)).EntireRow.Delete 'Select
End If
End Sub
Sub TriTab(NumCol, NumLig)
If NumLig = 2 Then
Entete = xlYes
Else
Entete = xlGuess
End If
Selection.Sort Key1:=Cells(NumLig, NumCol), Order1:=xlAscending, Header:=Entete, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
Function EstDoublon(Tab1, Tab2)
EstDoublon = True
NbChamp = UBound(Tab1)
If NbChamp = UBound(Tab2) Then
I = 0
Do
If Tab1(I) <> Tab2(I) Then
EstDoublon = False
End If
I = I + 1
Loop While EstDoublon = True And I <= NbChamp
Else
EstDoublon = False
End If
End Function
Function IntervertionTab(Tableau)
Min = LBound(Tableau)
Max = UBound(Tableau)
Nb = (Max - Min + 1) \ 2
For I = Min To Nb - 1 + Min
VarIntermed = Tableau(I)
Tableau(I) = Tableau(Max - I + Min)
Tableau(Max - I + Min) = VarIntermed
Next I
IntervertionTab = Tableau
End Function
Conclusion
Prochainement, présentation du module "Assistant" de cette source.
Historique
- 20 mars 2006 17:49:26 :
- Modification de l'exemple.
- 20 mars 2006 18:02:31 :
- Suppression d'une ligne de code en double (deux fois le même tri)
- 22 mars 2006 10:48:00 :
- Correction d'un bug (une ligne avait été placée en commentaire pour test)
Ajout de deux boutons sur le formulaire : tout selectionner et tout déselectionner.
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
vba excel combobox tri et élimination des doublons [ par alex1512 ]
Bonjour,Je souhaiterais mettre les éléments d'une colonne d'une feuille excel dans une combobox sous vba(jusque la pas de problème) mais je souhaitera
Vba Excel filtre de doublons [ par rvw68 ]
BonjoursJ'ai une plage de données contenant des Nr d'emplacements. une autre dans laquelle j'attribue les emplacements à des personnes. Je veux avoir
Recherche de doublons [ par RUGBYMAN78 ]
Bonjour à tous ! J'ai quelques soucis avec vba sous excel. Tout d'abord, j'ai suivi une initiation à vba , mais voilà déjà 2 ans de passés, et mes sou
faire un projet sur vba excel [ par rabah55 ]
salut , voila j aimerai bien que quel qu un m aide ,en faite j ai un projet a rendre sur visual basic sur excel , et jusqu a present , je ne métrise
VBA excel, identifier une ligne filtrée [ par jepassaisparla ]
bonjour,je cherche une propriété qui me permettrais par code VBA de savoir si une ligne est affichée ou pas à la suite d'un filtre sous excel.merci po
Creation d'un classeur excel sous VBA [ par AmelCres ]
Bonjour ,Je dois créer une macro qui me permet d'avoir un nouveau classeur avec un nom demandé auparavant à l utilisateur.Or, je ne sais pas comment f
Question sur VBA excel [ par eastpeople ]
Bonjour tout le monde, alors je vais tenter de vos expliquer mon problème.J'ai un userform avec une liste deroulante, j'aimerai que quand une valeur e
connexion a une base access 97 via vba 6.3 [ par sourire45 ]
bonjour tout le monde!!!Voila je suis nouvelle dans le forum et débutante en vba..j ai un eapplication créer avec excel 97 et qui fait appel a une bas
Publipostage Excel 2000 vers Word 2000 vba [ par Soulgio ]
Bonjour,J'espère simplement que la réponse à am question n'est pas noyé dans un forum !J ai du développer pour le travail un petit projet excel vba qu
mot de passe VBA Excel [ par vietzims ]
Bonjour à tous. Je souhaiterais avoir le code permettant d'exiger un mot de passe à l'ouverture d'un formulaire (ou userform). J'aimerais également ob
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|