Aller à une cellule depuis un choix ComboBox

Résolu
Andbed Messages postés 14 Statut Membre -  
Andbed Messages postés 14 Statut Membre -
Bonjour,

voici ce que j'aimerai pouvoir faire :

Depuis une liste d'appareils groupés par catégorie (noté en gras) colonne B
exemple :
en B5 "Cuisine"
en B6 "couteau"
en B7 "fourchette"
en B9 "Salle de bain"
en B10 "Brosse à dent"
...

J'aimerai que dans la liste du ComboBox (position sur B1), n'apparaisse que les catégories (dont le texte est en gras), et qu'à la sélection de ladite catégorie de la liste, la cellule contenant le texte apparaisse à l'écran comme si on s'était servi de la barre de défilement. (pour info la liste comporte 200 lignes et les 4 premières du tableau sont figées)

Tout ca pour simplifier l'accès aux lignes n'apparaissant pas à l'écran

Merci (s'il manque des précisions n'hésitez pas à me le faire savoir)

7 réponses

  1. scinarf Messages postés 1183 Statut Membre 294
     
    Bonjour

    Je dirai

    if (votrecellule.Font.bold = true) then
    Combobox1.additem votrecellule.text
    end if

    le tout dans une boucle while ou for
    0
  2. Andbed Messages postés 14 Statut Membre 1
     
    Merci scinarf pour ta réactivité.

    J'ai trouvé ça :

    Private Sub UserForm_Initialize()

    For i = 6 To 200 ' => pour lister les 200 matériels
    ComboBox1.AddItem Cells(i, 2) 'Ajoute les valeurs des cellules B6 à B200 avec la boucle
    Next

    End Sub


    Du coup, j'ai bien toute la liste dans le combobox, par contre je n'arrive pas à intégrer ton code pour n'avoir que le texte en gras (c'est le "votrecellule" que je n'arrive pas à intégrer). En plus j'ai l'impression que les lignes dont le texte n'est pas en gras vont générer une ligne blanche dans le combobox.

    Si tu as des éléments de réponses...

    merci
    0
  3. Andbed Messages postés 14 Statut Membre 1
     
    Bon en fait comme ça, ça fonctionne :

    Private Sub UserForm_Initialize()

    For i = 6 To 200 ' => pour lister les 200 matériels
    If Cells(i, 2).Font.Bold = True Then
    ComboBox1.AddItem Cells(i, 2).Text 'Ajoute les valeurs des cellules B6 à B200 avec la boucle
    End If
    Next

    End Sub


    J'ai aussi compris pourquoi j'avais des blanc dans la liste, c'était dû à des cellules vides dans lesquels la mise en forme GRAS avait été activée.

    Maintenant 2° phase :

    Que la cellule contenant le texte sélectionner dans la Combobox, se retrouve en haut de l'écran sous les lignes figers comme si je m'étais servi de la barre de défilement verticale.
    0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    deux propositions, je pense que la première serait la plus adéquate.
    Private Sub UserForm_Initialize()

    For i = 6 To 200 ' => pour lister les 200 matériels
    If Cells(i, 2).Font.Bold = True Then
    ComboBox1.AddItem Cells(i, 2).Text 'Ajoute les valeurs des cellules B6 à B200 avec la boucle
    Else
    Rows(i).Visible = False
    End If
    Next i

    End Sub
    La deuxième, positionne la ligne en haut de l'écran.
    Private Sub UserForm_Initialize()
    Dim Lig As Integer
    For i = 6 To 200 ' => pour lister les 200 matériels
    If Cells(i, 2).Font.Bold = True Then
    ComboBox1.AddItem Cells(i, 2).Text 'Ajoute les valeurs des cellules B6 à B200 avec la boucle
    If Lig = 0 Then Lig = i
    End If
    Next i
    ActiveWindow.ScrollRow = Lig
    End Sub
    A+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Andbed Messages postés 14 Statut Membre 1
     
    Bonjour lermite222,

    j'ai tester les 2 codes :

    Le premier génère une erreur sur la ligne "UserForm1.Show" lors du click sur mon bouton pour l'apparation du ComboBox

    Le deuxième code fonctionne au détail prêt que ActiveWindow.ScrollRow ne fonctionne que pour la première valeur de i (6 dans ce cas).
    J'ai fais l'essai avec la commande "For i = 48 To 200" : lors de l'affichage du UserForm je vais directement à la ligne 48 sans avoir encore eu le temps de sélectionner le matériel qui m'intéresse.
    Je pense qu'on est sur la bonne voie, mais il faudrait que ActiveWindow.ScrollRow soit active que lorsque la sélection dans la ComboBox.

    Merci en tout cas, d'avoir fais avancé le ch'mil-blick
    0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Le premier génère une erreur sur la ligne "UserForm1.Show" lors du click sur mon bouton pour l'apparation du ComboBox
    Pour savoir où est l'erreur
    Quand la ligne "UserForm1.Show" est surlignée en jaune, continuer en tapant sur F8, à chaque appui sur F8 l'exécution avance d'une ligne jusqu'au moment de la génération de l'erreur.
    Tu dis où elle se trouve.

    Le deuxième code fonctionne au détail prêt que ActiveWindow.ScrollRow ne fonctionne que pour la première valeur de i (6 dans ce cas).
    C'est pas ainsi que je l'avais compris.
    Je vois pour modifier la procédure.
    0
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Un condensé des deux exemples, tu choisi...
    Un comboBox et un bouton nommé ReInit

    Option Explicit
    Dim TB

    Private Sub ComboBox1_Change()
    ActiveWindow.ScrollRow = TB(ComboBox1.ListIndex)
    End Sub

    Private Sub ReInit_Click()
    Rows("6:200").Hidden = False
    End Sub

    Private Sub UserForm_Initialize()
    Dim Lig As Integer, a As Integer
    ReDim TB(0)
    For Lig = 6 To 200
    If Cells(Lig, 2).Font.Bold = True Then
    ComboBox1.AddItem Cells(Lig, 2).Text
    ReDim Preserve TB(a)
    TB(a) = Lig
    a = a + 1
    Else
    'supprimer cette ligne pour ne pas cacher les données
    'qui ne sont pas en gras.
    ' Rows(Lig).Hidden = True
    End If
    Next Lig
    ComboBox1.ListIndex = 0
    ActiveWindow.ScrollRow = 1
    End Sub
    A+

    0
    1. Andbed Messages postés 14 Statut Membre 1
       
      Nickel, merci beaucoup...
      0