Excel UserForm aide

Fermé
CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022 - 30 mai 2022 à 13:27
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 14 juin 2022 à 11:33
Bonjour,

Je voulais faire un msgbox et sélectionner un choix dans une liste mais en cherchant j'ai vu qu'il fallait faire avec un userform.
N'en ayant jamais fait, j'ai repris un code que j'ai trouvé et fait quelques modifications pour essayer d'avoir ce que je veux mais ça ne fonctionne pas :

Private Sub ComboBox1_Change()
Dliz = Cells(Rows.Count, 4).End(xlUp).Row + 1
Dlie = InputBox("Nom description", "Insérer nouvelle description")
If ComboBox1.ListIndex >= 0 Then
    Me.Hide
    MsgBox ("Vous avez répondu " & ComboBox1.Value)
Sheets("Formules").Select
Range("D", Dliz) = Dlie
Range("E", Dliz) = ComboBox1.Value
Sheets("Copier_coller").Select
End If
End Sub

Private Sub UserForm_Initialize()
Reponse = Array("Bolts_Nuts_Washers", "Components", "HILTI", "Plate", "Profiles", "Round_Square_bars", "Rubber", "Standard_accessories", "Tube", "Tube_accessories")
ComboBox1.List = Reponse
End Sub


Je veux avoir 1 msgbox pour rentrer un valeur qui ira à la suite dans la colonne D de la feuille "Formules" et la valeur sélectionné dans la liste de choix avec le userform ira à la suite dans la colonne E.

Merci de votre aide,

Cédric
A voir également:

4 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
30 mai 2022 à 17:48
Bonjour,

corriger ceci:

Range("D" & Dliz) = Dlie
Range("E" & Dliz) = ComboBox1.Value



--@+ Le Pivert
0
CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022
31 mai 2022 à 09:03
Bonjour,

J'ai une erreur d'objet
Je crois avoir fais quelque chose de basique "titre + liste déroulante", est ce possible d'ajouter un bouton de validation une fois un nom dans la liste sélectionné ?

Ci-joint mon fichier : https://www.cjoint.com/c/LEFg1oYxe8k

Merci à vous,
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
31 mai 2022 à 09:20
C'est normal que cela ne fonctionne pas!

Remplace ta ListBox par une ComboBox et cela fonctionnera!
0
CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
31 mai 2022 à 14:03
J'ai réussi du coup à faire apparaitre ce que je veux (même si inputbox arrive après combobox ce que je ne comprends pas car la commande est avant...)
Mais là n'est pas vraiment mon problème ahah
Je veux que ces 2 valeurs viennent se remplir à la suite d'un tableau (colonne D et E de la feuille Formules) mais à la fin de la macro, il n'y avait rien de nouveau :/
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022
31 mai 2022 à 16:26
Comme ceci:

Sheets("Formules").Range("D" & Dliz) = Dlie
Sheets("Formules").Range("E" & Dliz) = ComboBox1.Value


@+ Le Pivert
0
CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
1 juin 2022 à 14:43
Merci ça fonctionne :)
Est ce possible d'ajouter un test : si l'inputbox saisie existe déjà dans la colonne D, alors arrêter la macro et ne pas demander la combobox ? (car là la macro me demande d'abord la combobox et je peux également rentrer des doublons...)

Ensuite, j'ai un bouton validé sur le userform de ma combobox mais il ne fonctionne pas car dès que je sélectionne un choix dans la liste, je passe directement à la suite sans avoir besoin de valider mon choix. Comment puis je faire pour valider mon choix avec ce bouton ?
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022
Modifié le 1 juin 2022 à 16:59
Si tu veux un bouton, il faut supprimer la macro Private Sub ComboBox1_Change()

Tu mets ceci à la place:

Option Explicit
Private Sub CommandButton1_Click()
Dim Dliz, Dlie
Dim Trouve As Range
Dliz = Cells(Rows.Count, 4).End(xlUp).Row + 1
Dlie = InputBox("Nom description", "Insérer nouvelle description")
Set Trouve = Sheets("Formules").Columns(4).Cells.Find(what:=Dlie, LookAt:=xlWhole)
'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then
    'ici, traitement pour le cas où la valeur n'est pas trouvée
    If ComboBox1.ListIndex >= 0 Then
    Me.Hide
    MsgBox ("Vous avez répondu " & ComboBox1.Value)
With Sheets("Formules")
.Range("D" & Dliz) = Dlie
.Range("E" & Dliz) = ComboBox1.Value
End With
End If
Else
MsgBox "Valeur presente: " & Trouve.Address
    Exit Sub
End If
Sheets("Copier_coller").Select
End Sub
Private Sub UserForm_Initialize()
Dim Reponse
Reponse = Array("Bolts_Nuts_Washers", "Components", "HILTI", "Plate", "Profiles", "Round_Square_bars", "Rubber", "Standard_accessories", "Tube", "Tube_accessories")
ComboBox1.List = Reponse
ComboBox1.ListIndex = 0
End Sub



Voilà

@+ Le Pivert
0
CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022
Modifié le 8 juin 2022 à 15:27
Bonjour,

Merci pour le lien, il est très utile !

Néanmoins, j'aurais encore besoin de vos lumières...
J'ai fais un dernier UserForm pour mon fichier voici le code :
Option Explicit
Private Sub Validation_Click()
Dim Dlig, Dcol
Dim Trouve As Range
' Tableau10 = Bolts_Nuts_Washers (N° colonne 1 )
' Tableau11 = Components (N° colonne 9 )
' Tableau12 = HILTI (N° colonne 17 )
' Tableau13 = Plate (N° colonne 25 )
' Tableau14 = Profiles (N° colonne 33 )
' Tableau15 = Round_Square_bars (N° colonne 41 )
' Tableau16 = Rubber (N° colonne 49 )
' Tableau17 = Standard_accessories (N° colonne 57 )
' Tableau18 = Tube (N° colonne 65 )
' Tableau19 = Tube_accessories (N° colonne 73 )
' Tableau3 = Anchors_standards (N° colonne 81 )
' Tableau4 = Grating (N° colonne 89)
' Tableau5 = Grating-Component (N° colonne 97 )
' Tableau6 = Grating-Fixations (N° colonne 105 )
' Tableau7 = Grating-Option (N° colonne 113 )
If ComboBox1 = "Bolts_Nuts_Washers" Then
    Dcol = 1
    Else
    If ComboBox1 = "Components" Then
        Dcol = 9
        Else
        If ComboBox1 = "HILTI" Then
            Dcol = 17
            Else
            If ComboBox1 = "Plate" Then
                Dcol = 25
                Else
                If ComboBox1 = "Profiles" Then
                    Dcol = 33
                    Else
                    If ComboBox1 = "Round_Square_bars" Then
                        Dcol = 41
                        Else
                        If ComboBox1 = "Rubber" Then
                            Dcol = 49
                            Else
                            If ComboBox1 = "Standard_accessories" Then
                                Dcol = 57
                                Else
                                If ComboBox1 = "Tube" Then
                                    Dcol = 65
                                    Else
                                    If ComboBox1 = "Tube_accessories" Then
                                        Dcol = 73
                                        Else
                                        If ComboBox1 = "Anchors_standards" Then
                                            Dcol = 81
                                            Else
                                            If ComboBox1 = "Grating" Then
                                                Dcol = 89
                                                Else
                                                If ComboBox1 = "Grating-Component" Then
                                                    Dcol = 97
                                                    Else
                                                    If ComboBox1 = "Grating-Fixations" Then
                                                        Dcol = 105
                                                        Else
                                                        If ComboBox1 = "Grating-Option" Then
                                                            Dcol = 113
Dlig = Worksheets("Liste IENET").Cells(Rows.Count, Dcol).End(xlUp).Row + 1
Set Trouve = Sheets("Liste IENET").Columns(Dcol).Cells.Find(what:=Dlig, LookAt:=xlWhole)
With Sheets("Liste IENET")
.Range(Dcol + 1 & Dlig) = TextBox1  'apparement Excel n'aime pas comment j'ai défini ces lignes là
.Range(Dcol + 2 & Dlig) = TextBox2
.Range(Dcol + 3 & Dlig) = TextBox3
.Range(Dcol + 4 & Dlig) = TextBox4
.Range(Dcol + 5 & Dlig) = TextBox5
.Range(Dcol + 6 & Dlig) = TextBox6
End With

                                                        End If
                                                    End If
                                                End If
                                            End If
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If
End If
Sheets("Copier_coller").Select
End Sub
Private Sub UserForm_Initialize()
Dim Reponse
'Reponse = Liste_type (défini directement dans le combobox)
'ComboBox1.List = Reponse
ComboBox1.ListIndex = 0
End Sub

Pourquoi ma ligne avec les TextBox est elle surligné en jaune ? j'ai oublié des guillemets à un endroit ?
Et également n'y a t il pas une autre solution pour éviter toute la cascade de IF ? (avec un recherche H dans ma feuille pour retrouver le N° de colonne correspondant au ComboBox choisi par exemple)

Merci encore

Cédric
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié le 8 juin 2022 à 17:59
avec un recherche H dans ma feuille pour retrouver le N° de colonne correspondant au ComboBox choisi par exemple)

https://www.developpez.net/forums/d1551029/logiciels/microsoft-office/excel/macros-vba-excel/retrouver-numero-d-colonne-d-apres-entete/

ce qui donne ceci:

Private Sub ComboBox1_Change()
Dim Recherche As Range
Dim NumeroColonne As Integer
Set Recherche = Rows(1).Find(ComboBox1.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not Recherche Is Nothing Then
   NumeroColonne = Recherche.Column
   Dcol = NumeroColonne
Else
   MsgBox "La colonne n'a pas été trouvée"
End If
End Sub


Pourquoi ma ligne avec les TextBox est elle surligné en jaune ?

mettre ceci:

.Cells(Dlig,  Dcol + 1 ) = TextBox1


Voilà
0
CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
13 juin 2022 à 09:36
Bonjour,

Je n'ai pas eu l'occasion de retravailler dessus avant d'où ma réponse un peu tardive...

Lorsque je lance la macro, il n'aime pas la façon dont j'ai écrit cette ligne (il l'a met en erreur)
Dlig = Worksheets("Liste IENET").Cells(Rows.Count, Dcol).End(xlUp).Row + 1


Ci-dessous mon fichier si ça peut plus vous aider :
https://www.cjoint.com/c/LFnhvK7lTZk

Merci,

Cédric
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022
13 juin 2022 à 11:45
La variable Dcol n'est pas déclarée!

Il faut mettre Option Explicit en début de module pour forcer la déclaration des variables comme ceci:

Option Explicit
Dim Dcol As Long
Private Sub ComboBox1_Change()
Dim Recherche As Range
Dim NumeroColonne As Integer
Sheets("Liste IENET").Activate
Set Recherche = Rows(2).Find(ComboBox1.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not Recherche Is Nothing Then
   NumeroColonne = Recherche.Column
   Dcol = NumeroColonne
Else
   MsgBox "La colonne n'a pas été trouvée"
End If
End Sub
Private Sub Validation_Click()
Dim Dlig
Dim Trouve As Range
Dlig = Worksheets("Liste IENET").Cells(Rows.Count, Dcol).End(xlUp).Row + 1
Set Trouve = Sheets("Liste IENET").Columns(Dcol).Cells.Find(what:=Dlig, LookAt:=xlWhole)
With Sheets("Liste IENET")
.Cells(Dlig, Dcol + 1) = TextBox1
.Cells(Dlig, Dcol + 2) = TextBox2
.Cells(Dlig, Dcol + 3) = TextBox3
.Cells(Dlig, Dcol + 4) = TextBox4
.Cells(Dlig, Dcol + 5) = TextBox5
.Cells(Dlig, Dcol + 6) = TextBox6
End With
Sheets("Copier_coller").Select
End Sub


voilà

@+
1
CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
13 juin 2022 à 12:00
La macro tourne par contre rien ne vient s'afficher à la suite dans les tableaux...
J'ai également ajouté cette ligne là dans le "with" :
.Cells(Dlig, Dcol) = ComboBox1.Value

Il faut aussi définir la variable "ComboBox1.Value" comme pour "Dcol" ?
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022
Modifié le 13 juin 2022 à 14:17
Il faut aussi définir la variable "ComboBox1.Value" comme pour "Dcol" ?

NON ce n'est pas une variable

Si tu avais mis cela tu aurais vu où se situait l'erreur:

With Sheets("Liste IENET")
.Cells(Dlig, Dcol + 1) = TextBox1
MsgBox TextBox1
MsgBox Dlig
MsgBox Dcol + 1


Il y a la ligne 500 qui est remplie.

Il suffit de l'effacer et tout rentre dans l'ordre

@+
0
CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022
13 juin 2022 à 14:44
Je t'embête beaucoup ahah mais tu m'aide énormément...

Je veux faire deux dernière macro pour mon fichier :
La première qui va copier coller en valeur les données de la feuille "IENET" dans un nouveau classeur que la macro crée elle même, j'ai fais un petit essai et j'ai déjà une erreur :
Private Sub CommandButton3_Click()
Sheets("IENET").Select
Cells.Select        '(cette commande là est détecté quand on fait l'enregistrement de macro 
          'mais quand on lance la macro, elle passe en erreur sur cette ligne....)
'Range("A1:AB10000").Select         (j'ai testé la sélection comme ça mais ça ne fonctionne pas)
Selection.Copy
Workbooks.Add.SaveAs Filename:="Fichier importation dans IENET"
Workbooks("Fichier importation dans IENET.xlsx").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End Sub


Et la seconde, qui va rester plus basique pour faire un onglet explicatif de comment mon fichier fonctionne où là je vais juste avoir des cases à cocher pour cacher/afficher des lignes avec des infos dessus donc je ne devrais pas avoir trop de problème :)
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
13 juin 2022 à 15:51
Pour sélectionner toute la feuille :

Sheets("IENET").Activate
ActiveSheet.Cells.Select


@+
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
13 juin 2022 à 16:41
0
CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
14 juin 2022 à 09:44
Bonjour,
En effet, les valeurs saisies étaient envoyés sur les lignes 500+ maintenant ça fonctionne bien :)
Il ne reste que le copier coller qui ne copie colle pas en valeur et donc créer des erreurs mais ce n'est plus du tout le même sujet !
Je vous remercie pour toute l'aide que vous m'avais apporté
Bonne continuation à vous,
Cédric
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > CedricG62 Messages postés 38 Date d'inscription mercredi 19 juillet 2017 Statut Membre Dernière intervention 4 novembre 2022
14 juin 2022 à 11:33
0