Saisie obligatoire Excel VBA à plusieurs conditions

Résolu
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



3 réponses

Le Pingou Messages postés 12646 Date d'inscription   Statut Contributeur Dernière intervention   1 463
 
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
0
Kirilov Messages postés 108 Statut Membre 1
 
Bonjour Le Pingou

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
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 279
 
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
0
Kirilov Messages postés 108 Statut Membre 1
 
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 !
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 279
 
Clique sur le lien bleu de mon précédent post et teste le fichier pour voir si ça correspond à ton besoin.

Il s'agit d'une formule de validation (menu 'données' sur 2003), pas d'une formule à mettre dans la cellule. Et normalement elle est complète.

eric
0
Le Pingou Messages postés 12646 Date d'inscription   Statut Contributeur Dernière intervention   1 463
 
Merci Eric
Salutations
Le Pngou.
0
Kirilov Messages postés 108 Statut Membre 1
 
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.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 279
 
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
0
Kirilov Messages postés 108 Statut Membre 1
 
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 !
0