Contrôle des saisies de l'utilisateur

Résolu
zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   -  
Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir,
A la fin du déroulement d'une procédure, je demande à l'utilisateur de saisir des valeurs dans certaines cellules.
Après saisie, le clic sur un bouton de commande déclenche la procédure suivante.
Cependant je voudrais faire un contrôle sur les valeurs saisies et si besoin de demander une nouvelle saisie.
Eventuellement je pourrai afficher les zones de procédure concernées.
Merci d'avance
Cordialement

48 réponses

  • 1
  • 2
  • 3
Résumé de la discussion

Le problème porte sur la mise en place de contrôles des valeurs saisies par l'utilisateur dans une procédure, afin de valider les entrées et de redemander une saisie ou d’afficher les zones concernées si nécessaire. Une solution proposée consiste à implémenter dans VBA des vérifications qui comparent les totaux (par exemple Alimproposée, Alimcommandée, Coucheproposée, Couchecommandée), et qui déclenchent des MsgBox avec corrections à effectuer et activent les zones à corriger. En complément, certains répondants signalent des difficultés liées à l’accès ou à la lisibilité des paramètres, et proposent des pistes comme l'initialisation d'un formulaire utilisateur ou des vérifications dans une procédure distincte.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Un peu léger comme explication, pourquoi ne pas passer par un formulaire à remplir et une fois rempli et contrôlé vous renseignez les cellules adéquates !

    0
  2. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci pour vos réponses,
    Je m'adresse à "Le Pingou"
    En effet je suis toujours dans la même procédure que vous m'avez, aimablement, écrite.
    A la fin de la macro "Bilan_du_centre" l'utilisateur, après avoir rempli des cellules du fichier, doit cliquer sur le bouton "Bilan du centre" pour déclencher la macro "envoi_et_impression_bilan".
    Cependant je voudrais vérifier les valeurs entrées et obliger à faire les corrections.
    Je joins les 2 parties de procédure
    '15)    Message pour la saisie dans les cases jaunes.
    
                        Dim vRéponse1 As String
                        vRéponse1 = MsgBox("POUR UTILISER LES CASES JAUNES AFIN DE NOTER VOS MODIFICATIONS ET VOS DEMANDES" & Chr(10) & _
                        "POUR BEBES PAS PLUS DE PRODUITS COMMANDES QUE DE PRODUITS PROPOSES" & Chr(10) & _
                        " CLIQUEZ SUR LE BONTON OK" & Chr(10) & _
                        "APRES AVOIR INSCRIT VOS MODIFICATIONS ET DEMANDES CLIQUER SUR LE BOUTON" & Chr(10) & _
                        "BILAN DE LA SEMAINE", vbOKOnly, "OUVREZ BIEN LES YEUX")
    '16)    Vérification des quantités de produits pour Bébés.
    
                        Dim Alimproposée As String
                        Dim Alimcommandée As String
                        Dim Coucheproposée As String
                        Dim Couchecommandée As String
                        Alimproposée = Range("S23").Value + Range("S24").Value + Range("S25").Value _
                        + Range("S26").Value
                        Alimcommandée = Range("T23").Value + Range("T24").Value + Range("T25").Value _
                        + Range("T26").Value
                        Coucheproposée = Range("S28").Value + Range("S29").Value + Range("S30").Value _
                        + Range("S31").Value
                        Couchecommandée = Range("T28").Value + Range("T29").Value + Range("T30").Value _
                        + Range("T31").Value
                        
                                If Alimcommandée <= Alimproposée Then
                                        If Couchecommandée <= Couchecalculée Then
                                                GoTo 5
                                        Else
                                                vRépons10 = MsgBox _
                                                ("LA QUANTITE DE COUCHES COMMANDEE EST SUPERIEURE A CELLE PROPOSEE" _
                                                & Chr(10) & "VERIFIER AUSSI LA QUANTITE DE NOURRITURE" _
                                                & Chr(10) & "FAIRE LES CORRECTIONS", vbOKOnly, "VALEURS ERRONNEES")
                                                'GoTo 6
                                        End If
                                Else
                                        vRépons11 = MsgBox _
                                        ("LA QUANTITE DE NOURRITURE COMMANDEE EST SUPERIEURE A CELLE PROPOSEE" _
                                        & Chr(10) & "FAIRE LES CORRECTIONS", vbOKOnly, "VALEURS ERRONNEES")
                                        'GoTo 6
                                End If
                                                
    5
                        
    '16)   Affichage du bouton "BILAN DU CENTRE"
    
                        'Sheets("Bilan du centre").Select
                        ActiveSheet.Unprotect Password:="sotser"
                        ActiveSheet.Shapes("Bouton 8").Visible = True


    EDIT: Correction de la coloration syntaxique.
    0
  3. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Pardon, je n'ai pas su mettre à la suite la deuxième partie
    Je la renvoie en précisant qu'elle n'est pas terminée, je ne sais pas comment faire
    Cordialement
    '16)    Vérification des quantités de produits pour Bébés.
    
                        Dim Alimproposée As String
                        Dim Alimcommandée As String
                        Dim Coucheproposée As String
                        Dim Couchecommandée As String
                        Alimproposée = Range("S23").Value + Range("S24").Value + Range("S25").Value _
                        + Range("S26").Value
                        Alimcommandée = Range("T23").Value + Range("T24").Value + Range("T25").Value _
                        + Range("T26").Value
                        Coucheproposée = Range("S28").Value + Range("S29").Value + Range("S30").Value _
                        + Range("S31").Value
                        Couchecommandée = Range("T28").Value + Range("T29").Value + Range("T30").Value _
                        + Range("T31").Value
                        
                                If Alimcommandée <= Alimproposée Then
                                        If Couchecommandée <= Couchecalculée Then
                                                GoTo 5
                                        Else
                                                vRépons10 = MsgBox _
                                                ("LA QUANTITE DE COUCHES COMMANDEE EST SUPERIEURE A CELLE PROPOSEE" _
                                                & Chr(10) & "VERIFIER AUSSI LA QUANTITE DE NOURRITURE" _
                                                & Chr(10) & "FAIRE LES CORRECTIONS", vbOKOnly, "VALEURS ERRONNEES")
                                                'GoTo 6
                                        End If
                                Else
                                        vRépons11 = MsgBox _
                                        ("LA QUANTITE DE NOURRITURE COMMANDEE EST SUPERIEURE A CELLE PROPOSEE" _
                                        & Chr(10) & "FAIRE LES CORRECTIONS", vbOKOnly, "VALEURS ERRONNEES")
                                        'GoTo 6
                                End If
                                                
    5
                        
    '16)   Affichage du bouton "BILAN DU CENTRE"
    
                        'Sheets("Bilan du centre").Select
                        ActiveSheet.Unprotect Password:="sotser"
                        ActiveSheet.Shapes("Bouton 8").Visible = True
    0
  4. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci pour l'information.
    Je vais regarder le détail dans la soirée, patience.
    Note: prendre le message de Raymond (salutations) comme une petite gentillesse au passage.

    Salutations.
    Le Pingou
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    C'est du travail de capucin, sans connaitre le format des valeurs à traiter.
    Merci de me fournir la feuille qui contient les diverses propositions ou le mieux mettre le classeur sur https://www.cjoint.com/ et poster le lien.
    0
  7. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour zikey,
    Merci pour le classeur.
    En marge j'ai constaté qu'il y a beaucoup de module vide (aucune procédure), je vous propose de les supprimé puisque inutile.
    En fin de soirée votre code sera adapté, patience.

    0
  8. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci de me confirmer que les contrôles sont à effectuer dans la procédure [Bilan_de_la_semaine()]
    Si OK alors : Affichage du bouton "BILAN DU CENTRE"
    Si non alors faire corrections

    0
  9. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Votre contrôle me semble bizarre, les quantités maximum de 2, 3, 3, 7 et ensuite vous comparez avec le total soit 15 alors pour moi je commande 0, 0, 15,0 et c'est ok Oui / Non (donc peu importe l'attribution c'est le total qui compte)

    0
  10. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    En attendant vos réponses, j'ai modifié la partie de procédure selon la version d'origine :
    '16)    Vérification des quantités de produits pour Bébés.
    
    Dim Alimproposée As Integer
    Dim Alimcommandée As Integer
    Dim Coucheproposée As Integer
    Dim Couchecommandée As Integer
    
    Alimproposée = WorksheetFunction.Sum(Range("S23:S26"))
    Alimcommandée = WorksheetFunction.Sum(Range("T23:T26"))
    Coucheproposée = WorksheetFunction.Sum(Range("S28:S31"))
    Couchecommandée = WorksheetFunction.Sum(Range("T28:T31"))
                        
    If Alimcommandée > Alimproposée Then
        vRépons11 = MsgBox("LA QUANTITE DE NOURRITURE COMMANDEE EST SUPERIEURE A CELLE PROPOSEE" _
                    & Chr(10) & "FAIRE LES CORRECTIONS", vbOKOnly, "VALEURS ERRONNEES")
        Range("T23:T26").Activate
        Exit Sub
    ElseIf Couchecommandée > Coucheproposée Then
        vRépons10 = MsgBox("LA QUANTITE DE COUCHES COMMANDEE EST SUPERIEURE A CELLE PROPOSEE" _
                    & Chr(10) & "FAIRE LES CORRECTIONS", vbOKOnly, "VALEURS ERRONNEES")
        Range("T28:T31").Activate
        Exit Sub
    End If
    

    0
  11. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Concerne cette instruction :
    ActiveSheet.Shapes("Bouton 8").Visible = True
    
    
    Ne correspond à aucun objet ....est-ce correct ?

    0
  12. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,
    Ce sont bien les totaux qui sont comparés dans les 2 cas

    Le "Bouton 8" nommé "Bilan du centre" est masqué à l'ouverture du fichier "Bénéficiaires hiver 15-16" et est activé pour lancer la macro "envoi_et_impression"
    Ce bouton est situé dans la page "Bilan du centre"
    Dans la macro Open il faut neutraliser la macro "Suivi_enfants"
    Private Sub workbook_open()
    
    
    '01)    Lancement de la macro de mise à jour à l'ouverture du fichier "Bénéficiaires hiver 15-16".
    
                        ouverture_présences
        
        
    End Sub
    
    Sub ouverture_présences()
    
    
    
    ' 02)   Mise à jour de la feuille "Suivi Enfants".
    
                        suivi_enfants
                        
                        
    '03)    Masquage du bonton "BILAN DU CENTRE".
    
                        Sheets("Bilan du centre").Select
                        ActiveSheet.Unprotect Password:="sotser"
                        Range("T23").Select
                        Range("T23").Activate
                        ActiveSheet.Shapes("Bouton 8").Visible = False
                        ActiveSheet.Protect Password:="sotser", DrawingObjects:=True, Contents:=True, _
                        Scenarios:=True
                        
    '04)    Sélection de la cellule J9
    
                        Sheets("Saisir les Présences").Select
                        Range("J9").Select
                        Range("J9").Activate
                       
                    
    End Sub
    
    Sub suivi_enfants()
    
    
    '05)    Déverrouillage de la feuille "Suivi Enfants".
     
                        Sheets("Suivi Enfants").Select
                        ActiveSheet.Unprotect Password:="sotser"
                        
                        
    '06)    Suppression de la sélection de la semaine précédente.
                        
                        Range("E8:S8").Select
                        
                                With Selection.Font
                                        .ThemeColor = xlThemeColorLight1
                                        .TintAndShade = 0
                                End With
                                
                                With Selection.Interior
                                        .PatternColorIndex = xlAutomatic
                                        .ThemeColor = xlThemeColorDark1
                                        .TintAndShade = 0
                                        .PatternTintAndShade = 0
                                End With
                                
                                
    '07)    Sélection de la semaine en cours.
    
                        For s = 5 To 19
                        
                                If Cells(8, s).Value = Range("Q3").Value Then
                                        Cells(8, s).Select
                                        
                                                With Selection.Font
                                                        .ThemeColor = xlThemeColorDark1
                                                        .TintAndShade = 0
                                                End With
                                        
                                                With Selection.Interior
                                                        .Pattern = xlSolid
                                                        .PatternColorIndex = xlAutomatic
                                                        .Color = 16737843
                                                        .TintAndShade = 0
                                                        .PatternTintAndShade = 0
                                                End With
                                        
                                End If
                            
                        Next
                        
                        
    '08)    Sélection de la zone à traiter.
            
                        Rows("10:609").Select
                        Selection.EntireRow.Hidden = False
                        
                        
    '09)    Masquage des lignes concernant des enfants de plus de 18 mois.
            
                        For n = 10 To 609
            
                            If Cells(n, 20) = 0 Or Cells(n, 20) >= 285 Then
                    
                                Rows(n).Select
                                Selection.EntireRow.Hidden = True
                            
                            End If
                    
                        Next
                        
                        
    '10)    Verrouillage de la feuille "Suivi Enfants".
                  
                        Range("A1").Activate
                        ActiveSheet.Protect Password:="sotser", DrawingObjects:=True, Contents:=True, _
                        Scenarios:=True
    
    End Sub
    
    0
  13. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci pour l'information.
    Entre temps je l'avais trouvé.
    Quand est-il de la proposition du message 11 .... ?

    0
  14. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,
    Je viens d'intégrer la proposition 11 mais si j'entre des valeurs supérieures je n'ai pas de sortie de la macro.
    En effet on va jusqu'à la fin de la macro et donc le bouton 8 est visible et on peut continuer avec la macro "envoi_et_impression_bilan"

    Cordialement
    0
  15. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Non ce n'est pas possible.
    Vous devez avoir le message et la plage concernée sélectionnée et la macro est fermée.
    Vous ne pouvez pas continuer sans correction même en via le bouton 8.
    0
  16. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Eh bien je commence à comprendre ou le chat à mal à la patte.
    Dans la procédure vous voulez obliger à renseigner les plages jaunes (moi je pensais que c'était déjà fait...) donc il est préférable d'introduire un formulaire de saisie pour les 8 cellules et ensuite on contrôle et si bon on poursuit.
    Est-ce bien cela ?
    S'il faut renseigner d'autre plage c'est le moment..... !

    0
  17. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,
    C'est bien cela, j'avais pensé à un formulaire mais j'avais peur de changer les habitudes.
    En effet, actuellement pour la période été 2015, ils font bien la saisie mais il n'y a pas de contrôle de cohérence.
    Si on place un formulaire il faut que les nombres proposés soient visibles ou ils faut qu'ils apparaissent dans le formulaire
    Cordialement
    0
  18. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Je vais me lancer dans la création du formulaire mais je pense que je vais sûrement galérer pour les liens !
    0
  19. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    A force de réflexion essayez cette proposition sans formulaire :
    '16)    '16)    Vérification des quantités de produits pour Bébés.
    
    Dim Alimproposée As Integer
    Dim Alimcommandée As Integer
    Dim Coucheproposée As Integer
    Dim Couchecommandée As Integer
    
    coplja:
    If contpl = False Then
        Alimproposée = WorksheetFunction.Sum(Range("S23:S26"))
        Alimcommandée = WorksheetFunction.Sum(Range("t23:t26"))
        Coucheproposée = WorksheetFunction.Sum(Range("S28:S31"))
        Couchecommandée = WorksheetFunction.Sum(Range("t28:t31"))
                            
        If Alimcommandée > Alimproposée Then
            vRépons11 = MsgBox("LA QUANTITE DE NOURRITURE COMMANDEE EST SUPERIEURE A CELLE PROPOSEE" _
                        & Chr(10) & "FAIRE LES CORRECTIONS", vbOKOnly, "VALEURS ERRONNEES")
            Range("T23:T26").Activate
            GoTo coplja
        ElseIf Couchecommandée > Coucheproposée Then
            vRépons10 = MsgBox("LA QUANTITE DE COUCHES COMMANDEE EST SUPERIEURE A CELLE PROPOSEE" _
                        & Chr(10) & "FAIRE LES CORRECTIONS", vbOKOnly, "VALEURS ERRONNEES")
            Range("T28:T31").Activate
            GoTo coplja
        End If
        contpl = True
    End If

    0
  20. zikey Messages postés 119 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,
    C'est bien embêtant mais il n'y a pas d'évolution
    Cordialement
    0
  21. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Oui c'est de ma faute j'ai voulu le faire rapidement sans tester comme il se doit.
    Cela semblait bon en réalisant le pas à pas, mais évidemment pas en exécution normale.
    Je vais le reprendre, je pense en fin de soirée se sera bon, patience.

    0
  • 1
  • 2
  • 3