Codage boutons Userform et affichage plein écran
Bonjour à toutes et tous,
Je n'arrive plus à progresser dans la programmation de mon USERFORM / Excel (après modification d'un modèle récupéré d'internet).
en tant que débutant en Vba / Excel, j'ai fait une bonne partie du boulot mais il y'a encore des choses que je ne sais pas faire.
Mon problème est j'aimerais :
- faire fonctionner les boutons SUPPRIMER, RECHERCHE, MODIFIER, RECULER et AVANCER ;
Aussi, pour contrôler l'accès aux autres feuillets, j'aimerais avoir des aller-retour tels que :
- un bouton STATISTIQUES sur le Userform qui ouvre le feuillet STATS par mot de passe et ferme le USERFORM ;
- un bouton (ou autre) sur le feuillet STATS qui ferme ce dernier et ouvre le USERFORM ;
- un bouton ENREGISTREMENTS sur le Userform qui ouvre le feuillet DONNEES par mot de passe et ferme le USERFORM ;
- un bouton (ou autre) sur le feuillet DONNEES qui ferme ce dernier et ouvre le USERFORM ;
Au lancement du fichier STATOUR, j'aimerais que :
- le USERFORM s'ouvre seul (sans la croix et la bande bleu) pour donner l'impression d'une application non rattachée à Excel ;
- le USERFORM s'ouvrir en PLEIN ECRAN (avec ComboBox, TexBox affichés proportionnellement à l'écran) sur n'importe quel PC (fixe, portable) et Mac.
Ci-joint mon fichier
Merci d'avance en cette période de confinement quasi planétaire,
Bonjour,
Merci Bruno M45 pour le conseil. Je serai bientàot aussi bon que toi en vba / Excel
Exemple d'adaptation de code au Userform réussi : ]
Option Explicit 'DECLARATION des variables
'Me = formulaire actif. On peut s'en passer lorsque le BOUTON est dans le formulaire concerné
Dim Ws As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controles de cet UserForm
Private Sub UserForm_Initialize() 'OUVERTURE du formulaire
Dim J As Long 'déclare la variable J pour LIGNE
Dim I As Integer 'déclare la variable I pour COLONNE
'Affiche la liste déroulante intitulée "Recherche par DATE" de la colonne A de l'onglet DONNEES
Set Ws = Sheets("DONNEES") 'Stock le nom DONNEES dans une variable nommée WS.
I = Ws.Range("A" & Rows.Count).End(xlUp).Row 'récupère toutes les cellules de A à partir de la ligne 2 (la ligne 1 = titres)
'jusquà la dernière cellule NON VIDE en partant du bas vers le haut
For J = 2 To I 'Démarre à la ligne 2 jusqu'à la dernière ligne définie dans la variable J
With Me.ComboBox1
.AddItem Ws.Range("A" & J) 'spécifie les données à ajouter selon leur ligne de positionnement
End With
Next J
'Affiche la liste déroulante intitulée "Deplace" de la colonne A de l'onglet LISTE
Set Ws = Sheets("LISTE") 'Stocke le nom LISTE dans la variable nommée WS.
I = Ws.Range("A" & Rows.Count).End(xlUp).Row
For J = 2 To I
With Me.ComboBox2
.AddItem Ws.Range("A" & J)
End With
Next J
'Ainsi de suite
'Affiche la liste déroulante intitulée "Embar" de la colonne B de longlet LISTE
Set Ws = Sheets("LISTE")
I = Ws.Range("B" & Rows.Count).End(xlUp).Row
For J = 2 To I
With Me.ComboBox3
.AddItem Ws.Range("B" & J)
End With
Next J
'Affiche la liste déroulante intitulée "Nation" de la colonne C de l'onglet LISTE
Set Ws = Sheets("LISTE")
I = Ws.Range("C" & Rows.Count).End(xlUp).Row
For J = 2 To I
With Me.ComboBox4
.AddItem Ws.Range("C" & J)
End With
Next J
'Affiche la liste déroulante intitulée "Prof" de la colonne D de l'onglet LISTE
Set Ws = Sheets("LISTE")
I = Ws.Range("D" & Rows.Count).End(xlUp).Row
For J = 2 To I
With Me.ComboBox5
.AddItem Ws.Range("D" & J)
End With
Next J
'Affiche la liste déroulante intitulée "PaysResid" de la colonne E de l'onglet LISTE
Set Ws = Sheets("LISTE")
I = Ws.Range("E" & Rows.Count).End(xlUp).Row
For J = 2 To I
With Me.ComboBox6
.AddItem Ws.Range("E" & J)
End With
Next J
'Affiche la liste déroulante intulée "Sexe" de la colonne F de l'onglet LISTE
Set Ws = Sheets("LISTE")
I = Ws.Range("F" & Rows.Count).End(xlUp).Row
For J = 2 To I
With Me.ComboBox7
.AddItem Ws.Range("F" & J)
End With
Next J
'Affiche la liste déroulante intitulée "MotifVoyage" de la colonne G de l'onglet LISTE
Set Ws = Sheets("LISTE")
I = Ws.Range("G" & Rows.Count).End(xlUp).Row
For J = 2 To I
With Me.ComboBox8
.AddItem Ws.Range("G" & J)
End With
Next J
'Affiche la liste déroulante intitulée "ModeHeber" de la colonne H de l'onglet LISTE
Set Ws = Sheets("LISTE")
I = Ws.Range("H" & Rows.Count).End(xlUp).Row
For J = 2 To I
With Me.ComboBox9
.AddItem Ws.Range("H" & J)
End With
Next J
End Sub
Private Sub CommandButton3_Click() 'Bouton ENREGISTRER
Dim L As Integer 'Ligne
'condition : si oui au message
If MsgBox("Etes-vous certain de vouloir INSERER ce nouveau contact ?", vbYesNo, "Demande de confirmation") = vbYes Then
L = Sheets("DONNEES").Range("A" & Rows.Count).End(xlUp).Row + 1 'Position sur la dernière ligne NON VIDE de la colonne A
Range("A" & L).Value = ComboBox1 'Insère le contenu de "recherche par Date" dans DONNEES à la colonne A ("Date")
Range("B" & L).Value = ComboBox2 'Insère le contenu de "Deplace" (colonne A de LISTE) dans B ("Déplacement") de DONNEES
'Ainsi de suite avec :
Range("C" & L).Value = ComboBox3 '"Embar"
Range("D" & L).Value = ComboBox4 '"Nation"
Range("E" & L).Value = ComboBox5 '"Prof"
Range("F" & L).Value = ComboBox6 '"PaysResid"
Range("G" & L).Value = TextBox11 'Insère le contenu de "Durée du séjour" dans DONNEES en G
Range("H" & L).Value = TextBox7 'Insère le contenu de "Date de naissance" dans DONNEES en H
Range("I" & L).Value = ComboBox7 '"Sexe"
Range("J" & L).Value = ComboBox8 '"MotifVoya"
Range("K" & L).Value = ComboBox9 '"ModeHeber"
End If
'Code permettant de modifier le format de la plage de cellule en format nombre
'With Ws.Range("F2:F10")
'.NumberFormat = "0"
'.Value = .Value
'End With
'Affiche une boîte de message
MsgBox ("Produit inséré dans le fichier sélectionné") 'Informe que le présent contact est insérer dans Donnees
Unload Me 'Vide et ferme l'Userform (formulaire)
UserForm1.Show 'Affiche le formulaire
End Sub
Exemple d'adaptation de code au Userform non réussi (et je me demande pourquoi !?) :
Private Sub ComboBox1_Change() 'Liste déroulante RECHERCHE (par DATE en A).
Dim ligne As Long
Dim I As Integer
'ComboBox1.ColumnCount = 1 'Indique une colonne. On peut s'en passer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox1.ListIndex + 2
If Me.ComboBox2.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox2.ListIndex + 2
If Me.ComboBox3.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox3.ListIndex + 2
If Me.ComboBox4.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox4.ListIndex + 2
If Me.ComboBox5.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox5.ListIndex + 2
If Me.ComboBox6.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox6.ListIndex + 2
If Me.ComboBox7.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox7.ListIndex + 2
If Me.ComboBox8.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox8.ListIndex + 2
If Me.ComboBox9.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox9.ListIndex + 2
For I = 1 To 2
Me.Controls("TextBox" & I) = Ws.Cells(ligne, I + 1)
Next I
End Sub
Private Sub CommandButton4_Click() 'Bouton SUPPRIMER
'Supprimer la ligne sélectionnée
Dim L As Long
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
L = Me.ComboBox1.ListIndex + 2
Ws.Rows(L).Delete
End Sub
Private Sub CommandButton2_Click() 'Bouton MODIFIER
If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
Dim ligne As Long
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
ligne = Me.ComboBox1.ListIndex + 2 'est la ligne de la ComboBox1. Si on place 2 ou 3, il y aura rajout de lignes
If Me.ComboBox2.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox2.ListIndex + 2
If Me.ComboBox3.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox3.ListIndex + 2
If Me.ComboBox4.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox4.ListIndex + 2
If Me.ComboBox5.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox5.ListIndex + 2
If Me.ComboBox6.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox6.ListIndex + 2
If Me.ComboBox7.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox7.ListIndex + 2
If Me.ComboBox8.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox8.ListIndex + 2
If Me.ComboBox9.ListIndex = -1 Then Exit Sub
ligne = Me.ComboBox9.ListIndex + 2
For I = 1 To 2
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(ligne, I + 1) = Me.Controls("TextBox" & I)
End If
Next I
End If
'Code permettant de modifier le format de la plage de cellule en format nombre
'With Ws.Range("D2:D10") 'Inutile pour l'instant
'.NumberFormat = "0"
'.Value = .Value
'End With
End Sub
Au sujet de l'affichage du Userform en plein écran, il y' a plusieurs codes que je trouve incomplet et qui donne des résultats comme userform : figé ; qui ne fonctionnent pas ou difficile à adapter dans un autre contexte.
Quelqu'un peut-il me venir en aide?
Merci d'avance,