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 :

Liste sans doublon modifié


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Par défaut Liste sans doublon modifié
    Bonjour,

    Je cherche à remplir une combobox (numaff sur le userform misàjour), mais sans doublon. Jusque là je sais faire.

    Mon problème est que je veux ne pas avoir de doublon sur uniquement les premiers caractères et pas le dernier que je ne connais donc pas.

    Sur le code ci-dessous, je souhaiterai un equivalent de "-*" pour pouvoir savoir si il existe dans ma liste un autre string (contenu dans "debnumaff" ) qui commence de la même manière.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    debnumaff = numerosaff.Cells(ligne, 1) & " " & numerosaff.Cells(ligne, 2) & numerosaff.Cells(ligne, 3) & " " & numerosaff.Cells(ligne, 4) & " " & numerosaff.Cells(ligne, 5)
    misàjour.numaff = debnumaff & "-*"
    If misàjour.numaff.ListIndex = -1 Then misàjour.numaff.AddItem (debnumaff & "-" & numerosaff.Cells(ligne, 6))
    EDIT : une précision, la longueur de debnumaff est variable.

    En espérant avoir été assez clair , merci de votre aide

  2. #2
    Membre éclairé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Par défaut
    Bonjour,

    j'ai bidouillé et cela me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    debnumaff = numerosaff.Cells(ligne, 1) & " " & numerosaff.Cells(ligne, 2) & numerosaff.Cells(ligne, 3) & " " & numerosaff.Cells(ligne, 4) & " " & numerosaff.Cells(ligne, 5)
    For i = 1 To misàjour.numaff.ListCount - 1
       misàjour.numaff.ListIndex = i
       If StrComp(Left(misàjour.numaff.Value, InStr(1, misàjour.numaff.Value, "-", vbTextCompare) - 1), debnumaff, vbTextCompare) = 0 Then
           misàjour.numaff.RemoveItem (i)
           Exit For
       End If
    Next
    misàjour.numaff.AddItem (debnumaff & "-" & numerosaff.Cells(ligne, 6))
    ça fonctionne mais c'est un peu lourd,
    Je supprime l'ancien, et je rajoute le nouveau ce qui m'oblige a parcourir la combobox à chaque fois.
    Si quelqu'un à plus simple je prend, ...

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    déjà (et avant d'analyser tout le reste...)

    Il est assez curieux de procéder comme tu le fais (sélection systématique de l'article d'indice i pour aller ensuite regarder la valeur de ta combo.value !!!)
    je me réfère à cette partie de ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    misàjour.numaff.ListIndex = i
    C'est aberrant et abusif !

    Il y a quand-même une manière simple et moins lourde de lire directement (sans le sélectionner) un article, non ?
    Qu'il s'agisse d'une listbox ou d'une combo, l'article de rang i est directement lu par

    et le reste de ton code (que je ne lirai qu'après) doit travailler avec CE contenu ...

    EDIT : et je vois qu'en plus tu supprimes des articles dans une boucle For de 1 au nombre d'articles ! ==>> plantage assuré car tu vas ainsi te retrouver avec un i > que le nombre restant après suppression !
    Quand on supprime, il faut faire ta boucle du dernier jusqu'au premier (en remontant gr(âce à Step -1) si l'on veut éviter des croches-pieds de l'espèce !

  4. #4
    Membre éclairé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Par défaut
    Bonjour,

    oui, avec le .list(i) c'est plus léger.

    Par contre, pour le for, pour régler ce problème j'ai rajouté un exit for dès que je supprime un item.

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Et ensuite tyu te plains ...
    citation :
    ce qui m'oblige a parcourir la combobox à chaque fois.
    Si quelqu'un à plus simple je prend, ...
    Alors ?
    Il me semble que tu as eu une suggestion !
    Je ne reviendrai personnellement que lorsque j'aurai pu voir son application...

  6. #6
    Membre éclairé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Par défaut
    Après simplification cela fonctionne toujours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    debnumaff = numerosaff.Cells(ligne, 1) & " " & numerosaff.Cells(ligne, 2) & numerosaff.Cells(ligne, 3) & " " & numerosaff.Cells(ligne, 4) & " " & numerosaff.Cells(ligne, 5)
    For i = misàjour.numaff.ListCount - 1 To 1 Step -1
        If StrComp(Left(misàjour.numaff.List(i), InStr(1, misàjour.numaff.List(i), "-", vbTextCompare) - 1), debnumaff, vbTextCompare) = 0 Then
             misàjour.numaff.RemoveItem (i)
        End If
    Next
    misàjour.numaff.AddItem (debnumaff & "-" & numerosaff.Cells(ligne, 6))

Discussions similaires

  1. Automatisation liste sans doublon
    Par mathel dans le forum Excel
    Réponses: 2
    Dernier message: 03/01/2008, 13h28
  2. Liste sans doublon
    Par marc56 dans le forum Excel
    Réponses: 5
    Dernier message: 19/12/2007, 19h22
  3. liste sans doublons
    Par doons dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/10/2007, 13h47
  4. [SQL] Liste sans doublons
    Par tchin dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 19/09/2007, 13h43
  5. [VBA-E] Liste sans doublons pour remplir cellule
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/06/2007, 11h45

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