Signaler

Ne pas faire apparaître les "N/D" de ma BdD dans combobox [Résolu]

Posez votre question jubatail 37Messages postés lundi 31 juillet 2017Date d'inscription 14 septembre 2017 Dernière intervention - Dernière réponse le 31 août 2017 à 15:49 par jubatail
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

Utile
+1
plus moins
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

fabien25000 191Messages postés mercredi 5 octobre 2016Date d'inscription 21 septembre 2017 Dernière intervention - 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?
Répondre
jubatail 37Messages postés lundi 31 juillet 2017Date d'inscription 14 septembre 2017 Dernière intervention - 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 ^^
Répondre
fabien25000 191Messages postés mercredi 5 octobre 2016Date d'inscription 21 septembre 2017 Dernière intervention - 31 août 2017 à 14:02
et avec la propo de pijaku?
Répondre
Donnez votre avis
Utile
+0
plus moins
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?
jubatail 37Messages postés lundi 31 juillet 2017Date d'inscription 14 septembre 2017 Dernière intervention - 31 août 2017 à 11:50
je viens d'essayer seulement que ca bug au niveau de next i ligne 13
Répondre
Donnez votre avis
Utile
+0
plus moins
super merci beaucoup cela fonctionne à merveille
Donnez votre avis
Utile
+0
plus moins
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 !!
pijaku 12206Messages postés jeudi 15 mai 2008Date d'inscription ModérateurStatut 13 septembre 2017 Dernière intervention - 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
Répondre
jubatail 37Messages postés lundi 31 juillet 2017Date d'inscription 14 septembre 2017 Dernière intervention - 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 :)
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !