Foctionnement d'un UserForm

  • Initiateur de la discussion Initiateur de la discussion paul87
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

paul87

XLDnaute Impliqué
Bonsoir à tous..
voila, je n'arrive pas à me débrouiller de ce problème, (Voir le fichier joint)
Sur la feuille 1 on a un "brouillon" d'un récapitulatif de test.
lorsqu'on clique sur les petits point de couleurs cela ouvre un UF "Fiche Descriptive"
Je voudrais pouvoir utiliser l'UF pour consulter ou mettre à jour chaque serie de test...(sachant qu'a terme j'en aurais plusieures centaintes !!!)
et que les données soient stockées dans la feuille2
sachant que la feuille 3 me sert à "alimenter" les listes déroulantes.
Dans mon exemple tout fonctionne.....sauf le principal..😱 : Faire le lien entre l'UF et la selection correcte sur le bon bouton...
je ne sais pas si j'ai été tres clair....mais merci par avance pour votre aide...
Paul
 

Pièces jointes

Re : Foctionnement d'un UserForm

RE,
Petite remarque.
Quand tu as les 2 UF ouverts, cliquer sur "fermer" dans l'UF inital ne validera pas tes données assurance et centralisation.
Je te conseille de griser le bouton "fermer" de l'UF 1 quand tu ouvre le 2eme comme ceci:

dans UF 1:
Private Sub CommandButton5_Click()
CommandButton4.Enabled = False
UserForm3.Show

dans UF 3:
Private Sub CommandButton1_Click()

'affectation des saisis dans l'UF à des variables
essai = UserForm1.TextBox1.Value
If CheckBox1.Value = True Then
assurance = "O"
Else: assurance = "N"
End If



'commence une nouvelle ligne ou reprend "l'essai" existant
Set i = Worksheets("DONNEES").Cells.Find(essai)
If i Is Nothing Then
Set adresse = Worksheets("DONNEES").Range("a1").End(xlDown).Offset(1, 0)
Else
Set adresse = i
End If


' puis ajout des infos dans la feuille 2

adresse.Offset(0, 10) = assurance


Unload UserForm3
UserForm1.CommandButton4.Enabled = True

A+ 🙂
 
Re : Foctionnement d'un UserForm

Bonjour,
juste une petite question liée à un 'bug" de fonctionnement que je n'avais pas remarqué plus tôt.
Dans le cas de la création d'un nouvel essai (qui n'exiterai pas encore dans la feuille2) si on veut ouvrir les 2 UF dans une meme session (ex: pour une mise à jour globale) ça plante.
cela vient du fait que la variable "essai" n'est pas encore présente dans la feuille2 au moment ou on lance l'ouverture du UF2.
Si on fait l'action en 2 étapes ça fonctionne, cad ouverture du UF1, fermeture, réouverture du UF1 et ouverture du UF2.
Que faire,...J'ai essayé d'affecter:
Code:
essai = TextBox1.Value
au bouton de fermeture du UF1, au bouton d'ouverture du UF2, sur initialize du UF2...
je n'y arrive pas.....Que faire..Merci
 

Pièces jointes

Re : Foctionnement d'un UserForm

Bonjour,
en gras ce qu'il manqeu dans l'UF 3:

Private Sub UserForm_Initialize()
'Récupère les données éventuelles de la feuille 2
Set i = Worksheets("DONNEES").Cells.Find(c)
If Not i Is Nothing Then
If i.Offset(0, 10) = "O" Then
CheckBox1.Value = True
Else: CheckBox1.Value = False

End If
End If
End Sub

C'est une condition qui dit de récupérer les données si elles éxistent dans la feuille, sans elle ça plante 😉
Bonne après-midi
 
Re : Foctionnement d'un UserForm

Merci à toi skoobi...qui suit ce post depuis le début....
j'ai encore un soucis, le dernier j'espère😱
j'ai un plantage que je ne sais résoudre au niveau de l'appel de la macro"test"...
j'ai du modifier quelque chose....mais je ne sais quoi...ça m'apprendra à ne travailler que sur des copies😱
encore encore encore...merci
fichier en PJ
 

Pièces jointes

Re : Foctionnement d'un UserForm

Bonsoir,
1. comme tes données dans la feuille 2 sont vides la division ne peut ce faire.
Ajoute ceci:

Private Sub UserForm_Initialize()
Dim i As Range
Dim plage As Variant
'Pour les Données pré-enregistrées des ComboBox...
With ThisWorkbook.Worksheets("Settings")
'Test-ref
plage = .Range(.Range("A2"), .Range("A500").End(xlUp))
Me.ComboBox1.List = plage

plage = .Range(.Range("B2"), .Range("B500").End(xlUp))
Me.ComboBox2.List = plage

plage = .Range(.Range("C2"), .Range("C500").End(xlUp))
Me.ComboBox3.List = plage

End With

'Récupère les données éventuelles de la feuille 2
Set i = Worksheets("DONNEES").Cells.Find(c)
If Not i Is Nothing Then
TextBox2.Value = i.Offset(0, 1)
ComboBox2.Value = i.Offset(0, 2)
TextBox8.Value = i.Offset(0, 3)
TextBox7.Value = i.Offset(0, 4)
ComboBox1.Value = i.Offset(0, 5)
ComboBox3.Value = i.Offset(0, 6)
TextBox3.Value = i.Offset(0, 7)
TextBox4.Value = i.Offset(0, 8)
TextBox5.Value = i.Offset(0, 9)
TextBox6.Value = i.Offset(0, 10)
TextBox9.Value = i.Offset(0, 11)
TextBox10.Value = i.Offset(0, 12)
End If
If TextBox10.Value <> vide And TextBox9.Value <> vide And TextBox6.Value <> vide Then
Label14 = TextBox10.Value / TextBox9.Value * 100
Label16 = TextBox10.Value / TextBox6.Value * 100
End If
End Sub

2. autre plantage:
remplace la variable "Date" par "jour" (par exemple) dans le code de l'UF 3 car "Date" est une commande système VBA.

Petite astuce: pour trouver ou ça plante tu clique sur "déboguage" sur la fenêtre d'erreur puis la touche "F8" jusqu'a ce que l'erreur réapparaisse.
tu sauras quel ligne pose problème 😉 😉
Bonne soirée 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour