Ne pas faire apparaître les "N/D" de ma BdD dans combobox

Résolu/Fermé
jubatail Messages postés 37 Date d'inscription lundi 31 juillet 2017 Statut Membre Dernière intervention 14 septembre 2017 - 29 août 2017 à 16:09
jubatail Messages postés 37 Date d'inscription lundi 31 juillet 2017 Statut Membre Dernière intervention 14 septembre 2017 - 31 août 2017 à 15:49
Bonjour,

J'ai déjà essayé avec
comboBox1.Items.Remove("N/D")
en le mettant a la fin de mon programme ci-dessous :

For inc = 1 To NbColonne
    'nommage des labels
    Set obj = Me.Controls("Label" & inc)
    obj.Caption = NomColonne(inc - 1)

    'remplissage des boxs
    Set obj = Me.Controls("ComboBox_CAT_" & inc)
    For i = 4 To Sheets(NomFeuille).Cells.Find("*", , LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        'évite de répeter deux fois la même donnée
        obj.Value = Sheets(NomFeuille).Cells(i, inc + 3).Text
        If obj.ListIndex = -1 Then obj.AddItem Sheets(NomFeuille).Cells(i, inc + 3).Text
    Next i
    'on met des boxs vides à l'ouverture de la fenêtre
    obj.Value = ""
Next


bien-sur ça ne marche pas !!!

Merci d'avance de votre aide
cordialement
Julie

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
31 août 2017 à 12:19
Bonjour,

Essayez comme ceci :
Dim DL As Long
For inc = 1 To NbColonne
    'nommage des labels
    Set obj = Me.Controls("Label" & inc)
    obj.Caption = NomColonne(inc - 1)

    'remplissage des boxs
    Set obj = Me.Controls("ComboBox_CAT_" & inc)
    DL = Sheets(NomFeuille).Cells.Find("*", , LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    For i = 4 To DL
        'évite de répeter deux fois la même donnée
        If Sheets(NomFeuille).Cells(i, inc + 3).Text <> "N/D" Then
            obj.Value = Sheets(NomFeuille).Cells(i, inc + 3).Text
            If obj.ListIndex = -1 Then obj.AddItem Sheets(NomFeuille).Cells(i, inc + 3).Text
        End If
    Next i
    'on met des boxs vides à l'ouverture de la fenêtre
    obj.ListIndex = -1
Next

1
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
31 août 2017 à 13:44
c'est le même esprit que le if not que j'ai proposé (du moins c'est l'idée que je voulais soumettre peut être mal écrit) mais je ne comprend pas pourquoi jubatail dit que ça coince sur le next i; le code fonctionnait il avant d’insérer cette ligne?
0
jubatail Messages postés 37 Date d'inscription lundi 31 juillet 2017 Statut Membre Dernière intervention 14 septembre 2017
31 août 2017 à 14:00
oui le code fonctionner avant d'insérer cette ligne :)

en gros souvent quand je rajoute une ligne de code sa bug au même endroit ^^
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59 > jubatail Messages postés 37 Date d'inscription lundi 31 juillet 2017 Statut Membre Dernière intervention 14 septembre 2017
31 août 2017 à 14:02
et avec la propo de pijaku?
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
Modifié le 31 août 2017 à 11:34
Bonjour,
Je ne sais pas sur quel progamme vous travaillez mais si vous êtes sur excel avez vous essayé avant la ligne 12 un
 if not (obj.value = "N/D") then
puis le reste de votre code?
0
jubatail Messages postés 37 Date d'inscription lundi 31 juillet 2017 Statut Membre Dernière intervention 14 septembre 2017
31 août 2017 à 11:50
je viens d'essayer seulement que ca bug au niveau de next i ligne 13
0
jubatail Messages postés 37 Date d'inscription lundi 31 juillet 2017 Statut Membre Dernière intervention 14 septembre 2017
31 août 2017 à 14:09
super merci beaucoup cela fonctionne à merveille
0
jubatail Messages postés 37 Date d'inscription lundi 31 juillet 2017 Statut Membre Dernière intervention 14 septembre 2017
31 août 2017 à 14:11
je peux vous demandez autre chose car ca bloque au meme endroit ??

IL faudrait que le client ne puisse pas écrire dans les combobox car sinon sa peut créer des bug.

j'ai essayer diffèrente façon
d'abord en changeant la propriété style de la box et aussi en tapant un bout de code mais pas moyen !!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
31 août 2017 à 15:14
La propriété Style sert pourtant à cela :
Dim DL As Long
For inc = 1 To NbColonne
    'nommage des labels
    Set obj = Me.Controls("Label" & inc)
    obj.Caption = NomColonne(inc - 1)

    'remplissage des boxs
    Set obj = Me.Controls("ComboBox_CAT_" & inc)
    obj.Style = 0
    DL = Sheets(NomFeuille).Cells.Find("*", , LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    For i = 4 To DL
        'évite de répeter deux fois la même donnée
        If Sheets(NomFeuille).Cells(i, inc + 3).Text <> "N/D" Then
            obj.Value = Sheets(NomFeuille).Cells(i, inc + 3).Text
            If obj.ListIndex = -1 Then obj.AddItem Sheets(NomFeuille).Cells(i, inc + 3).Text
        End If
    Next i
    obj.Style = 2
    'on met des boxs vides à l'ouverture de la fenêtre
    obj.ListIndex = -1
Next
0
jubatail Messages postés 37 Date d'inscription lundi 31 juillet 2017 Statut Membre Dernière intervention 14 septembre 2017 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
31 août 2017 à 15:49
obj.style = 2
fonctionne pas il fait buger ma procedure que j'ai mis ci-dessous et la ligne qui n'est pas en forme de code correspond à la ligne qui bloque !!

Voici le code qui permet d'actualiser les combobox lors d'un changement (une selection) dans l'une des combo

Private Sub actualiserBoxes()

Dim inc As Integer, i As Integer
Dim obj As Object
Dim Ligne As Range
Dim num As String, nom As String

eventFlag = True    ' on active le flag évènement pour ne pas appeler indéfiniment l'évènement "change"

If Me.Visible = True Then   ' si la userform a déjà été initialisée alors...

    Set obj = Me.ActiveControl
    num = Right(obj.Name, 1)
    
    ' on active le filtre concerné
    worksheets(NomFeuille).Range("$A$3:$AW$1000").AutoFilter Field:=num + 3, Criteria1:=obj.Value
    
    For inc = 1 To NbColonne
        Set obj = Me.Controls("ComboBox_CAT_" & inc)
        
        If "ComboBox_CAT_" & inc <> Me.ActiveControl.Name Then  ' Si ce n'est pas la boxe sélectionnée alors...
            nom = obj.Value
            obj.Clear
                     
            ' pour chaque ligne filtrée on récupère la valeur de la cellule concernée
            For Each Ligne In worksheets(NomFeuille).AutoFilter.Range.Columns(inc + 3).SpecialCells(xlCellTypeVisible).Cells
                obj.Value = Ligne.Text
                If obj.ListIndex = -1 And Ligne.Text <> sheets(NomFeuille).Cells(3, inc + 3).Text Then obj.AddItem Ligne.Text
            Next
            
        Else    ' sinon on récupère juste la valeur active et on vide le contenu de la boxe sélectionnée
            nom = obj.Value
            obj.Clear
        End If


obj.Value = nom ' puis on replace la valeur initiale de la boxe (vide ou valeur qui avait été choisie par l'utilisateur)

Next
End If

' libération mémoire et flag évènement
Set obj = Nothing
eventFlag = False


Ce code ressemble fortement a l'initialisation de la boxe et j'ai remarque que lors de l'initialisation il rentre dans cette procédure lors du remplissage des box car il considère qu'il y a un changement !! dommage lol

Merci pour vos réponse ultra rapide :)
0