vba - validation de données

  • Initiateur de la discussion Initiateur de la discussion elisa27
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

E

elisa27

Guest
Bonsoir,

Je souhaiterais restreindre les possibilités de saisie sur une cellule et n'accepter:
que les dates d'aujourd'hui à + 180 j
que les jours autres que le dimanche
pas les jours fériés figurant dans une liste

voir le fichier ci-joint dans lequel j'ai créé un code mais qui ne donne pas les résultats escomptés.

Merci d'avance
 

Pièces jointes

Re : vba - validation de données

Je reprends le fil avec du retard... j'ai été distraite sur un autre sujet...
Merci beaucoup Papou-net mais j'espérais que le contrôle se fasse au moment de saisie de la date... Est ce possible ?

Merci d'avance
 
Re : vba - validation de données

Je reprends le fil avec du retard... j'ai été distraite sur un autre sujet...
Merci beaucoup Papou-net mais j'espérais que le contrôle se fasse au moment de saisie de la date... Est ce possible ?

Merci d'avance

Bien sur, rien de plus facile.

Voici donc la nouvelle version.

Cordialement.
 

Pièces jointes

Re : vba - validation de données

En y réfléchissant bien j'ai une autre question.
Imaginons que j'utilise la cellule D3 pour 2 saisies de données avec des contraintes différentes.
Par exemple j'ai un premier programme vba dans le lequel j'autorise dans D3 la saisie d'une date en tenant compte des jours fériés (+ date aujourdhui() à 180 jours) et un 2ème programme où D3 accepte les jours fériés (+date aujourdhui() à 180 j)

Est-il possible de gérer ces 2 possiblités ?

Merci d'avance
 
Re : vba - validation de données

En y réfléchissant bien j'ai une autre question.
Imaginons que j'utilise la cellule D3 pour 2 saisies de données avec des contraintes différentes.
Par exemple j'ai un premier programme vba dans le lequel j'autorise dans D3 la saisie d'une date en tenant compte des jours fériés (+ date aujourdhui() à 180 jours) et un 2ème programme où D3 accepte les jours fériés (+date aujourdhui() à 180 j)

Est-il possible de gérer ces 2 possiblités ?

Merci d'avance

Bonjour Elisa,

A ta question je réponds oui, mais il me faut quelques précisions :

Qu'entends-tu par programme ? Veux-tu dire par là que dans le même classeur, tu peux vouloir saisir ou interdire la saisie des jours fériés? Et, si oui, peux-tu décrire à quel endroit de ton programme tu définis cette possibilité ?

Dans cette attente.

Cordialement.
 
Re : vba - validation de données

En fait, j'ai une feuille qui me sert à la création, la modification d'ordres de fabrication et la saisie de réalisation de production. Une fois ces 3 opérations effectuées les données sont enregistrées sur une autre feuille.

J'ai donc 3 programmes pour mettre en forme ces formulaires qui se ressemblent beaucoup. L'opérateur a le chois par l'intermédiaire de 3 boutons de soit:
créer
modifier
ou enregistrer la production
Je peux donc avoir sur une même feuille une cellule qui va être utilisée pour la saisie de données avec des critères différents (création, modification ou enregistrement) en fonction du choix initial de l'opérateur

Je ne sais pas si mes explications sont claires ?....
 
Re : vba - validation de données

Re-bonjour Elisa,

Alors voilà une solution à adapter à ton programme :

J'ai affecté la cellule B3 pour le test des jours fériés. Si cette cellule contient "FAUX", alors on saute le test des jours fériés, Si elle contient "OUI", le test est réalisé. Pour cet exemple, j'ai créé un checkbox pour changer le contenu de B3. Dans ton cas, il suffit de prévoir, dans chacun de tes boutons de programme, d'affecter la valeur adéquate à B3.
Tu peux rendre cette cellule invisible en lui donnant la même couleur de texte et de fond, ou la déplacer dans une colonne masquée.

Espérant avoir répondu.

Cordialement.
 

Pièces jointes

Re : vba - validation de données

Merci Papou-net, je commence à voir la solution.
Le principe est donc de créer une condition sur prog1. Peut-on envisager d'affecter une valeur à une variable (ex: if x=1 then....). Dans ce cas la variable est affectée dans mes programmes (création, modification ou saisie de production).
Par contre, ce que je ne sais pas faire c'est que la variable x à laquelle j'ai attribuée une valeur dans le programme "saisie" soit prise en compte dans le programme prog1. Peux tu me dire si c'est possible ?
D'autre part que veut dire "Public TestFerie As Boolean" au dessus de prog1 ?
Dernière question: prog1 envoi un message si la saisie n'est pas conforme mais peut-on envisager d'empêcher la prise en compte de la saisie en plus ?

Merci d'avance
 
Re : vba - validation de données

Oui, tu vois bien la solution.

Concernant la variable pour tester la condition, c'est ce que j'avais commencé à faire en déclarant la variable publique TestFerie", qui ne peut prendre que 2 valeurs : TRUE ou FALSE.
Puis j'ai décidé d'affecter plutôt cette valeur à la cellule B3 : cette solution présente l'avantage de rester en mémoire lors de la fermeture du fichier, alors que la variable TestFerie sera réinitialisée à FALSE à chaque réouverture du fichier.
Si tu tiens absolument à passer par cette variable, tu dois donc modifier ton code de cette façon :

Remplacer
Code:
If Sheets("Feuil1").Range("B3") = False Then Exit Sub
par
Code:
If TestFerie = False Then Exit Sub

Puis en début de chacun de tes programmes de lancement, prévoir la ligne d'initialisation de la variable, ex :

Code:
Sub CommandButton1_Click()
TestFerie = True
....
....
End Sub

Sub CommandButton2_Click()
TestFerie = False
....
....
End Sub

Concernant ta dernière question :

prog1 envoi un message si la saisie n'est pas conforme mais peut-on envisager d'empêcher la prise en compte de la saisie en plus ?

J'avoue ne pas en comprendre le fond. Peux-tu développer ce point, stp ?

Dans cette attente.

Cordialement.
 
Re : vba - validation de données

Concernant la saisie: ce fichier est destiné à des opérateurs qui ont des difficultés à manipuler excel, j'ai donc besoin de limiter au maximum les possibilités d'erreurs de saisie.
Le fait qu'ils voient un message lorsqu'ils font une erreur est important mais l'idéal serait que lorsqu'ils inscrivent une erreur ils ne puissent pas enregistrer cette erreur.
J'ai bien un bouton pour enregistrer une fois les données saisies (programme dans lequel je pourrais contrôler ces saisies et refuser l'enregistrement) mais "l'idéal" serait qu'au moment où on quitte la cellule de saisie le message s'affiche et que la cellule se mette à blanc par exemple...
Concernant la variable publique, je suppose quelle est prise en compte dans tous les module de vba, Thisworkbook(?) et les Feuilles(?) du fichier dans lequel elle se trouve. Mais peut-on aussi envisager qu'elle soit prise en compte dans plusieurs fichiers ouverts ?

Merci encore
 
Re : vba - validation de données

Bonsoir Elisa,

Voici donc la version 4 de ton fichier. Pour faire les tests, j'ai conservé le CheckBox sur la Feuille 1, mais dans ta version finale, tu peux bien sûr le supprimer.

Pour répondre à tes questions :

- La variable TestFerie est visible partout dans le programme, puisqu'elle est déclarée "Public". Pour retrouver sa dernière valeur, je la stocke dans la cellule P1 (masquée), lors de la sauvegarde du fichier (voir ThisWorkbook, Private Sub Workbook_BeforeSave). Elle est ensuite récupérée lors de l'ouverture (voir ThisWorkbook, Private Sub Workbook_Open).

- Quant à la rendre accessible dans d'autres fichiers, je n'ai encore jamais fait mais il me semble qu'il faille la mettre dans une macro complémentaire, et charger cette macro au lancement d'Excel. Je tâcherai d'y regarder, si tu ne trouves pas la réponse sur ce forum.

Cordialement.
 

Pièces jointes

Re : vba - validation de données

Merci Papou-net,
J'ai remarqué à la suite du message la mise à blanc de la cellule et l'astuce pour conserver la variable après fermeture du fichier est importante.
Je regarderai sur le forum pour la variable utilisable sur plusieurs fichiers.
Ce programme correspond bien à mon besoin. J'ai même imaginé mettre la valeur précédente de la cellule plutôt que de la mettre à blanc (en déclarant la variable publique "avant" et en l'alimentant dans mes programmes création, modification et saisie de prod) et je mets donc dans ton programme à la place de .clearcontents ---> = avant
J'ai un autre programme qui lui permet la saisie des commandes des clients et qui à la même problématique pour les dates de livraison à ceci près que le nombre de lignes de commandes sur la même feuille peut aller jusqu'à 100 et donc 100 dates à contrôler.
L'opérateur ajoute des lignes sur cette feuille en fonction du besoin avec une macro et fait sa saisie.
Je ne vois pas trop comment adapter ton programme dans ce cas. Je pourrais dans prog1 remplacer range("D3") par ActiveCell ? Dans le programme de la feuil1 puis je envisager de mettre une plage de cellule à la place de $D$3 ? et reste à trouver une astuce pour conserver "avant" les valeurs de chaque cellule avant modification

Merci d'avance
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
401
Retour