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

Résolu
jubatail Messages postés 39 Statut Membre -  
jubatail Messages postés 39 Statut Membre -
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

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. fabien25000 Messages postés 697 Statut Membre 59
       
      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
    2. jubatail Messages postés 39 Statut Membre
       
      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
      1. fabien25000 Messages postés 697 Statut Membre 59 > jubatail Messages postés 39 Statut Membre
         
        et avec la propo de pijaku?
        0
  2. fabien25000 Messages postés 697 Statut Membre 59
     
    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
    1. jubatail Messages postés 39 Statut Membre
       
      je viens d'essayer seulement que ca bug au niveau de next i ligne 13
      0
  3. jubatail Messages postés 39 Statut Membre
     
    super merci beaucoup cela fonctionne à merveille
    0
  4. jubatail Messages postés 39 Statut Membre
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      1. jubatail Messages postés 39 Statut Membre > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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