Liste déroulante dans un UserForm

cs_Dominike Messages postés 70 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 6 mars 2010 - 9 mai 2008 à 01:19
cs_Dominike Messages postés 70 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 6 mars 2010 - 9 mai 2008 à 12:20
Bonsoir à tous !
J'avance à petits pas, mais souvent confronté à de petits soucis.
Ce soir, j'ai créé un UserForm avec une liste déroulante alimenté très simplement par les propriétés de RowSource.
Seulement, ma liste peut varier de 2 à 40 items.
Est-il possible que la fenêtre du UserForm n'offre pas une multitude de lignes vides ?
Pourtant je cherche...
Merci à vous pour votre aide !

-Dominike -

5 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
9 mai 2008 à 01:31
salut,

à toi de déterminer la dernière ligne utilisée (ou la première ligne vide rencontrée moins un [-1]) afin d'utiliser ce retour en l'imbriquant dans ton RowSource.
http://www.codyx.org/snippet_rechercher-ligne-vide-dans-excel_205.aspx
http://www.codyx.org/snippet_rechercher-premiere-ligne-ou-colonne-vide-partir-cellule_206.aspx

ou, si tu cherches dans A :
Msgbox Range("A65536").End(xlUp).Row

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA/STRON
0
cs_Dominike Messages postés 70 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 6 mars 2010
9 mai 2008 à 01:44
Merci pour cette rapide réponse et je pense comprendre et pouvoir utiliser dans d'autres conditions...
mais peu familiarisé avec les fonctions du UserForm, je ne vois pas comment l'imbriquer...
Un petit coup de pouce supplémentaire serait bienvenue...
Au fait, vous ne dormez pas à cette heure ?

-Dominike -
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
9 mai 2008 à 02:38
vous ne dormez pas à cette heure ?

on va pas tarder

un exemple, admettons la liste recherchée est dans la colonne A, et que (comme tu l'as précisé) tes valeurs varient entre la ligne 2 et 40

Et bien on va partir de la cellule A1 (certainement l'étiquette de la colonne, donc il y a une donnée), et on va rechercher la dernière ligne utilisée à partir de cette cellule, comme ceci :

Dim DerniereLigne As Integer

DerniereLigne = Range("A1").End(xlUp).Row

Ensuite, tu imbriques cette variable avec la plage pour le RowSource.
Si ta dernière ligne utilisée est 20, ce sera la valeur de la variable DerniereLigne .

Donc NomDuCombobox.RowSource = "NomFeuille!A2:A" & DerniereLigne

A toi d'adapter selon comment est fait ton fichier.
Bon courage

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA/STRON
0
cs_Dominike Messages postés 70 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 6 mars 2010
9 mai 2008 à 11:48
Merci beaucoup pour l'aide,
Mais, couché à pas d'heure, je patauge toujours...
J'ai une macro dans un module qui me permets de sélectionner des fichiers dans mon arborescence, puis de copier leur chemin dans la colonne A de ma feuille 1.
A la fin de la macro, j'appelle le Userform dont le combobox doit me retourner restituer cette liste sans ligne vide.
Mon module :
 Option Explicit
   
    Public dossier
    Public Type BROWSEINFO
        hOwner As Long
        pidlRoot As Long
        pszDisplayName As String
        lpszTitle As String
        ulFlags As Long
        lpfn As Long
        lParam As Long
        iImage As Long
    End Type
    '32-bit API declarations
    Declare Function SHGetPathFromIDList Lib "shell32.dll" _
    Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
    Declare Function SHBrowseForFolder Lib "shell32.dll" _
    Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long


Function GetDirectory(Optional Msg) As String
    Dim bInfo As BROWSEINFO, path As String, r As Long, x As Long, pos As Integer
    bInfo.pidlRoot = 0&
    If IsMissing(Msg) Then
        bInfo.lpszTitle = ""
    Else
        bInfo.lpszTitle = Msg
    End If
    bInfo.ulFlags = &H1
    x = SHBrowseForFolder(bInfo)
    path = Space$(512)
    r = SHGetPathFromIDList(ByVal x, ByVal path)
    If r Then
        pos = InStr(path, Chr$(0))
        GetDirectory = Left(path, pos - 1)
    Else
        GetDirectory = ""
    End If
End Function
Sub File_Openen()
    Columns("A:A").Select
    Selection.ClearContents
    Range("A1").Select
    Dim fs, i, namefile, FileNumber, specfichier, nbfiles, r, Srep, folder, ct
    dossier = GetDirectory("Choisit un dossier : ")
    If dossier <> "" Then
        Set fs = Application.FileSearch
        With fs
            .LookIn = dossier
            .SearchSubFolders = True
            .FileType = msoFileTypeAllFiles
            If .Execute() > 0 Then
                nbfiles = .FoundFiles.Count
        For i = 1 To nbfiles
                        specfichier = .FoundFiles(i)
        Range("A" & i) = specfichier


        Next i
            End If
        End With
    End If
'-------- Ici j'appelle mon User Form "Choix de fichier" --------
    Liste.Show
'----------------------------------------------------------------
End Sub
==========================================
Puis mon User Form
==========================================

Private Sub Choix_Initialize()
Dim DerniereLigne As Integer
DerniereLigne = Range("A1").End(xlUp).Row
End Sub


Private Sub Choix_Change()
Choix.RowSource = "Feuil1!A1:A" & DerniereLigne


End Sub
=========================================
MAIS CA NE FONCTIONNE PAS !
Le combobox ne me donne que la première ligne de la colonne A 
=========================================
Oserais-je abuser en demandant ce qui cloche ....
Merci par avance
et bon pont
-Dominike -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Dominike Messages postés 70 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 6 mars 2010
9 mai 2008 à 12:20
J'ai trouvé !!!....
Il suffisait (et pourtant on me l'avait déjà dit) de partir du bas.
Donc A100 par exemple et non A1.
Mais ma macro n'en est qu'au début...
Autrement dit, je risque fort d'avoir besoin des servives de cette brillante communauté.
Merci pour le coup de main !
Bonne journée à tous !

-Dominike -
0
Rejoignez-nous