IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur 13 lors d'une tentative de suppression de doublons d'une listbox [XL-97]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut Erreur 13 lors d'une tentative de suppression de doublons d'une listbox
    Bonjour à tous.

    J'ai un problème on-ne-peut-plus bizarre, et j'ai eu beau parcourir tous les forums et tutos et tester moult solutions proposées, je ne m'en sors pas :

    J'ai un fichier excel97 qui comporte 3 feuilles (ici seules les feuilles 1 et 3 nous intéressent, mais bon je le mentionne au cas où).
    Lorsque l'utilisateur ouvre la Feuil3, un Userform apparait. Ce Userform a 4 listbox qui sont alimentées par le parcours des colonnes de la feuil1 qui m'intéressent (une listbox = 1 colonne).

    J'en suis à supprimer les doublons dans ces listbox, et j'ai bien trouvé des codes le faisant à foison. Mais je n'ai même pas eu le loisir de les tester puisqu'une erreur 13 ( = incompatibilité de type) survient. J'ai cherché la localisation de l'objet mais il est dans la librairie F3Dynamic qui n'est pas référencée, et elle est introuvable.

    Aidez-moi svp.

  2. #2
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour Michel Delapouaitte le forum tu dois avoir une variable mal declaree essai de mettre en variant pour voir si meme pb..
    autrement 2 exemples un avec New Collection l autre avec CreateObject("Scripting.Dictionary")
    le nom de la listbox=cbx1 tester sous excel2003 & 2007 ok pour excel 97 pas teste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Dim T, z As Variant, l As Collection, X As Long, i As Long
    On Error Resume Next
    Set l = New Collection
    T = Range("A2:a" & Range("A65536").End(xlUp).Row)
    For i = LBound(T) To UBound(T)
    l.Add T(i, 1), T(i, 1): Next
    For Each z In l
    cbx1.AddItem z: Next
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test5()
    Dim T, z As Variant, l As Object, X As Long, i As Long
    On Error Resume Next
    Set l = CreateObject("Scripting.Dictionary")
    T = Range("A2:a" & Range("A65536").End(xlUp).Row)
    For i = LBound(T) To UBound(T)
    l.Add T(i, 1), T(i, 1): Next
    For Each z In l
    If z <> "" Then cbx1.AddItem z
     Next
    End Sub

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    Bonjour Laetitia, et merci de ton aide (J'ai pu voir ici-même à de multiples reprises qu'elle était très précieuse).

    J'ai essayé avec les 2 exemples que tu donnes, en adaptant juste la plage, mais ils n'ont aucune incidence sur le résultat. Peut-être que je ne les appelle pas au bon endroit. (J'ai attaqué le VBA seulement lundi pour mon stage, du coup j'suis un peu un noob dans ce langage).

    Je te mets mon code pour que tu puisses me dire si c'est moi qui fais nimp.
    Je mets un 'PouetPouet' à chaque endroit d'où j'ai essayé de placer les appels de tes exemples.
    Je vais mettre en plus la methode SupDoubles que j'essaie d'utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Private Sub UserForm_Initialize()
     
     
     
    With Sheets(1)
     
    'On initialise les listes selon les colonnes qui nous interessent,
    'avec seulement les lignes contenant des donnees
       '(@Laetitia : les 10 premieres lignes n'ont pas de donnees)
    'entreprise client
        ListBox1.List = .Range("D10:D" & .Range("D65536").End(xlUp).Row).Value
    ' ----------> PouetPouet !!! <-----------
    '   SupDoubles ListBox1
    'nom du collaborateur dans l'entreprise cliente
        ListBox2.List = .Range("E10:E" & .Range("E65536").End(xlUp).Row).Value
    '    SupDoubles ListBox2
    'Responsable
        ListBox3.List = .Range("F10:F" & .Range("F65536").End(xlUp).Row).Value
    '    SupDoubles ListBox3
    'Site (=agence)
        ListBox4.List = .Range("L10:L" & .Range("L65536").End(xlUp).Row).Value
    '    SupDoubles ListBox4
     
     
    End With
    '----------> PouetPouet !!! <-----------
    End Sub
    La methode SupDoubles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub SupDoubles(lst As ListBox)
        Dim iPos As Integer
        iPos = 0
        'Si la listbox est vide il quitte la fonction
        If lst.ListCount < 1 Then Exit Sub
        Do While iPos < lst.ListCount
            lst.Text = lst.List(iPos)
            'Verifie si le text existe deja
            If lst.ListIndex <> iPos Then
                'Si c'est le cas il supprime et garde la position iPos...
                lst.RemoveItem iPos
            Else
                'Si ce n'est pas le cas il change la position iPos...
                iPos = iPos + 1
            End If
        Loop
        'Utilisé pour désélectionner la dernière ligne
        lst.Text = "-"
    End Sub
    Le déboguer me localise l'erreur sur l'appel de SupDoubles. J'ai essayé diverses variantes (Userform1.Listbox1 , Listbox1.list , le melanges des 2, etc).

    Plus étrange, j'avais aussi essayé de ne pas mettre mon code dans une methode mais directement après l'alimentation (à la place de l'appel), ce qui aurait au moins eu le mérite de marcher, à défaut d'être propre. Dans ce cas l'erreur est directement sur le "Listbox1 = " (ou les variantes testées) alors qu'une ligne au-dessus, pour l'alimentation y'a pas de soucis il le connait bien le listbox1.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/06/2015, 13h22
  2. Erreur lors de la tentative de suppression d'enregistrement
    Par santana2006 dans le forum Requêtes
    Réponses: 0
    Dernier message: 17/02/2010, 12h02
  3. [VBA-E]trie(suppression de doublons) dans une feuille excel
    Par TANIE dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/08/2006, 13h25
  4. Suppression de doublons dans une table partionnée
    Par ludmillaj dans le forum Oracle
    Réponses: 10
    Dernier message: 27/12/2005, 14h34
  5. Réponses: 17
    Dernier message: 03/12/2004, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo