Saisie obligatoire Excel VBA à plusieurs conditions
Résolu
Kirilov
Messages postés
108
Statut
Membre
-
Kirilov Messages postés 108 Statut Membre -
Kirilov Messages postés 108 Statut Membre -
Bonjour,
J'ai un fichier .xls partagé entre plusieurs utilisateurs et j'ai besoin pour un contrôle de la saisie des fonctions suivantes :
Si A = vide et B = Alphanumérique ET si B = Vide et A = Alphanumérique Alors MsgBox merci de remplir A ou B MAIS si A = B = Vide alors tout va bien
Ou alors
Si A = vide et B = Alphanumérique ET si B = Vide et A = Alphanumérique Alors MsgBox merci de remplir A ou B MAIS si A = B = C = Vide alors tout va bien
J'ai commencé à écrire un morceau de code mais ça ne marche pas vraiment... :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim p As Integer
For p = 2 To 150
Next
If Range("a" & p).Value Like "" And Range("b" & p).Value Like "*" Or Range("b" & p).Value Like "" And Range("a" & p).Value Like "*" Then
If MsgBox("Merci de valider les champs A & B", vbQuestion + vbYes) <> vbNo Then Cancel = True
Else
If Range("A" & p) = Range("B" & p) Then
End If
End If
End Sub
Merci de votre aide,
K
J'ai un fichier .xls partagé entre plusieurs utilisateurs et j'ai besoin pour un contrôle de la saisie des fonctions suivantes :
Si A = vide et B = Alphanumérique ET si B = Vide et A = Alphanumérique Alors MsgBox merci de remplir A ou B MAIS si A = B = Vide alors tout va bien
Ou alors
Si A = vide et B = Alphanumérique ET si B = Vide et A = Alphanumérique Alors MsgBox merci de remplir A ou B MAIS si A = B = C = Vide alors tout va bien
J'ai commencé à écrire un morceau de code mais ça ne marche pas vraiment... :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim p As Integer
For p = 2 To 150
Next
If Range("a" & p).Value Like "" And Range("b" & p).Value Like "*" Or Range("b" & p).Value Like "" And Range("a" & p).Value Like "*" Then
If MsgBox("Merci de valider les champs A & B", vbQuestion + vbYes) <> vbNo Then Cancel = True
Else
If Range("A" & p) = Range("B" & p) Then
End If
End If
End Sub
Merci de votre aide,
K
A voir également:
- Saisie obligatoire Excel VBA à plusieurs conditions
- Liste déroulante excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Word et excel gratuit - Guide
- Excel cellule couleur si condition texte - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
3 réponses
Bonjour,
Et c'est quoi qui ne marche pas ?
Est-ce bien un contrôle avant fermeture du classeur ?
Note : dans votre code le [Next] n'est pas à sa place, doit être juste avant [End If]... !
Salutations.
Le Pingou
Et c'est quoi qui ne marche pas ?
Est-ce bien un contrôle avant fermeture du classeur ?
Note : dans votre code le [Next] n'est pas à sa place, doit être juste avant [End If]... !
Salutations.
Le Pingou
Bonjour,
déjà tu te mélanges allègrement entre les Et et les OU
Si A = vide et B = Alphanumérique ET si B = Vide et A = Alphanumérique Alors ...
A ne peut pas être vide ET alphanumérique.
En résumé tu veux que A ET B soient remplis si C est rempli ?
Si oui tu peux le faire à la saisie avec une Validation ayant pour formule :
=ET(A2<>"";B2<>"")
(décocher 'ignorer si vide')
https://www.cjoint.com/?BKglwsY7CJ2
eric
déjà tu te mélanges allègrement entre les Et et les OU
Si A = vide et B = Alphanumérique ET si B = Vide et A = Alphanumérique Alors ...
A ne peut pas être vide ET alphanumérique.
En résumé tu veux que A ET B soient remplis si C est rempli ?
Si oui tu peux le faire à la saisie avec une Validation ayant pour formule :
=ET(A2<>"";B2<>"")
(décocher 'ignorer si vide')
https://www.cjoint.com/?BKglwsY7CJ2
eric
Bonjour Eric,
En fait ce que je veux c'est : Si C est vide alors A & B peuvent être vides mais si C n'est pas vide alors A et B doivent être saisis obligatoirement.
Donc si je comprends : si à ta solution je rajoute en B =ET(A2<>"") l'utilisateur ne peut pas faire autrement que saisir A puis B puis C n'est-ce pas ?
C'est super, merci beaucoup pour cette solution !
En fait ce que je veux c'est : Si C est vide alors A & B peuvent être vides mais si C n'est pas vide alors A et B doivent être saisis obligatoirement.
Donc si je comprends : si à ta solution je rajoute en B =ET(A2<>"") l'utilisateur ne peut pas faire autrement que saisir A puis B puis C n'est-ce pas ?
C'est super, merci beaucoup pour cette solution !
Eric,
Oui, j'avais bien compris et cela fonctionne. Mais ta Validation n'exerçait pas de contrôle pour le 2ème contrôle que je veux à savoir que si A contient des données B doit aussi en contenir et vice versa ajouter une 2e Validation - B =ET(A2<>"") - permet d'assurer que A est rempli si on veut saisir une donnée dans B.
Oui, j'avais bien compris et cela fonctionne. Mais ta Validation n'exerçait pas de contrôle pour le 2ème contrôle que je veux à savoir que si A contient des données B doit aussi en contenir et vice versa ajouter une 2e Validation - B =ET(A2<>"") - permet d'assurer que A est rempli si on veut saisir une donnée dans B.
Ah ok.
Oui, si tu veux obliger la saisie de A avant celle de B tu peux ajouter une validation =A2<>"".
A toi de voir si cette contrainte est nécessaire ou non.
Si tu la mets tu peux alléger celle en C. Contrôler juste que B soit rempli devient suffisant.
Et tu peux de toute façon recontrôler à la fermeture car quelqu'un peut saisir A, B et C et effacer ensuite A.
eric
Oui, si tu veux obliger la saisie de A avant celle de B tu peux ajouter une validation =A2<>"".
A toi de voir si cette contrainte est nécessaire ou non.
Si tu la mets tu peux alléger celle en C. Contrôler juste que B soit rempli devient suffisant.
Et tu peux de toute façon recontrôler à la fermeture car quelqu'un peut saisir A, B et C et effacer ensuite A.
eric
Merci Eric,
Mais pour ce qui est du contrôle à la fermeture (via mon essai en VBA, donc) mon problème est que si la plage indiquée (ici [Dim p As Integer For p = 2 To 150] contient des lignes pas encore remplies j'ai un message d'erreur pour chaque cellule vide qui ne doit pas l'être... C'est cette partie du code que je n'arrive pas à écrire : l'idée étant que si C est vide c'est donc qu'il ne faut pas tenir compte de A et/ou B !
Merci !
Mais pour ce qui est du contrôle à la fermeture (via mon essai en VBA, donc) mon problème est que si la plage indiquée (ici [Dim p As Integer For p = 2 To 150] contient des lignes pas encore remplies j'ai un message d'erreur pour chaque cellule vide qui ne doit pas l'être... C'est cette partie du code que je n'arrive pas à écrire : l'idée étant que si C est vide c'est donc qu'il ne faut pas tenir compte de A et/ou B !
Merci !
Si je déplace le [Next] juste avant [End If] (le premier) j'ai un avertissement "Erreur de compilation Next sans For".
il s'agit bien d'un contrôle avant fermeture du classeur mais dans l'état actuel du code si les cellules A & B de l'ensemble de la plage (soit 2 to 150) sont vides j'ai une alerte hors je voudrais que le contrôle ne s'exerce que si A et/ou B sont vides quand les autres cellules ne le sont pas. Exemple : A1=vide B1=plein C1=Plein >> Alerte ; A1=plein B1=vide C1=Plein >> Alerte ; A1=vide B1=vide C1=vide >> pas d'alerte.
Bon, dans l'idéal j'aurai aimé que la chose se fasse lors de la saisie et pas seulement avant la fermeture mais je n'y arrive pas... Et comme je suis franchement débutant je vais essayer de rester sur un truc simple.
Merci