Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.
  • Initiateur de la discussion Initiateur de la discussion Hulk
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Hulk

XLDnaute Barbatruc
Hello les amis,

Ce code ne devrait-il pas môter les doublons ?

Code:
Private Sub UserForm_Initialize()
Dim j As Integer
    
    For j = 2 To Range("A65536").End(xlUp).Row
        If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Range("A" & j)
    Next j

End Sub
Merci pour votre aide !

Bonne soirée, Hulk.
 

Pièces jointes

Re : Doublons

Hello,

Ok Fo_rum merci pour tes explications, je saisis la chose un poil mieux quand même.

Oui si à l'occase tu peux (et les autres sont les bienvenus 😀) jeter un coup d'oeil au fil #14 donc.

Bonne journée à tous !

Hulk.
 
Re : Doublons

Hello,

Nickel et merci Fo_rum, mais encore deux petits détails, un maintenant et un après, comme ça je mélange pas tout 😀 :

Je n'arrive pas à faire en sorte que les contrôles soient vides à l'ouverture de l'USF !?

Dans l'Initialize (en début de procédure), l'Activate, ComboBox1_Change (en début de procédure), dans un bouton et même dans le QueryClose..
Où que je place le ComboBox1 = "", ça engendre un message d'erreur !?

"Argument ou appel de procédure incorrect" et la ligne
Code:
Set c = Range("A2:A" & Range("A65536").End(xlUp).Row).Find(Left(ComboBox1,Len(ComboBox1) - 10))
est en jaune !?

As-tu une idée ?
Merci.

Hulk.
 
Dernière édition:
Re : Doublons

Re,

Ce que je peux te confirmer, pour l'instant et ce que certains ignorent, c'est qu'un changement dans une liste (Combo ou autre) dans l'Initialize lance automatiquement les procédures ---_ .Click ,---_.Change ... quand elles existent.

Cela peut n'avoir aucune incidence mais cela peut être ennuyant (comme dans ton cas, je suppose).

Pour neutraliser ces lancements intempestifs, on peut inclure une variable (j'aime bien une booléenne) à tester ou faire un simple test; cela dépend des codes !

exemple de test :
Code:
If ComboBox1<> "" then
     Set c = Range("A2:A" & Range("A65536").End(xlUp).Row).Find(Left(ComboBox1,Len(ComboBox1) - 10))
     ...
end if
Pour le reste, je ne peux pas te répondre sans avoir un bout de fichier.
 
Re : Doublons

Hello,

Ok merci pour le détail de l'Initialize !

Tu m'as mis sur la piste avec le If (comment n'y ai-je pas pensé tout seul 😕)
J'sais pas si c'est la bonne solution mais en tout cas ça joue, tout est vide à l'ouverture.

C'est vrai que j'ai pas fourni le fichier avec ma demande, je le joins maintenant pour que tu voies si il y a mieux à faire.

Bref, le deuxième détail dont je parlais, et c'est là que tu vas voir comme je suis tordu 😀 :

Dans la liste de la Combo c'est ok pour le format (l'affichage de la liste), mais une fois un nom séléctioné, dans la Combo, possible d'avoir juste le nom ?

J'ai pensé à placer un Label par dessus la Combo si tu vois ce que j'veux dire ?
J'avoue que je tourne un peu en rond 😡

Merci pour ton aide.

Hulk.
 

Pièces jointes

Re : Doublons

Bonsoir à tous,

Essaye ceci :
Code:
Private Sub ComboBox1_Click()
Dim lign As Long
If ComboBox1 <> "" Then
  lign = ComboBox1.ListIndex + 2
  TextBox1.Value = Range("B" & lign).Value
  TextBox2.Value = Range("C" & lign).Value
  TextBox3.Value = Range("D" & lign).Value
  ComboBox1 = Split(ComboBox1)(0)
End If
End Sub

Avec la fonction Find tu vas avoir des problèmes à cause des doublons.
En repérant le n° de ligne de la donnée avec la propriété ListIndex c'est plus fiable.

J'ai modifié la façon d'alimenter le USF en partant du code de FO_rum.
Cela te fera une possibilité de plus.

A+
 

Pièces jointes

Re : Doublons

Re,

Voici un exemple toujours avec Split :
Code:
Dim Derli As Long, Li As Long, N() As Byte, Nu As String, T() As String, k As Long
Private Sub UserForm_Initialize()

    Derli = Range("A600").End(xlUp).Row
    ReDim N(Derli - 2): ReDim T(Derli - 2)
    
    For Li = 2 To Derli
      N(Li - 2) = Application.WorksheetFunction.CountIf(Range("A$2:A" & Li), Range("A" & Li))
      Nu = IIf(N(Li - 2) = 1, "ère", "ème")
      T(Li - 2) = Range("A" & Li) & "  :  " & N(Li - 2) & Nu & " fois"
    Next
    
    For k = LBound(T) To UBound(T)
      If Application.WorksheetFunction.CountIf(Range("A$2:A" & Derli), Split(T(k))(0)) = 1 Then T(k) = Split(T(k))(0)
    Next
    
    ComboBox1.List = T
    ComboBox1 = ""
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    
End Sub

A+
 
Re : Doublons

Hello le Forum, JC, BH², Fo_rum, Bqtr,

Bestial ! C'est bien ce que je souhaitais !

On (plutôt vous) y est parvenu !

Et donc, ai juste rajouté dans l'USF le
Code:
Private Sub ComboBox1_Click()
Dim lign As Long
If ComboBox1 <> "" Then
  lign = ComboBox1.ListIndex + 2
  TextBox1.Value = Range("B" & lign).Value
  TextBox2.Value = Range("C" & lign).Value
  TextBox3.Value = Range("D" & lign).Value
  ComboBox1 = Split(ComboBox1)(0)
End If
End Sub
pour ré-afficher dans la Combo juste le nom.

Je joins tout de même le fichier escompté et fini.

Bravo à vous quatre et encore merci !

Bon dimanche à tous.

Hulk.
 

Pièces jointes

Dernière édition:
Re : Doublons

Hello,

Je reviens là dessus, car il manque encore un tout petit détail à régler que je n'arrive pas à corriger 😡

J'avoue que je peine à comprendre le code de l'Initialize de l'USF.

Problème avec les espaces dans la Combobox.

J'ai exposé le problème dans le fichier joint, c'est plus simple.

Je vous remercie infiniment.

Hulk.
 

Pièces jointes

Re : Doublons

Re,

fsdkjsgeirspovsekltgasco jpodsjgwdoysjcblwegh 😡

Tu sais que depuis ce matin je cherche la solution !?

Là vous commencer à m'agacer les géants d'Excel avec votre aisance, j'vais finir par craquer ma chemise 😀

C'est plus qu'impec, merci bien Fo_rum et les autres !

Cdt, Hulk.
 
Re : Doublons

Re,

Euh j'ose te grr encore un peu, mais un dernier détail, mais cette fois ultime de chez ultime 😀

Si pas possible pas grave.

Il affiche tout de même le ": 1ère fois" de "De Toto" (je sais je pinaille 😀), est-ce du aux deux "mots" dans A2 ?
Possible d'y remédier ?

Merci, Hulk.
 

Pièces jointes

Re : Doublons

Re,

C'est à cause de la fonction Split et des noms composés avec un espace.
Essaye avec ceci, la fonction Split est remplacée par la fonction Instr qui permet de trouver la place des ":" dans la chaine. Avec ce n° on peut extraire le nom avec la fonction Left (Gauche). Seule condition, il ne doit pas y avoir de ":" dans le nom composé. (ca j'ai jamais vu).

Code:
Dim Derli As Long, Li As Long, N() As Byte, Nu As String, T() As String, k As Long

Private Sub UserForm_Initialize()

    Derli = Range("A600").End(xlUp).Row
    ReDim N(Derli - 2): ReDim T(Derli - 2)
    
    For Li = 2 To Derli
      N(Li - 2) = Application.WorksheetFunction.CountIf(Range("A2:A" & Li), Range("A" & Li))
      Nu = IIf(N(Li - 2) = 1, "ère", "ème")
      T(Li - 2) = Range("A" & Li) & " : " & N(Li - 2) & Nu & " fois"
    Next
    
    For k = LBound(T) To UBound(T)
      If Application.WorksheetFunction.CountIf(Range("A2:A" & Derli), Left(T(k), InStr(1, T(k), ":") - 2)) = 1 Then T(k) = Left(T(k), InStr(1, T(k), ":") - 2)
    Next
    
    ComboBox1.List = T
    ComboBox1 = ""
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    
End Sub
Private Sub ComboBox1_Click()
Dim lign As Long

If ComboBox1 <> "" Then
  lign = ComboBox1.ListIndex + 2
  TextBox1.Value = Range("B" & lign).Value
  TextBox2.Value = Range("C" & lign).Value
  TextBox3.Value = Range("D" & lign).Value
  ComboBox1.Value = Range("A" & lign).Value
End If

End Sub
Private Sub CommandButton1_Click()
End
End Sub
Voilà, ca devrait te calmer un peu, tu dois avoir une consommation de chemise assez impressionnante !! 😀

Bonne soirée
 
Dernière édition:
Re : Doublons

Hulk,

Vous êtes trop forts, M'sieurs, Dames !

Donc si j'ai bien compris y avait qu'à supprimer le Split ?

Parfois suffit d'un rien et ça change tout ! Merci bqtr

Cette fois je crois que c'est la bonne.

Merci infiniment à tous les contributeurs !

Au plaisir, Hulk.

P. S. bqtr, mon paternel tient une usine à chemises en chine, j'ai d'la marge 😀
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
334
Réponses
10
Affichages
680
Réponses
15
Affichages
830
Réponses
4
Affichages
743
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
297
Réponses
8
Affichages
402
Réponses
5
Affichages
931
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…