(VBA) Erreur REMOVEDUPLICATES

Hello,

J'ai un souci sur avec la fonction removeduplicates sur plusieurs colonnes ...

Sur une colonne pas de problème mais si je veux le faire sur 2 colonnes erreur execution 9 ...

Peut être c'est mon code avant que voici :

On Error GoTo Erreur
Dim Derniere_Ligne As Integer, Der_Col As Byte, i As Integer, j As Integer
'On supprime toutes les données ecistantes
Derniere_Ligne = Sheets("Ind Evol").Range("AE5").End(xlDown).row
Range("AC5:AI" & Derniere_Ligne).ClearContents
'Creation tableau OSCAR
Derniere_Ligne = Sheets("OSCAR").Range("H6").End(xlDown).row
Der_Col = Sheets("OSCAR").Cells(5, Columns.Count).End(xlToLeft).Column
Dim Tab_OSCAR()
ReDim Tab_OSCAR(Derniere_Ligne, Der_Col)
''On affecte les valeurs de l'onglet "OSCAR" au tableau
For i = 4 To Derniere_Ligne
    For j = 1 To Der_Col
        Tab_OSCAR(i, j) = Sheets("OSCAR").Cells(i + 2, j).Value
    Next j
Next i
'On affecte les valeurs de l'onglet "PARAMETRAGE" au tableau DIV/SU
Derniere_Ligne = Sheets("PARAMETRAGE").Range("C1").End(xlDown).row
Dim Tab_DIV_SU()
ReDim Tab_DIV_SU(Derniere_Ligne, 5)
For i = 2 To Derniere_Ligne
    For j = 3 To 5
        Tab_DIV_SU(i, j) = Sheets("PARAMETRAGE").Cells(i, j).Value
    Next j
Next i
'On affecte les valeurs de l'onglet "PARAMETRAGE" au tableau TU/TM
Derniere_Ligne = Sheets("PARAMETRAGE").Range("A1").End(xlDown).row
Dim Tab_TU_TM()
ReDim Tab_TU_TM(Derniere_Ligne, 2)
For i = 2 To Derniere_Ligne
    For j = 1 To 2
        Tab_TU_TM(i, j) = Sheets("PARAMETRAGE").Cells(i, j).Value
    Next j
Next i
'On insère les TM/SALES/SM dans l'onglet IND EVOL
j = 5
Derniere_Ligne = Sheets("OSCAR").Range("H6").End(xlDown).row
For i = 4 To Derniere_Ligne
    If Tab_OSCAR(i, 33) <> "" Then
        Sheets("Ind Evol").Cells(j, 31).Value = Tab_OSCAR(i, 33)
        Sheets("Ind Evol").Cells(j, 29).Value = Tab_OSCAR(i, 4)
        j = j + 1
    End If
Next i
' On supprime les doublons de TM/SALES de la feuille IND EVOL
'Sheets("Ind Evol").Range("AC5:AE" & Sheets("Ind Evol").Range("AE" & Rows.Count).End(xlUp).row).Select
'Selection.RemoveDuplicates Columns:=Array(1, 3), Header:=xlNo
' Range("AC5:AE5").Select
'    Range(Selection, Selection.End(xlDown)).Select
'    ActiveSheet.Range("$AC$4:$AE$169").RemoveDuplicates Columns:=Array(29, 31), _
'        Header:=xlYes
Sheets("Ind Evol").Select
Sheets("Ind Evol").Range("AC5:AE" & Sheets("Ind Evol").Range("AE" & Rows.Count).End(xlUp).row).RemoveDuplicates Columns:=Array(1, 3), Header:=xlNo

Merci pour votre aide.

R@g

Je ne sais pas si c'est utile mais dans mon module j'ai précisé :

Option base 1

Bonjour,

commence donc par enlever ce On Error GoTo Erreur qui met la poussière sous le tapis et te cache là où il y a problème.

eric

Pas faux

Quand je fais la suppression des doublons via l'enregistreur de macro je n'ai pas de problème.

Comme c'est dans un autre module et ce qui bloque c'est cette partie :

Columns:=Array(1, 3)

, je me demande si l'erreur ne vient pas de ce fameux

Option base 1 

Pour moi Option Base n'a rien à voir.

Là on ne voit pas comment tu as déclaré Columns (type ?). D'ailleurs c'est un mot-clé vba, à éviter.

De plus tu ne fourni même pas le message d'erreur...

Il faut mettre tous tes Dim en haut, pas les disperser dans le code.

eric

Columns n'est pas une variable, c'est ce que donne l'enregistreur de macro.

Je vais faire une capture d'écran dans la journée de l'erreur.

Bonjour,

ça m'étonnerait que l'enregistreur ait écrit ça isolé sur une ligne.

eric

Non il y avait d'autres lignes de code avant.

Je viens de tester c'est bien l'OPTION BASE 1 qui fait planter ...

quand je fais appel à la même procédure (suppression doublons) depuis un autre module ça fonctionne. Quand j'enlève l'option base 1 ça fonctionne...

Mais par contre je ne sais pas comment corriger le problème tout en laissant option base 1 ....

La réponse pour faire fonctionner removeduplicates avec un array dans un module OPTION BASE 1 est :

RemoveDuplicates Columns:=VBA.Array(1, 3)

R@g

Perso je laisse toujours option Base à se valeur par défaut (0).

Et quand j'ai besoin d'une autre valeur je la défini dans Dim tab(1 to 5)

eric

Par exemple j'ai un tableau qui commence à la ligne 4 en entête et les données ligne 5 avec n colonnes et n lignes

Comment tu ferai pour que la ligne 1 dans ton tableau soit la ligne 5 de ton vrai tableau ?

R@g

Il faut donner le contexte complet et le besoin exact.

Là c'est trop vague.

Avec :

dim tab
tab=[A5].resize(y,x).value

tu as un tableau (1 to y, 1 to x) même avec option base 0

Ok eric,

Merci à toi.

Rechercher des sujets similaires à "vba erreur removeduplicates"