Ayant que de très faibles notions en VBA, je viens vous demander votre aide ,
je cherche a empêcher l'exécution d'une procédure si certaines conditions ne sont pas remplies ,
je vous joint mon fichier avec l 'explication de ma demande
Jusqu'ici on ne parlait que de la ligne 7, et là vous me parlez de la ligne 10.
Votre macro ne peut pas marcher si vous voulez transférer Range("Tab_saisi[[Sortie]]"), car fatalement il va trouver une ligne vide et ne pas faire l'enregistrement.
Il faut scanner toutes les lignes pour voir si une des lignes est en erreur, tout en éliminant les lignes vides.
Un essai en PJ.
Vous auriez pu commencer par exposer le fait que vous vouliez transférer toute la matrice.
J'ai donc rajouté un scan de la matrice avec :
VB:
Erreur = 0: NbVide = 0
For L = 7 To 127
If Range("B" & L) <> "" And Range("N" & L) & Range("Y" & L) <> "00" Then
NbVide = NbVide + 1
Else
If Range("B" & L) = "" And Range("N" & L) & Range("Y" & L) = "00"...
C'est pourtant simple.
Quand B7 est vide, N7 est vide et Y7 est vide, voulez vous que la macro s'exécute ?
D'après votre tableau c'est non.
Si la réponse est OUI alors c'est simple : La macro s'exécute si B7 est non vide quelques soit la valeur de N7 et Y7.
Testez cette PJ, elle correspond à ce que semble avoir compris.
j'ai intégré le code dans la macro toutes les conditions sont remplies sauf :
B7<>"" et N7,Y7 =""
la réponse est bien non pas d'exécution de macro Quand B7 est vide, N7 est vide et Y7 est vide
mais pas d'exécution non plus si B7 non vide, N7 est vide et Y7 est vide
les utilisateurs ne doivent pas pouvoir lancer l'enregistrement si une référence est remplie sur une ligne
et qu'aucune quantité en sortie ou en entrée .
je suis tout a fait d'accord avec le tableau des conditions , mais toujours le problème avec :
B7 non vide et N7 et N8 vide la macro s'exécute quand même.
j'ai bien du mal à comprendre
If [b7] <> "" And Application.CountA([N7], [Y7], "<> """) > 0 Then
au lieu de ça comme dans ma PJ :
VB:
If [b7] <> "" And Application.CountA([N7], [Y7]) > 0 Then
Cependant ça ne peut pas marcher ( ) car en N7 Y7 il y a des formules. Donc N7 Y7 ne sont jamais vides mais valent 0 quand les zones S1S10 et E1E10 sont vides.
A remplacer par :
Code:
If [B7] <> "" And [N7] & [Y7] <> "00" Then
A tester la PJ où la modif est faite.
J'ai rajouté un Else pour expliquer pourquoi l'enregistrement est refusé.
Jusqu'ici on ne parlait que de la ligne 7, et là vous me parlez de la ligne 10.
Votre macro ne peut pas marcher si vous voulez transférer Range("Tab_saisi[[Sortie]]"), car fatalement il va trouver une ligne vide et ne pas faire l'enregistrement.
Il faut scanner toutes les lignes pour voir si une des lignes est en erreur, tout en éliminant les lignes vides.
Un essai en PJ.
Vous auriez pu commencer par exposer le fait que vous vouliez transférer toute la matrice.
J'ai donc rajouté un scan de la matrice avec :
VB:
Erreur = 0: NbVide = 0
For L = 7 To 127
If Range("B" & L) <> "" And Range("N" & L) & Range("Y" & L) <> "00" Then
NbVide = NbVide + 1
Else
If Range("B" & L) = "" And Range("N" & L) & Range("Y" & L) = "00" Then
' Ligne vide, ne pas compter
Else
Erreur = 1
Exit For
End If
End If
Next L
If Erreur = 0 And NbVide > 0 Then ' Si pas d'erreur et au moins une ligne pleine
On teste toutes les lignes de 7 à 127, on élimine les lignes vides et on cherche les erreurs.
Si à la fin on a bien des lignes remplies mais aucune erreur on enregistre.
navré de cette incompréhension , je regarde ca demain et vous tiens informé.
merci mille fois de vous être penché sur mon sujet .
comme cité précédemment je ne suis pas a l'aise avec vba et pas du tout habitué des uses et coutumes des forums
je suis maintenant conscient du manque de clarté de ma demande cela me servira de leçons.