Bonjour,
Totalement novice avec VBA, je me suis cependant lancé il y a quelques jours dans la réalisation d’un formulaire auquel j’ai associé un bouton qui, lorsqu’il est activé, transfert les cellules dans ma base de données.
Cela a été réalisé grâce aux conseils de bénévoles de cette liste et je les en remercie vivement.
Aujourd’hui cela fonctionne bien et je souhaite apporter des améliorations notamment en ce qui concerne la validité des données saisies par l’utilisateur puisque ce dernier peut valider un formulaire à ‘blanc’ ce qui a pour effet de me générer des lignes vides dans ma base.
Tous les champs que je veux tester ne sont pas alimentés de la même manière :
- E7 : saisi par l’utilisateur (date)
- E9 – E11 – E13 – E17 : choisi par l’utilisateur dans une liste déroulante
- E21 – Montant saisi par l’utilisateur
J’ai consulté de nombreux site mais je n’ai pas trouvé (ou peut-être pas bien compris) comment rédiger ma requête.
J’ai testé ceci… mais ‘Me’ n’est pas correct !
Loop
‘Tester la saisie des champs du formulaire’
If Len (Me.E7) = 0 Then
lblMessage = "Veuillez saisir la date d’opération"
Me.E7.SetFocus
ElseIf Len (Me.E9) = 0 Then
lblMessage = "Veuillez sélectionner une opération dans la liste"
Me.E9.SetFocus
ElseIf Len (Me.E11) = 0 Then
lblMessage = "Veuillez sélectionner une catégorie dans la liste"
Me.E11.SetFocus
ElseIf Len (Me.E13) = 0 Then
lblMessage = "Veuillez sélectionner un poste dans la liste"
Me.E13.SetFocus
ElseIf Len (Me.E17) = 0 Then
lblMessage = "Veuillez sélectionner un support dans la liste"
Me.E17.SetFocus
ElseIf Len (Me.E21) = 0 Then
lblMessage = "Veuillez saisir un montant"
Me.E21.SetFocus
Else
Puis en fin de macro j’ai ajouté End If
Mon vocabulaire VBA peut peut-être en surprendre certains mais je fais du mieux que je peux, toutes mes excuses.
Merci à vous de m’aider à progresser.
Cordialement
Jean
Bonjour,
Je m'aperçois ce jour que ma réponse d'hier n'a pas fonctionnée !!!
Voici le contenu :
Sub AlimentationBaseDonnées()
'
' AlimentationBaseDonnées Macro
'
'Loop
‘Tester la saisie des champs du formulaire’
If Len (Me.E7) = 0 Then
lblMessage = "Veuillez saisir la date d’opération"
Me.E7.SetFocus
ElseIf Len (Me.E9) = 0 Then
lblMessage = "Veuillez sélectionner une opération dans la liste"
Me.E9.SetFocus
ElseIf Len (Me.E11) = 0 Then
lblMessage = "Veuillez sélectionner une catégorie dans la liste"
Me.E11.SetFocus
ElseIf Len (Me.E13) = 0 Then
lblMessage = "Veuillez sélectionner un poste dans la liste"
Me.E13.SetFocus
ElseIf Len (Me.E17) = 0 Then
lblMessage = "Veuillez sélectionner un support dans la liste"
Me.E17.SetFocus
ElseIf Len (Me.E21) = 0 Then
lblMessage = "Veuillez saisir un montant"
Me.E21.SetFocus
Else
Sheets("Base").Select
ActiveSheet.Unprotect "toto"
Rows("2:2").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A2").Select
ActiveCell.FormulaR1C1 = "=R[1]C+1"
Range("C2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[5]=""CDD"",EOMONTH(RC[-1],0),RC[-1])"
Range("L2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-8]=""Dépense"",R[1]C-RC[-2],R[1]C+RC[-2])"
Range("M2").Select
ActiveCell.FormulaR1C1 = _
"=IF(AND(RC[-9]=""Dépense"",RC[-5]=""CDD"",RC[-10]<>RC[-2]),R[1]C,IF(AND(RC[-9]=""Dépense"",RC[-5]=""CDD"",RC[-10]=RC[-2]),R[1]C-RC[-3],IF(AND(RC[-9]=""Dépense"",RC[-5]<>""CDD""),R[1]C-RC[-3],IF(RC[-9]=""Recette"",R[1]C+RC[-3],0))))"
Range("M3").Select
Sheets("CreOp").Select
Range("E7").Select
Selection.Copy
Sheets("Base").Select
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E9").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("D2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E11").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("E2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E13").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("F2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E15").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("G2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E17").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("H2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E19").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("I2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E21").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("J2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Application.CutCopyMode = False
Range("E7,E9,E11,E13,E15,E17,E19,E21").Select
Range("E21").Activate
Selection.ClearContents
Sheets("Base").Select
ActiveSheet.Protect Password:="toto", DrawingObjects:=True, Contents:=True, Scenarios:=True
Bonsoir yg,
Voici l'image de ma feuille Excel dans laquelle se trouve mon formulaire.
J'espère que cela va te permettre d'avoir une meilleurs visualisation de ma requête.
Encore merci de ton attention.
Cordialement
Jean
Bonjour Yb,
Je n'ai pas trouvé de solution idéale, je me suis réfugié sur une astuce donnée par un autre membre du forum en utilisant la mise en forme conditionnelle.
Encore merci de ton attention
Cordialement
il me semble que tu confonds deux concepts:
- les champs de ton formulaire (Me.E7)
- les cellules dans les feuilles Access (Range("E7"))
peux-tu partager ton fichier?
Je m'aperçois ce jour que ma réponse d'hier n'a pas fonctionnée !!!
Voici le contenu :
Sub AlimentationBaseDonnées()
'
' AlimentationBaseDonnées Macro
'
'Loop
‘Tester la saisie des champs du formulaire’
If Len (Me.E7) = 0 Then
lblMessage = "Veuillez saisir la date d’opération"
Me.E7.SetFocus
ElseIf Len (Me.E9) = 0 Then
lblMessage = "Veuillez sélectionner une opération dans la liste"
Me.E9.SetFocus
ElseIf Len (Me.E11) = 0 Then
lblMessage = "Veuillez sélectionner une catégorie dans la liste"
Me.E11.SetFocus
ElseIf Len (Me.E13) = 0 Then
lblMessage = "Veuillez sélectionner un poste dans la liste"
Me.E13.SetFocus
ElseIf Len (Me.E17) = 0 Then
lblMessage = "Veuillez sélectionner un support dans la liste"
Me.E17.SetFocus
ElseIf Len (Me.E21) = 0 Then
lblMessage = "Veuillez saisir un montant"
Me.E21.SetFocus
Else
Sheets("Base").Select
ActiveSheet.Unprotect "toto"
Rows("2:2").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A2").Select
ActiveCell.FormulaR1C1 = "=R[1]C+1"
Range("C2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[5]=""CDD"",EOMONTH(RC[-1],0),RC[-1])"
Range("L2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-8]=""Dépense"",R[1]C-RC[-2],R[1]C+RC[-2])"
Range("M2").Select
ActiveCell.FormulaR1C1 = _
"=IF(AND(RC[-9]=""Dépense"",RC[-5]=""CDD"",RC[-10]<>RC[-2]),R[1]C,IF(AND(RC[-9]=""Dépense"",RC[-5]=""CDD"",RC[-10]=RC[-2]),R[1]C-RC[-3],IF(AND(RC[-9]=""Dépense"",RC[-5]<>""CDD""),R[1]C-RC[-3],IF(RC[-9]=""Recette"",R[1]C+RC[-3],0))))"
Range("M3").Select
Sheets("CreOp").Select
Range("E7").Select
Selection.Copy
Sheets("Base").Select
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E9").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("D2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E11").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("E2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E13").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("F2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E15").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("G2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E17").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("H2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E19").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("I2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Range("E21").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Base").Select
Range("J2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("CreOp").Select
Application.CutCopyMode = False
Range("E7,E9,E11,E13,E15,E17,E19,E21").Select
Range("E21").Activate
Selection.ClearContents
Sheets("Base").Select
ActiveSheet.Protect Password:="toto", DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End Sub
Voici l'image de ma feuille Excel dans laquelle se trouve mon formulaire.
J'espère que cela va te permettre d'avoir une meilleurs visualisation de ma requête.
Encore merci de ton attention.
Cordialement
Jean
https://www.cjoint.com/c/HBxrFg0hEv7
Je n'ai pas trouvé de solution idéale, je me suis réfugié sur une astuce donnée par un autre membre du forum en utilisant la mise en forme conditionnelle.
Encore merci de ton attention
Cordialement