|
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
vba excel +liste déroulante [ par flyersgoaler ]
Bonjour, j'ai inséré une liste déroulante dans une cellule sur excel. Chaque nom inséré dans la liste déroulante correspond à mes douze feuilles qui
[VBA / macro excel] remise à vide de cellules à chaque début de mois. [ par hazzel ]
Bonjour à tous,Je souhaiterai savoir s'il était possible à l'ouverture d'un classeur excel, de prendre en compte la date (inscrite dans une cellule vi
ACTIVER modules 2003 dans VBA 2007 [ par vinou19 ]
Bonjour,Je développe en amateur éclairé sous excel et word depuis 23 ans, c'est dire que je me suis adaptée de façon autodidacte à toutes les versions
defilement feuilles excel vba [ par Mitchouboy33 ]
bonjour à tous, voila j'ai un problème dans un de mes codes sous vba, je crée une base de données avec une feuille excel choisie au démarrage. Cette f
VBA Excel Lien hypertect [ par Teleron ]
Bonjour à tous.J'ai inséré un lien hypertexte sur un bouton vers un classeur Excel mais je ne parviens pas à faire ce lien vers une feuille précise de
Passage fonction Excel dans Function VBA [ par naturel45 ]
Bonsoir,je cherche à passer en paramètre une fonction logique Excel dans une function perso;Sous Excel; MaFunction(A1:A9;OU(B1;C1))MaFunction(Plage
convertion 2003-2000 vba recherche de feuille excel [ par jerem5252 ]
Bonjour à tous,j ai un prob avec une partie de code lorsque je passe de excel 2003 à 2000.Dim strmessage As String Dim i As Long Set fs =
|
Téléchargements
Logiciels à télécharger sur le même thème :
|