Vba userform et macro problème
Résolu
vansk
-
vansk -
vansk -
Bonjour,
J'ai un petit soucis avec mes userform et ma macro et là je ne sais plus quoi tester alors j'espère que quelqu'un pourra m'aider.
J'ai 5 userforms dans mon fichier. Le premier sert à rentrer des informations sur une fiche, le second à répondre à une question, le troisième à écrire des commentaires, le quatrième à rentrer d'autres informations et le dernier à quitter ou à revenir sur le premier. Le seul problème que j'ai c'est que si je veux quitter le premier directement je n'arrive pas sur le dernier userform il va m'afficher quand même les autres entre. alors j'ai essayé de mettre dans le code du bouton quitter qu'il ouvre le dernier userform mais il m'ouvre quand même les autres ensuite, après j'ai essayé dans le code général ça me le fermi bien mais le problème c'est que ça ne m'ouvrai plus les autres quand je faisiat continuer. Alors ça doit être un truc tt bête mais bon je ne sais pas. J'espère que vous avez compri mon problème je vous met les code du premier formulaire et le code général.
code formulaire identification (1er) :
Option Explicit
Private Sub DateEr_Change()
Dim Valeur As Byte
DateEr.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
Valeur = Len(DateEr)
If Valeur = 2 Or Valeur = 5 Then DateEr = DateEr & "/"
End Sub
Private Sub DateI_Change()
Dim Valeur As Byte
DateI.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
Valeur = Len(DateI)
If Valeur = 2 Or Valeur = 5 Then DateI = DateI & "/"
End Sub
Private Sub Continuer_Click()
Dim Reponse
Dim MSG
Range("a1").Select
Ligne = Identification.NumFiche.Value
'Ensuite pour vérifier que c'est bien une date qui a été saisie
If Not IsDate(DateEr) Then
MsgBox "Format incorrect"
DateEr = ""
Exit Sub
Else
End If
If Not IsDate(DateI) Then
MsgBox "Format incorrect"
DateI = ""
Exit Sub
Else
End If
If Me.DateEr.Value = "" And Me.Service.Value = "" And Me.Fonction.Value = "" And Me.Concerne.Value = "" And Me.DateI.Value = "" And Me.Indice.Value = "" Then
MsgBox "Il faut que tout les champs soit remplit"
Exit Sub
Else
If Sheets("Saisie initiale").Cells(Ligne + 3, 1).Text = "" Then
If Sheets("Saisie initiale").Cells(Ligne + 2, 1).Text = "" Then
MsgBox "Vous avez oublié de saisir une fiche de signalement" & Chr(13) & "Verifiez vos references", vbCritical
Exit Sub
End If
GoTo valider
Else
MSG = "Attention, Vous avez deja saisie des données !!"
MSG = MSG & Chr(13) & "Voulez Vous modifier les données du formulaire N° " & Sheets("Saisie initiale").Cells(Ligne + 3, 1).Text & " ?"
Reponse = MsgBox(MSG, vbYesNo)
If Reponse = vbYes Then
If Sheets("Saisie initiale").Cells(Ligne + 3, 1).Value = Me.NumFiche.Value Then
GoTo valider
Else
MsgBox "Pour pouvoir modifier, Il faut que se soit le Meme!!!"
Exit Sub
End If
Else
Exit Sub
End If
End If
End If
Exit Sub
valider:
Sheets("Saisie initiale").Cells(Ligne + 3, 1).Value = UCase(Me.NumFiche.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 2).Value = UCase(Me.Indice.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 4).Value = CDate(Me.DateEr.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 5).Value = UCase(Me.Fonction.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 6).Value = UCase(Me.Service.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 7).Value = UCase(Me.Concerne.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 8).Value = CDate(Me.DateI.Value)
Unload Me
Load Questions1
End Sub
Private Sub Quitter_Click()
Unload Identification
NombreQuestion = 0
End Sub
code général :
Option Explicit
Public Ligne As Integer
Public NombreQuestion As Integer
Public NumQuestion As Integer
Sub Saisie()
Dim section
Dim Reponse
NombreQuestion = ActiveWorkbook.Sheets("Saisie initiale").Range("NbrQuestion").Text
Load Identification
Identification.Show
Unload Identification
If Identification.Quitter Then
Exit Sub
Else
If Sheets("Saisie initiale").Cells(Ligne + 3, 2) = "1" Then
Questions1.Label1.Visible = True
Questions1.I1.Visible = True
Questions1.Ok.Visible = True
Questions1.Label1.Enabled = True
Questions1.I1.Enabled = True
Questions1.Ok.Enabled = True
Questions1.Caption = Sheets("Saisie initiale").Cells(2, 9).Value
End If
If Sheets("Saisie initiale").Cells(Ligne + 3, 2) = "2" Then
Questions1.Label2.Visible = True
Questions1.I2.Visible = True
Questions1.Ok.Visible = True
Questions1.Label2.Enabled = True
Questions1.I2.Enabled = True
Questions1.Ok.Enabled = True
Questions1.Caption = Sheets("Saisie initiale").Cells(2, 10).Value
End If
If Sheets("Saisie initiale").Cells(Ligne + 3, 2) = "3,1" Then
Questions1.Label3.Visible = True
Questions1.I31.Visible = True
Questions1.Ok.Visible = True
Questions1.Label3.Enabled = True
Questions1.I31.Enabled = True
Questions1.Ok.Enabled = True
Questions1.Caption = Sheets("Saisie initiale").Cells(2, 11).Value
End If
If Sheets("Saisie initiale").Cells(Ligne + 3, 2) = "3,2" Then
Questions1.Label4.Visible = True
Questions1.I32.Visible = True
Questions1.Ok.Visible = True
Questions1.Label4.Enabled = True
Questions1.I32.Enabled = True
Questions1.Ok.Enabled = True
Questions1.Caption = Sheets("Saisie initiale").Cells(2, 12).Value
End If
If Sheets("Saisie initiale").Cells(Ligne + 3, 2) = "4" Then
Questions1.Label5.Visible = True
Questions1.I4.Visible = True
Questions1.Ok.Visible = True
Questions1.Label5.Enabled = True
Questions1.I4.Enabled = True
Questions1.Ok.Enabled = True
Questions1.Caption = Sheets("Saisie initiale").Cells(2, 13).Value
End If
Load Questions1
Questions1.Show
Unload Questions1
For NumQuestion = 1 To (NombreQuestion)
section = Sheets("Saisie initiale").Cells(3, NumQuestion + 13).Value
Select Case section
Case 1
Questions2.TexteLibre.Visible = True
Questions2.Ok.Visible = True
Questions2.TexteLibre.Enabled = True
Questions2.Ok.Enabled = True
End Select
Questions2.Caption = Sheets("Saisie initiale").Cells(2, NumQuestion + 13).Value
Load Questions2
Questions2.Show
Unload Questions2
Next NumQuestion
Load Questions3
Questions3.Show
Unload Questions3
Reponse = MsgBox("Voulez vous enregistrer les modifications", vbQuestion & vbYesNo, "Sauvegarde")
If Reponse = vbYes Then Application.ActiveWorkbook.Save
End If
Load Quitters
Quitters.Show
End Sub
J'ai un petit soucis avec mes userform et ma macro et là je ne sais plus quoi tester alors j'espère que quelqu'un pourra m'aider.
J'ai 5 userforms dans mon fichier. Le premier sert à rentrer des informations sur une fiche, le second à répondre à une question, le troisième à écrire des commentaires, le quatrième à rentrer d'autres informations et le dernier à quitter ou à revenir sur le premier. Le seul problème que j'ai c'est que si je veux quitter le premier directement je n'arrive pas sur le dernier userform il va m'afficher quand même les autres entre. alors j'ai essayé de mettre dans le code du bouton quitter qu'il ouvre le dernier userform mais il m'ouvre quand même les autres ensuite, après j'ai essayé dans le code général ça me le fermi bien mais le problème c'est que ça ne m'ouvrai plus les autres quand je faisiat continuer. Alors ça doit être un truc tt bête mais bon je ne sais pas. J'espère que vous avez compri mon problème je vous met les code du premier formulaire et le code général.
code formulaire identification (1er) :
Option Explicit
Private Sub DateEr_Change()
Dim Valeur As Byte
DateEr.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
Valeur = Len(DateEr)
If Valeur = 2 Or Valeur = 5 Then DateEr = DateEr & "/"
End Sub
Private Sub DateI_Change()
Dim Valeur As Byte
DateI.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
Valeur = Len(DateI)
If Valeur = 2 Or Valeur = 5 Then DateI = DateI & "/"
End Sub
Private Sub Continuer_Click()
Dim Reponse
Dim MSG
Range("a1").Select
Ligne = Identification.NumFiche.Value
'Ensuite pour vérifier que c'est bien une date qui a été saisie
If Not IsDate(DateEr) Then
MsgBox "Format incorrect"
DateEr = ""
Exit Sub
Else
End If
If Not IsDate(DateI) Then
MsgBox "Format incorrect"
DateI = ""
Exit Sub
Else
End If
If Me.DateEr.Value = "" And Me.Service.Value = "" And Me.Fonction.Value = "" And Me.Concerne.Value = "" And Me.DateI.Value = "" And Me.Indice.Value = "" Then
MsgBox "Il faut que tout les champs soit remplit"
Exit Sub
Else
If Sheets("Saisie initiale").Cells(Ligne + 3, 1).Text = "" Then
If Sheets("Saisie initiale").Cells(Ligne + 2, 1).Text = "" Then
MsgBox "Vous avez oublié de saisir une fiche de signalement" & Chr(13) & "Verifiez vos references", vbCritical
Exit Sub
End If
GoTo valider
Else
MSG = "Attention, Vous avez deja saisie des données !!"
MSG = MSG & Chr(13) & "Voulez Vous modifier les données du formulaire N° " & Sheets("Saisie initiale").Cells(Ligne + 3, 1).Text & " ?"
Reponse = MsgBox(MSG, vbYesNo)
If Reponse = vbYes Then
If Sheets("Saisie initiale").Cells(Ligne + 3, 1).Value = Me.NumFiche.Value Then
GoTo valider
Else
MsgBox "Pour pouvoir modifier, Il faut que se soit le Meme!!!"
Exit Sub
End If
Else
Exit Sub
End If
End If
End If
Exit Sub
valider:
Sheets("Saisie initiale").Cells(Ligne + 3, 1).Value = UCase(Me.NumFiche.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 2).Value = UCase(Me.Indice.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 4).Value = CDate(Me.DateEr.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 5).Value = UCase(Me.Fonction.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 6).Value = UCase(Me.Service.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 7).Value = UCase(Me.Concerne.Value)
Sheets("Saisie initiale").Cells(Ligne + 3, 8).Value = CDate(Me.DateI.Value)
Unload Me
Load Questions1
End Sub
Private Sub Quitter_Click()
Unload Identification
NombreQuestion = 0
End Sub
code général :
Option Explicit
Public Ligne As Integer
Public NombreQuestion As Integer
Public NumQuestion As Integer
Sub Saisie()
Dim section
Dim Reponse
NombreQuestion = ActiveWorkbook.Sheets("Saisie initiale").Range("NbrQuestion").Text
Load Identification
Identification.Show
Unload Identification
If Identification.Quitter Then
Exit Sub
Else
If Sheets("Saisie initiale").Cells(Ligne + 3, 2) = "1" Then
Questions1.Label1.Visible = True
Questions1.I1.Visible = True
Questions1.Ok.Visible = True
Questions1.Label1.Enabled = True
Questions1.I1.Enabled = True
Questions1.Ok.Enabled = True
Questions1.Caption = Sheets("Saisie initiale").Cells(2, 9).Value
End If
If Sheets("Saisie initiale").Cells(Ligne + 3, 2) = "2" Then
Questions1.Label2.Visible = True
Questions1.I2.Visible = True
Questions1.Ok.Visible = True
Questions1.Label2.Enabled = True
Questions1.I2.Enabled = True
Questions1.Ok.Enabled = True
Questions1.Caption = Sheets("Saisie initiale").Cells(2, 10).Value
End If
If Sheets("Saisie initiale").Cells(Ligne + 3, 2) = "3,1" Then
Questions1.Label3.Visible = True
Questions1.I31.Visible = True
Questions1.Ok.Visible = True
Questions1.Label3.Enabled = True
Questions1.I31.Enabled = True
Questions1.Ok.Enabled = True
Questions1.Caption = Sheets("Saisie initiale").Cells(2, 11).Value
End If
If Sheets("Saisie initiale").Cells(Ligne + 3, 2) = "3,2" Then
Questions1.Label4.Visible = True
Questions1.I32.Visible = True
Questions1.Ok.Visible = True
Questions1.Label4.Enabled = True
Questions1.I32.Enabled = True
Questions1.Ok.Enabled = True
Questions1.Caption = Sheets("Saisie initiale").Cells(2, 12).Value
End If
If Sheets("Saisie initiale").Cells(Ligne + 3, 2) = "4" Then
Questions1.Label5.Visible = True
Questions1.I4.Visible = True
Questions1.Ok.Visible = True
Questions1.Label5.Enabled = True
Questions1.I4.Enabled = True
Questions1.Ok.Enabled = True
Questions1.Caption = Sheets("Saisie initiale").Cells(2, 13).Value
End If
Load Questions1
Questions1.Show
Unload Questions1
For NumQuestion = 1 To (NombreQuestion)
section = Sheets("Saisie initiale").Cells(3, NumQuestion + 13).Value
Select Case section
Case 1
Questions2.TexteLibre.Visible = True
Questions2.Ok.Visible = True
Questions2.TexteLibre.Enabled = True
Questions2.Ok.Enabled = True
End Select
Questions2.Caption = Sheets("Saisie initiale").Cells(2, NumQuestion + 13).Value
Load Questions2
Questions2.Show
Unload Questions2
Next NumQuestion
Load Questions3
Questions3.Show
Unload Questions3
Reponse = MsgBox("Voulez vous enregistrer les modifications", vbQuestion & vbYesNo, "Sauvegarde")
If Reponse = vbYes Then Application.ActiveWorkbook.Save
End If
Load Quitters
Quitters.Show
End Sub
A voir également:
- Vba userform et macro problème
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Excel compter cellule couleur sans vba - Guide
4 réponses
Bonjour,
Il semble que le problème se trouve ici:
Show() ouvre le formulaire et Unload() le ferme juste après.
Load nomDuFormulaire ne sert pas à grand chose.
Je n'ai pas tout lu, c'est assez rébarbatif de se taper tout le code à déchiffrer.
;o)
Il semble que le problème se trouve ici:
Identification.Show Unload Identification
Show() ouvre le formulaire et Unload() le ferme juste après.
Load nomDuFormulaire ne sert pas à grand chose.
Je n'ai pas tout lu, c'est assez rébarbatif de se taper tout le code à déchiffrer.
;o)
Et donc il faudrait que j'enlève unload Identification ? c'est bien ça ? mais je crois que si je fais ça il restera ouvert alors que je veux qu'il se ferme avant de passer aux autres. C'est vrai que mon code est assez long mais j'ai pas trouver plus simple pour faire ce que je voulais. Passer en base de données serait surement mieux mais pr le peu de données qu ej'ai ça ne sert à rien.
en fait mon problème se situe soit dans ce code là :
Private Sub Quitter_Click()
Unload Identification
NombreQuestion = 0
End Sub
soit dans celui ci :
If Identification.Quitter Then
Exit Sub
Else
....
End if
Quitters.Show
End Sub
Je veux juste que après avoir cliquer sur le bouton quitter du formulaire Identification il arrête Saisie et il ouvre Quitters. mais il m'ouvre les autres quand même ! Je sais pas si je suis très claire dans ce que je veux. Merci déjà d'avoir répondu ;)
Private Sub Quitter_Click()
Unload Identification
NombreQuestion = 0
End Sub
soit dans celui ci :
If Identification.Quitter Then
Exit Sub
Else
....
End if
Quitters.Show
End Sub
Je veux juste que après avoir cliquer sur le bouton quitter du formulaire Identification il arrête Saisie et il ouvre Quitters. mais il m'ouvre les autres quand même ! Je sais pas si je suis très claire dans ce que je veux. Merci déjà d'avoir répondu ;)
Le plus simple est de mettre ton fichier sur https://www.cjoint.com/ et de coller ici le lien.
NombreQuestion, identification.Quitter etc pour moi ne représentent rien. Je n'ai aucune idée de ce que cela peut être.
;o)
NombreQuestion, identification.Quitter etc pour moi ne représentent rien. Je n'ai aucune idée de ce que cela peut être.
;o)
https://www.cjoint.com/?ikooONQG3g
Voici le lien ça sera surement plus facile à comprendre comme ça.
Encore merci de votre aide
Voici le lien ça sera surement plus facile à comprendre comme ça.
Encore merci de votre aide
Bonjout,
J'ai commencé à débugué ton code mais je me suis vite arrèté.
Il n'y a aucune logique dans ta démarche et si ça ne fonctionne pas c'est bien pour cela.
Tu dois entièrement revoir ta conception.
Moi ce que j'en dis... c'est à toi de voir. Toutefois pour répondre à ta question.
Dans un module général mettre un Drapeau par exemple.
Dans le bouton quitter de tes autres UF mettre Quitter = True
et dans la boucle de ton premier UF
Et ce code aussi n'est pas valable, cette question ne sera jamais appellée dés qu'un des TextBox aurra une lettre dedans.
Faut remplacer les AND par des OR
A+
J'ai commencé à débugué ton code mais je me suis vite arrèté.
Il n'y a aucune logique dans ta démarche et si ça ne fonctionne pas c'est bien pour cela.
Tu dois entièrement revoir ta conception.
Moi ce que j'en dis... c'est à toi de voir. Toutefois pour répondre à ta question.
Dans un module général mettre un Drapeau par exemple.
Public Quitter as Boolean
Dans le bouton quitter de tes autres UF mettre Quitter = True
et dans la boucle de ton premier UF
For NumQuestion = 1 To (NombreQuestion) section = Sheets("Saisie initiale").Cells(3, NumQuestion + 13).Value Select Case section 'Ne sert a rien, peu être déterminer dans le design. Case 1 Questions2.TexteLibre.Visible = True Questions2.Ok.Visible = True Questions2.TexteLibre.Enabled = True Questions2.Ok.Enabled = True End Select Questions2.Caption = Sheets("Saisie initiale").Cells(2, NumQuestion + 13).Value Load Questions2 'inutile, double emploi avec Show Questions2.Show Unload Questions2 'inutile sera déjà fermer par le bouton quitter If Quitter Then Quitter = False: Exit Sub Next NumQuestion Load Questions3 'inutile, double emploi avec Show Questions3.Show Unload Questions3 'inutile sera déjà fermer par le bouton quitter
Et ce code aussi n'est pas valable, cette question ne sera jamais appellée dés qu'un des TextBox aurra une lettre dedans.
If Me.DateEr.Value = "" And Me.Service.Value = "" And Me.Fonction.Value = "" And Me.Concerne.Value = "" And Me.DateI.Value = "" And Me.Indice.Value = "" Then MsgBox "Il faut que tout les champs soit remplit"
Faut remplacer les AND par des OR
A+
Ok je vais essayer mais c'est vrai que mon code est compliqué mais je m'y connais pas assez pour recommencer complètement autre chose. Merci je vous dirais si ça marche
A++
A++
Bon ben j'ai essayer avec la méthode du Quitter en boolean mais ça ne fonctionne pas non plus. Si vous avez d'autres idées hésitez pas ! J'aimerai bien revoir ma conception mais je vois pas comment j'ai récupéré cette macro et je l'ai adaptée à mon fichier ou du moins j'ai essayé elle marche mais il y ce petit bug que je n'arrive pas à résoudre. Dans un autre fichier ou je l'ai également utilisé ça marche très bien mais il est beaucoup moins compliqué !! Merci d'avance à ceux qui prendrons le temps de jeter un coup d'oeil à mon problème.