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 un bon début d'explication pour moi , mais je cherche :
a exécuter la macro si B7, N7 ou Y7 sont non vides
avec deux Msgbox dans ce cas "il manque une référence " et "il manque une entrée/ sortie"
car je peux avoir des sorties ou des entrées ou les deux, mais jamais bien sûr une référence manquante
et comment l'intégrer a ma macro dupliquer dans ce cas ?
Pour l'intégration, le plus simple si votre macro s'appelle MaMacro est de faire :
Code:
Sub Test()
If Condition Vrai Then
MaMacro
Endif
End Sub
et de lancer la macro Test au lieu de lancer MaMacro.
L'autre solution est de l'intégrer à votre macro en mettant votre code entre le If du test et le EndIf associé.
En me basant sur l'exemple de sylvanu, une autre écriture possible
VB:
Sub lancer_macro_si()
If Application.CountA([B7], [N7], [Y7]) = 3 Then
ma_macro
Else
MsgBox "C'est quoi ce binz!", vbCritical, "Oui, je sais mes réfrénces datent"
End If
End Sub
Sub ma_macro()
MsgBox Date
End Sub
j 'ai intégré la ligne de code suivante a ma macro :
If [B7] <> "" And ([N7] <> "" Or [Y7] <> "") Then
mais la macro se lance quand même !!!
je tiens à rappeler que je suis pas vraiment à l'aise en VBA ( et d'un certain âge )
fipafi
Normalement, mon exemple doit fonctionner si les trois cellules ne sont pas vides
Tu as testé sur un classeur vierge dans lequel tu auras mis des valeurs en B7,N7 et W7 avant de lancer la macro?
Bonsoit Fipafi, Staple,
Ca n'a rien à voir avec e VBA. C'est de la logique.
Vous avez trois variables B7, N7, Y7 qui peuvent avoir deux états : Vide / Non vides.
Remplissez le tableau de la PJ on trouvera la bonne combinaison.
Staple, vous devriez être au lit. vous l'a déjà dit.
[aparté]
Sylvanu: merci pour votre sollicitude.
Mais l'allopathie a fait son office
(à moins que ce soit le Fitou)
La céphalée est désormais compatible avec une exposition aux écrans et un immersion dans VBE.
[/aparté]
Bonjour Fipafi,
La solution devient simple, voir en PJ :
VB:
If [b7] <> "" And Application.CountA([N7], [Y7]) > 0 Then
On execute la macro si B7 n'est pas vide ET au moins une des deux cellules N7,Y7 n'est pas vide.
Dans l'application cela donnera :
Code:
Sub Test2()
'Avec cette ligne de code, on exécute si B7 est non vide ET une des deux cellules N7 ou Y7 est non vides
If [b7] <> "" And Application.CountA([N7], [Y7]) > 0 Then
' LANCER LA MACRO DESIREE
End If
End Sub