[VBA]Enregistrer userform dan onglet caché

Résolu
Polhackov -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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.

3 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. Polhackov
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. Polhackov
       
      ' ******************** 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
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. Polhackov
       
      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
    2. Polhackov
       
      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
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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