XL 2016 lancer procédure si conditions

fipafi

XLDnaute Nouveau
Bonjour à tous,

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

par avance merci
 

Pièces jointes

  • mouvements semaine magasin.xlsm
    207.9 KB · Affichages: 29
Solution
Jusqu'ici on ne parlait que de la ligne 7, et là vous me parlez de la ligne 10. :mad:

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"...

sylvanu

XLDnaute Barbatruc
Supporter XLD
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 =""
 

Pièces jointes

  • mouvements semaine magasin (1) (1) (1) (1).xlsm
    220.2 KB · Affichages: 6
Dernière édition:

fipafi

XLDnaute Nouveau
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 .
 

Pièces jointes

  • mouvements semaine magasin (1) (1) (1) (1).xlsm
    215.4 KB · Affichages: 2

fipafi

XLDnaute Nouveau
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
 

Pièces jointes

  • mouvements semaine magasin (1) (1) (1) (1) (1).xlsm
    228.6 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Pourquoi avez vous écrit ça :
Code:
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é.
 

Pièces jointes

  • mouvements semaine magasin (1) (1) (1) (1) (1) (4).xlsm
    229.5 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Jusqu'ici on ne parlait que de la ligne 7, et là vous me parlez de la ligne 10. :mad:

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.
 

Pièces jointes

  • mouvements semaine magasin (5).xlsm
    320.4 KB · Affichages: 3

fipafi

XLDnaute Nouveau
bonsoir Sylvanu ,

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.
 

Discussions similaires

Statistiques des forums

Discussions
312 778
Messages
2 092 035
Membres
105 160
dernier inscrit
MMBA85