[VBA]Enregistrer userform dan onglet caché

Résolu/Fermé
Polhackov - 11 janv. 2012 à 14:05
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 12 janv. 2012 à 10:46
Bonjour,
Je débute le VBA, et j'aimerais savoir s'il était possible d'afficher un formulaire sans que la feuille, sur laquelle sont enregistrées les données du formulaire, ne s'affiche.
Par exemple, j'ai une feuille "accueil" et j'aimerais ouvrir un formulaire qui va enregistrer des données dans la feuille "production". Cependant, à chaque fois que j'ouvre le formulaire, je suis automatiquement redirigé sur la feuille "production", alors que je souhaite remplir le formulaire sur la feuille "accueil".
Cordialement,
Polhackov.
A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
11 janv. 2012 à 14:11
Bonjour,
Dans le code de ton userform, tu dois avoir une (ou des) lignes de code ressemblant à : Sheets("production").Select ou Sheets("production").Activate
Il faut remplacer tout cela par des blocs With End With, tant que tu utilises cette feuille, et ajouter des . devant les objets utilisés dans cette feuille.
Exemple :
Sheets("production").Select 
ActiveSheet.Range("A1") = "coucou"
Range("A2") = "Merci Pijaku"

Sera à remplacer par :
With Sheets("production")
    .Range("A1") = "coucou"
    .Range("A2") = "Merci Pijaku"
End With 

L'avantage de cette méthode est justement de pouvoir travailler sur des feuilles masquées...
Si tu as des difficultés à adapter, mets nous ici tout ton code et on y jettera un oeil...
1
C'est dans le Userform_Activate qu'il faut le mettre? J'ai essayé de remplacer dans mon code mais je ne vois pas où l'insérer et du coup ça ne fonctionne pas.

Private Sub Userform_Activate()
Dim enregistrement As Long
Range("A2").Select
T_DATE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_AGENT.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_ACTIVITE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_SS_ACT.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
T_QUANTITE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_TEMPS.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
T_COMMENTAIRES.Text = ActiveCell()

Range("A65536").Select
Selection.End(xlUp).Select
enregistrement = ActiveCell.Row
ScrollBar1.Max = enregistrement
ScrollBar1.Min = 2
End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
11 janv. 2012 à 14:40
Ce code, seul, n'est pas assez explicite.
Peux tu, stp, soit nous communiquer une copie de ton classeur, sans données confidentielles, soit nous donner TOUT les codes VBA contenus dans ton classeur.
Merci
0
' ******************** BOUTON AJOUTER ************************

Private Sub B_AJOUTER_Click()
If B_AJOUTER.Caption = "Ajouter" Then
B_AJOUTER.Caption = "Valider"
B_MODIFIER.Enabled = False
B_SUPPRIMER.Enabled = False
B_FERMER.Enabled = False
T_DATE.Locked = False
CB_AGENT.Locked = False
CB_ACTIVITE.Locked = False
CB_SS_ACT.Locked = False
T_QUANTITE.Locked = False
CB_TEMPS.Locked = False
T_COMMENTAIRES.Locked = False
ScrollBar1.Enabled = False

B_FIRST.Enabled = False
B_LAST.Enabled = False
B_OK.Enabled = False
B_RECHERCHER.Enabled = False

T_DATE.Text = Date
CB_AGENT.Text = ""
CB_ACTIVITE.Text = ""
CB_SS_ACT.Text = ""
T_QUANTITE.Text = ""
CB_TEMPS.Text = ""
T_COMMENTAIRES.Text = ""
Else
B_AJOUTER.Caption = "Ajouter"
B_MODIFIER.Enabled = True
B_SUPPRIMER.Enabled = True
B_FERMER.Enabled = True
T_DATE.Locked = True
CB_AGENT.Locked = True
CB_ACTIVITE.Locked = True
CB_SS_ACT.Locked = True
T_QUANTITE.Locked = True
CB_TEMPS.Locked = True
T_COMMENTAIRES.Locked = True
ScrollBar1.Enabled = True

B_FIRST.Enabled = True
B_LAST.Enabled = True
B_OK.Enabled = True
B_RECHERCHER.Enabled = True

ScrollBar1.Max = ScrollBar1.Max + 1
Range("A" & ScrollBar1.Max).Select
ActiveCell.Value = DateValue(T_DATE.Text)
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = CB_AGENT.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = CB_ACTIVITE.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = CB_SS_ACT.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = T_QUANTITE.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = CB_TEMPS.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = T_COMMENTAIRES.Text
ScrollBar1.Value = ScrollBar1.Max
End If
End Sub

' ******************** BOUTON FERMER ************************

Private Sub B_FERMER_Click()
End
End Sub

' **************** BOUTON ALLER AU PREMIER ************************

Private Sub B_FIRST_Click()
ScrollBar1.Value = ScrollBar1.Min
End Sub

' ***************** BOUTON ALLER AU DERNIER ************************

Private Sub B_LAST_Click()
ScrollBar1.Value = ScrollBar1.Max
End Sub

' ******************** BOUTON MODIFIER ************************

Private Sub B_MODIFIER_Click()
If B_MODIFIER.Caption = "Modifier" Then
B_MODIFIER.Caption = "Valider"
B_AJOUTER.Enabled = False
B_SUPPRIMER.Enabled = False
B_FERMER.Enabled = False
T_DATE.Locked = False
CB_AGENT.Locked = False
CB_ACTIVITE.Locked = False
CB_SS_ACT.Locked = False
T_QUANTITE.Locked = False
CB_TEMPS.Locked = False
T_COMMENTAIRES.Locked = False
ScrollBar1.Enabled = False

B_FIRST.Enabled = False
B_LAST.Enabled = False
B_OK.Enabled = False
B_RECHERCHER.Enabled = False
Else
B_MODIFIER.Caption = "Modifier"
B_AJOUTER.Enabled = True
B_SUPPRIMER.Enabled = True
B_FERMER.Enabled = True
T_DATE.Locked = True
CB_AGENT.Locked = True
CB_ACTIVITE.Locked = True
CB_SS_ACT.Locked = True
T_QUANTITE.Locked = True
CB_TEMPS.Locked = True
T_COMMENTAIRES.Locked = True
ScrollBar1.Enabled = True

B_FIRST.Enabled = True
B_LAST.Enabled = True
B_OK.Enabled = True
B_RECHERCHER.Enabled = True

'enregistrement des modifications
Range("A" & ScrollBar1.Value).Select
ActiveCell.Value = DateValue(T_DATE.Text)
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = CB_AGENT.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = CB_ACTIVITE.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = CB_SS_ACT.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = T_QUANTITE.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = CB_TEMPS.Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = T_COMMENTAIRES.Text
End If

End Sub

' ****************** BOUTON VALIDATION ************************

Private Sub B_OK_Click()
If T_NUM > 65536 Or T_NUM < 1 Then
tip = MsgBox("Veuillez saisir un numéro d'enregistrement dans les limites du tableur.", vbCritical + vbOKOnly, "Saisie hors champ")
Else
T_DATE.Text = Range("A" & T_NUM.Value).Select
T_DATE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_AGENT.Text = Range("B" & T_NUM.Value).Select
CB_AGENT.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_ACTIVITE.Text = Range("C" & T_NUM.Value).Select
CB_ACTIVITE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_SS_ACT.Text = Range("D" & T_NUM.Value).Select
CB_SS_ACT.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
T_QUANTITE.Text = Range("E" & T_NUM.Value).Select
T_QUANTITE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_TEMPS.Text = Range("F" & T_NUM.Value).Select
CB_TEMPS.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
T_COMMENTAIRES.Text = Range("G" & T_NUM.Value).Select
T_COMMENTAIRES.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
End If
End Sub

' ****************** BOUTON RECHERCHER ************************

Private Sub B_RECHERCHER_Click()
If B_OK.Visible = True Then
B_OK.Visible = False
L_NUM.Visible = False
T_NUM.Visible = False
T_NUM.Text = ""
Else
B_OK.Visible = True
L_NUM.Visible = True
T_NUM.Visible = True
End If
End Sub

' ******************** BOUTON SUPPRIMER ************************

Private Sub B_SUPPRIMER_Click()
bouton = MsgBox("Voulez-vous supprimer cet enregistrement?", vbYesNo + vbQuestion, "Suppression d'un enregistrement")
If bouton = 6 Then
Rows(ScrollBar1.Value & ":" & ScrollBar1.Value).Select
Selection.Delete shift:=xlUp
ScrollBar1.Max = ScrollBar1.Max - 1
ScrollBar1.Value = ScrollBar1.Max
End If
End Sub

' ******************** SCROLLBAR ************************

Private Sub ScrollBar1_Change()
Range("A" & ScrollBar1.Value).Select
T_DATE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_AGENT.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_ACTIVITE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_SS_ACT.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
T_QUANTITE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_TEMPS.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
T_COMMENTAIRES.Text = ActiveCell()
End Sub

' ***************** FORMALISATION DU TEMPS ************************

Private Sub CB_TEMPS_Change()
Me.CB_TEMPS = Format(CB_TEMPS.Text, "hh:mm")
End Sub

Private Sub CB_TEMPS_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890:", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

' **************** FORMALISATION DE LA DATE ************************

Private Sub T_DATE_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890/", Chr(KeyAscii)) = 0 Then KeyAscii = 0

End Sub

' ***************** FORMALISATION DES PAGES ************************

Private Sub T_NUM_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0

End Sub

' **************** ACTIVATION DU FORMULAIRE ************************

Private Sub Userform_Activate()
Dim enregistrement As Long
Range("A2").Select
T_DATE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_AGENT.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_ACTIVITE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_SS_ACT.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
T_QUANTITE.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
CB_TEMPS.Text = ActiveCell()
ActiveCell.Offset(0, 1).Select
T_COMMENTAIRES.Text = ActiveCell()

Range("A65536").Select
Selection.End(xlUp).Select
enregistrement = ActiveCell.Row
ScrollBar1.Max = enregistrement
ScrollBar1.Min = 2
End Sub

' **************** INITIALISATION DU FORMULAIRE ****************

Private Sub UserForm_Initialize()

'Initialisation de la CB_AGENT sans suppression des doublons
Dim Tablo() As String
Dim Plage As Range, Cell As Range
Dim i As Integer

With Sheets("Accueil")
Set Plage = .Range("B2:B" & .Range("B65536").End(xlUp).Row)
End With

ReDim Tablo(0 To Plage.Rows.Count - 1)
For Each Cell In Plage
Tablo(i) = Cell.Text
i = i + 1
Next
Me.CB_AGENT.List = Tablo()


'Initialisation de la CB_ACTIVITE avec suppression des doublons
Dim j As Integer

For j = 2 To Sheets("Accueil").Range("F65536").End(xlUp).Row
CB_ACTIVITE = Sheets("Accueil").Range("F" & j)
If CB_ACTIVITE.ListIndex = -1 Then CB_ACTIVITE.AddItem Sheets("Accueil").Range("F" & j)
Next j


'Initialisation de la CB_SS_ACT avec suppression des cases vides
Dim k As Integer

For k = 3 To Sheets("Accueil").Range("G65536").End(xlUp).Row
CB_SS_ACT = Sheets("Accueil").Range("G" & k)
If CB_SS_ACT.ListIndex = -1 Then
If CB_SS_ACT.Text = "" Then

Else
CB_SS_ACT.AddItem Sheets("Accueil").Range("G" & k)
End If
End If
Next k
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
11 janv. 2012 à 17:02
Tu va sans doute me trouver lourd, mais je ne vois nulle part le mot production, ni aucunement de propriété visible réglée à true pour des feuilles.
Je ne comprends donc toujours pas comment tu arrives sur la feuille "production".

Bref, passons.
Quel bouton t'envoie les données saisies dans le UserForm, dans ta feuille "production"?
0
J'ai remplacé "production personnelle" par "production" dans mon explication pour être le plus concis possible.
C'est le bouton ajouter et le bouton modifier qui peuvent accéder aux données sur ma feuille "production personnelle".
Merci, de prendre du temps pour me répondre.
0
Je viens de réussir à faire ce que je voulais. Merci pijaku de m'avoir accordé de ton temps et de m'avoir aiguillé.
Il était bien question des sheets("production").activate et .visible à mettre en place. C'est quand même étrange parce que j'ai fait la même chose qu'hier, et, aujourd'hui, ça marche. Les mystères de la programmation...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
12 janv. 2012 à 10:46
Tant mieux. Mais je le répète, nulle part dans tes codes n'apparaissent les Sheets("production") etc...
Donc...
Tant mieux si cela fonctionne today!
Bonne route
A+
0