Problème de chargement de UserForm via un boutton

Bonjour à tous !

Je me permets de venir poster sur ce forum, parce que j'ai un petit problème avec le développement de ma macro...

Pour mettre dans le contexte, je travaille actuellement un sur un fichier excel qui devrait permettre à mon entreprise de faire de la gestion de stock/parc utilisateur. Mon fichier excel, est composé de 4 feuilles.

La première contient les boutons qui permettent de lancer les UserForm.

La deuxième contient l'ensemble des entrées.

La troisième les références des équipements servant à peupler mes ComboBox, et la dernière feuille sert pour ma fonction recherche.

Aujourd'hui, je cherche à affecter la Macro d'ouverture de mon UserForm à un bouton (sur la première feuille). Le problème c'est que j'ai l'erreur Erreur d'exécution "1004" : Erreur définie par l'application ou l'objet. quand je clique sur le bouton après l'affectation à ma Macro qui lance le formulaire.

Sub Open_SaisieForm()
'
' Ouverture du fourmulaire de saisie
'
Load SaisieForm
SaisieForm.Show
End Sub

En cherchant d'où pouvait provenir le problème j'ai supprimé le contenu de mon UserForm_Initialize(). Et la MAGIE !!! Ça fonctionne. Je remets au fur à mesure le code qui était dedans et donc j'ai trouvé où ça coince... Voici le code :

Private Sub UserForm_Initialize()
'#############FONTIONNE PAS#############
 'Fournisseurs
        Dim A As Range, ListeFournisseurs As Range
        Dim b As New Collection
        'en considérant que les valeurs sont dans la colonne A
        Set ListeFournisseurs = Sheets("REFERENCESMATERIELS").Range([A2], Sheets("REFERENCESMATERIELS").[A2].End(xlDown))

        For Each A In ListeFournisseurs
           On Error Resume Next
           b.Add A, CStr(A)
           If Err = 0 Then Fournisseur_ComboBox.AddItem (CStr(A))
           On Error GoTo 0
        Next A

'#############FONTIONNE#############
    'Status
        Stock_OptionButton.Value = True
        EnService_OptionButton.Value = False
        HS_OptionButton.Value = False

    'CLIENT
        ClientNom_TextBox.Enabled = False
        ClientTelephone_TextBox.Enabled = False
        ClientAdresse_TextBox.Enabled = False
        ClientCP_TextBox.Enabled = False
        ClientVille_TextBox.Enabled = False
        ClientMES_TextBox.Enabled = False
End Sub

Ce que je ne comprends pas, c'est que le code non fonctionnel, je l'utilise dans un ComboBox_Change(), et ça fonctionne parfaitement. De plus ce qui est bizarre (du moins pour moi), si je lance l'exécution depuis l'éditeur VBA avec une autre feuille de calcul ouverte (par exemple la 3eme), ça fonctionne...

Je pourrais filer le fichier ci nécessaire

En espérant avoir été compréhensible.

Merci par avance de votre aide

Bonjour et bienvenue sur le forum

Je pourrais filer le fichier ci nécessaire

Ce serait en effet une bonne chose !

Bye !

Bonjour et bienvenue sur le forum

Je pourrais filer le fichier ci nécessaire

Ce serait en effet une bonne chose !

Bye !

Bonjour,

Déjà:

If Err = 0

???

Je mettrais

If Err.Number = 0

Bonjour,

Essayer donc de remplacer ce code

'Fournisseurs
        Dim A As Range, ListeFournisseurs As Range
        Dim b As New Collection
        'en considérant que les valeurs sont dans la colonne A
        Set ListeFournisseurs = Sheets("REFERENCESMATERIELS").Range([A2], Sheets("REFERENCESMATERIELS").[A2].End(xlDown))

        For Each A In ListeFournisseurs
           On Error Resume Next
           b.Add A, CStr(A)
           If Err = 0 Then Fournisseur_ComboBox.AddItem (CStr(A))
           On Error GoTo 0
        Next A

par celui-ci, qui vous donnera la liste triée des fournisseurs sans doublons, et ne vous donnera plus peut être d'erreur :

 'Fournisseurs
        Dim A As Range, ListeFournisseurs As Range
        Dim liste As Object        'en considérant que les valeurs sont dans la colonne A
        Set ListeFournisseurs = Sheets("REFERENCESMATERIELS").Range([A2], Sheets("REFERENCESMATERIELS").[A2].End(xlDown))

        Set liste = CreateObject("System.Collections.ArrayList")
        For Each A In ListeFournisseurs
           If Not liste.contains(A.Value) Then liste.Add A.Value
           liste.Sort
        Next A
        Fournisseur_ComboBox.List = liste.toarray

Bonjour,

Essaie donc :

With Sheets("REFERENCESMATERIELS").
    Set ListeFournisseurs = .Range(.[A2], .[A2].End(xlDown))
End With

Mais tu devrais affecter un tableau plutôt qu'une plage, ce serait plus rapide.

Cordialement.

Bonjour,

Essayer donc de remplacer ce code

'Fournisseurs
        Dim A As Range, ListeFournisseurs As Range
        Dim b As New Collection
        'en considérant que les valeurs sont dans la colonne A
        Set ListeFournisseurs = Sheets("REFERENCESMATERIELS").Range([A2], Sheets("REFERENCESMATERIELS").[A2].End(xlDown))

        For Each A In ListeFournisseurs
           On Error Resume Next
           b.Add A, CStr(A)
           If Err = 0 Then Fournisseur_ComboBox.AddItem (CStr(A))
           On Error GoTo 0
        Next A

par celui-ci, qui vous donnera la liste triée des fournisseurs sans doublons, et ne vous donnera plus peut être d'erreur :

 'Fournisseurs
        Dim A As Range, ListeFournisseurs As Range
        Dim liste As Object        'en considérant que les valeurs sont dans la colonne A
        Set ListeFournisseurs = Sheets("REFERENCESMATERIELS").Range([A2], Sheets("REFERENCESMATERIELS").[A2].End(xlDown))

        Set liste = CreateObject("System.Collections.ArrayList")
        For Each A In ListeFournisseurs
           If Not liste.contains(A.Value) Then liste.Add A.Value
           liste.Sort
        Next A
        Fournisseur_ComboBox.List = liste.toarray

Bonjour,

Je viens d'essayer. Toujours même erreur.

Bonjour,

Déjà merci à vous tous pour vos réponses.

Du coup je joins à cette réponse le fichier. Je pense que cela va faciliter la chose.

17saisie-stock.xlsm (54.13 Ko)

Bonjour,

Ai ajouté la modif suggérée par MFerrand.

Ne vois pas à quoi servent les "load" de formulaires juste avant l'instruction ".show" et les ai donc mis en commentaire.

Fonctionne chez moi.

30saisie-stock1.xlsm (51.26 Ko)

Hello !

Merci a vous ça fonctionne maintenant !

Au final vous auriez une explication au problème ?

Au final vous auriez une explication au problème ?

Pas vraiment, car je ne l'ai pas rencontré avec le nouveau code.

Bonjour,

Je t'avais signalé une erreur de syntaxe. Elle a été rectifié par Thev. S'il y en avait d'autres, il les a également rectifiées du coup !

Rechercher des sujets similaires à "probleme chargement userform via boutton"