Propriété SpreadSheet et ComboBox VBA Excel 2000

Signaler
-
 deschanp -
Bonjour à tous ! Et désolé de vous réveiller de si bon matin, je vous explique mon problème :

tout d'abord concernant les propriétés des combobox:
J'aimerais rendre mes combobox inéditables par l'utilisateur MAIS clickable(pas de locked). Je sais qu'il existe ceci :
ComboBox1.Style = fmStyleDropDownList
ERREUR "valeur de propriété incorrect"
ou encore ceci :
ComboBox1.DropDownStyle = DropDownList
ERREUR "Valeur non définie"

J'ai également le problème suivant :

Private Sub ComboBox2_Click()

Dim i As Integer
Static Memoire As String

If Memoire <> Me.ComboBox2.Text Then
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        If ComboBox2 = Range("A" & i) Then
            'ComboBox1.AddItem Range("B" & i)
            ComboBox1 = Range("B" & i)
            'ComboBox1.AddItem 1
        End If
    Next
End If
Memoire = Me.ComboBox2.Text

End Sub


Au clic sur un combobox2 contenant des "Années" la combobox1 doit se remplir en fonction des "Mois" de cette "Année" contenus dans un tableau. Selement ça ne fonctionne pas..

Dernière chose concernant le Spreadsheet contenu dans un userform :
J'ai enlevé la barre d'outils au niveau supérieur, mais serait-il possible de supprimer les numéros de lignes, la liste des feuilles, et les barres déroulantes ?
J'aimerais que ce SpreadSheet ne soit pas éditable non plus mais aucune propriété n'est affectée a cet effet :/

Merci d'avance

14 réponses

Bonjour,
qu'est ce que tu entends par inéditable. L'utilisateur peut choisir dans la liste, mais seulement dans la liste ? Si c'est cela, il y a une propriété dans la liste de tes propriétés de ta combobox pour cela.
Pour modifier les propriétés du spreadsheet, tu cliques droit dans une cellule de celui-ci et tu cliques sur commandes et options, tu devrais trouver tout ce que tu cherches la dedans.


Fabien
J'entends par la que l'utilisateur peux choisir un élément de la combobox mais ne peux pas saisir. Les exemples et les propriétés que j'ai trouvé ne fonctionnent pas sur excel 2000.
J'avais déjà trouvé la solution - clic droit-> commandes et options : mais elle a l'inconvénient d'afficher à une msgBox à l'utilisateur si il essaie de saisir une valeur, et j'aimerais l'éviter
En ce qui concerne le remplissage de la combobox aurais-tu une idée ? Je suis sûr que c'est tout bête mais je bloque un peu la...
tu peux remplacer la combobox par une listbox


Fabien
Je viens de regarder mon programme d'un peu plus prêt et une erreur m'a frappée.

Public Sub UserForm_InitAn(tableau)
    ComboBox2.ColumnCount = 1
    ComboBox2.AddItem "Toutes"
    Dim j As Integer
    
    'Récupère les données de la colonne A...
    For j = 1 To Range("A" & Rows.Count).End(xlUp).Row
        ComboBox2 = Range("A" & j)
        '...et filtre les doublons
        If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Range("A" & j)
    Next j
    ComboBox2.Value = "Année"
End Sub


Private Sub ComboBox2_Click()

Dim i As Integer
Static Memoire As String

If Memoire <> Me.ComboBox2.Text Then
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        If ComboBox2 = Range("A" & i) Then
            'ComboBox1.AddItem Range("B" & i)
            ComboBox1 = Range("B1", "B" & i)
            'ComboBox1.AddItem 1
        End If
    Next
End If
Memoire = Me.ComboBox2.Text

End Sub


En mode débeugage, lors de l'exécution userform_init que j'appelle pour initialiser la combobox2. Au 6e passage le programme passe de la ligne en rouge à la fonction Combobox2_click alors que je ne fais pourtant rien oO. Je t'avoue que je ne comprends plus rien..
elle est ou ta ligne en rouge ?


Fabien
Pardon ça n'a pas fonctionné :

ComboBox2 = Range("A" & j)
ah ok j'avais pas vu le color devant désolé...
je comprend pas bien cette ligne justement, elle est censé faire quoi ?
tu ne peux pas mettre combobox = range("A1"). Tu peux ajouter la valeur de la cellule A1 dans la liste, mais pas comme tu l'as écris...
tu l'as même bien écris en commentaire : 'ComboBox1.AddItem Range("B" & i)
Par contre pour comparer combobox2.item(0) = range("A1") marche mieux


Fabien
Oui évidement... Je me demande ou j'ai la tête des fois. Merci à toi du coup, j'utilise des listbox. La manipulation est plus légère. Je gère les doublons et je trie par ordre alphabétique. Je te tiens au jus pour la suite
Je n'arrive pas à avancer désolé.. Je suis bloqué ici :

Initialisation de la listbox des années

Public Sub UserForm_InitAn(tableau)
    ListBox1.ColumnCount =  1
    'ListBox1.AddItem "Années1"
    ListBox1.AddItem "Toutes"
    Dim j As Integer
       
    'Récupère les données de la colonne A...
    For j = 1 To Range("A" & Rows.Count).End(xlUp).Row
        ListBox1.AddItem Range("A" & j)
    Next j
    SupDoubles ListBox1 'Supprime les doublons
End Sub


Ajout des mois correspond en fonction de l'année sélectionnée

Private Sub ListBox1_Click()

Dim i As Integer
Dim var
Static Memoire

ListBox2.Clear
Memoire  = ListBox1.Text
If Memoire <> ListBox1.Text Then
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        If ListBox1 = Range("A" & i) Then
            var = Range("B" & i + 1).Value
            
            If Application.WorksheetFunction.Odd(var) Then
                Select Case var
                Case 1
                    ListBox2.AddItem "Janvier"
                Case 3
                    ListBox2.AddItem "Mars"
                Case 5
                    ListBox2.AddItem "Mai"
                Case 7
                    ListBox2.AddItem "Juillet"
                Case 9
                    ListBox2.AddItem "Septembre"
                Case 11
                    ListBox2.AddItem "Novembre"
                End Select
            Else
                Select Case var
                Case 2
                    ListBox2.AddItem "Février"
                Case 4
                    ListBox2.AddItem "Avril"
                Case 6
                    ListBox2.AddItem "Juin"
                Case 8
                    ListBox2.AddItem "Août"
                Case 10
                    ListBox2.AddItem "Octobre"
                Case 12
                    ListBox2.AddItem "Décembre"
                End Select
            End If
        End If
    Next
End If
    SupDoubles ListBox2
End Sub


En regardant le débeugueur, j'ai l'impression que le programme détecte un clic lorsque je remplis la listbox des années.

Quoi qu'il arrive impossible de rajouter les mois dans la listbox des mois..

Help Please
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Bonjour,
tu écris ceci

Memoire =  ListBox1.Text
If Memoire <> ListBox1.Text Then
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        If ListBox1 = Range("A" & i) Then
            var = Range("B" & i + 1).Value


Comme Memoire = Listbox1.Text, le code ne passera jamais dans la suite puisque tu demande si Memoire est différent de Listbox1.Text... problème de logique ici...

Plus loin, tu écris If ListBox1 = Range("A" & i)
Il te faudrait spécifier Listbox1.Text, j'imagine, mais encore là, j'ai des doutes... mais ça ne peut pas être Listbox1 tout seul...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Le listbox1.text ne fonctionne pas (incompatibilité de type), parcontre le listbox1.value si !
J'arrive à placer un item en conséquence dans ma listbox1 mais pas rajouter les mois.

Voici le procédure de création de mon tableau mais il me semble qu'elle est bonne :

Function InitDonnee() As Variant
    Dim NomFicher(101) As String
    Dim CdoMessage As CDO.Message
    Dim FichiersChoisis As String
    Dim remplace As String
    remplace = ".csv"
    FichiersChoisis = ""
    
    ChDir "C:\Documents and Settings\pdeschanels\Mes documents\Projet VBA"
    FichiersChoisis = Application.GetOpenFilename("Fichier de Production, *.csv", 2, "Choisissez un Fichier de production")
     
    If FichiersChoisis <> "" Then
    
        'Ouverture du fichier text
        Workbooks.OpenText Filename:= _
                            FichiersChoisis, _
                            Origin:=xlWindows, _
                            StartRow:=1, _
                            DataType:=xlDelimited, _
                            TextQualifier:= _
                            xlDoubleQuote, _
                            ConsecutiveDelimiter:=False, _
                            tab:=False, _
                            Semicolon:=True, _
                            Comma:=False, _
                            Space:=False, _
                            Other:=False
               
       ' On enlève l'adresse complète du fichier et on garde son nom
        FichiersChoisis = Mid(FichiersChoisis, InStrRev(FichiersChoisis, "") + 1)
        'On active le classeur
        Workbooks(FichiersChoisis).Activate
        Application.Visible = True
        
        Range("A1").Select
        
        Dim i As Integer, j As Integer
        Dim l, x As Integer
        l = 1
        x = 1
        
        derniereLigne = Application.WorksheetFunction.CountA(Range("A:A"))
        
        ReDim tableau(derniereLigne, 8)
        
        If Range("A" & l).Value = "Année" Then
            l = l + 1
            
        End If
        x = Range("A" & Rows.Count).End(xlUp).Row
                
        tableau = Range("A" & 2, "H" & x)

    End If
        
    InitDonnee = tableau
End Function
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18

If Range("A" & l).Value = "Année" Then
l = l + 1

End If
x = Range("A" & Rows.Count).End(xlUp).Row

tableau = Range("A" & 2, "H" & x)

Je ne vois pas à quoi sert la variable l(L)
que tu devrais écrire en majuscule pour faciliter la lecture et bien différencier du 1(un)

Pour la dernière ligne, je ne suis pas certain que ça va marcher...
J'irais plus ainsi
tableau = Range("A2:H" & x).Value

Pour que Listbox1.Text soit valide, il faut qu'il y ait au moins une ligne de sélectionnée. Et s'il y a plusieurs colonnes, aussi bien chercher la valeur dans la bonne...

If ListBox1.ListIndex >= 0 Then _
   Valeur = Listbox1.List(Listbox1.ListIndex, ColonneRecherchée - 1)


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
La variable "l" sert à sauter une ligne car le fichier que j'ouvre est de la forme:
"année" | "mois" | "jour"
xxxxx | xxxxxx | xxxxxx

J'ai réglé mon problème avec mon tableau !
Et pour ma listbox c'est nikel merci beaucoup !