Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

condition SI en VBA

22 réponses
Avatar
jeje02
Bonjour
J'ai une macro qui est exécuté si ma cellule A1 est OUI est une macro différente si ma cellule A1 est NON.
Le OUI ou NON de la cellule A1, résulte d'une formule RECHERCHEV.
Le problème est lorsque dans ma cellule A1 j'ai OUI et que cette macro génère un NON due à la formule RECHERCHEV, ma macro exécute successivement la macro OUI et NON.
Comment faire pour que ma macro s'arrête à la première condition sans exécuter la deuxième condition (même si elle est VRAI).
Merci à vous

10 réponses

1 2 3
Avatar
Jacquouille
Peut-être qu'en publiant le code de cette macro ?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"jeje02" a écrit dans le message de groupe de discussion :


Bonjour
J'ai une macro qui est exécuté si ma cellule A1 est OUI est une macro
différente
si ma cellule A1 est NON.
Le OUI ou NON de la cellule A1, résulte d'une formule RECHERCHEV.
Le problème est lorsque dans ma cellule A1 j'ai OUI et que cette macro
génère un
NON due à la formule RECHERCHEV, ma macro exécute successivement la macro
OUI et
NON.
Comment faire pour que ma macro s'arrête à la première condition sans
exécuter
la deuxième condition (même si elle est VRAI).
Merci à vous
Avatar
isabelle
bonjour,

pour désactiver des événements
mets en début de macro:

Application.EnableEvents = False

et en fin de macro
Application.EnableEvents = True

isabelle

Le 2014-11-12 12:38, jeje02 a écrit :
Bonjour
J'ai une macro qui est exécuté si ma cellule A1 est OUI est une macro différente
si ma cellule A1 est NON.
Le OUI ou NON de la cellule A1, résulte d'une formule RECHERCHEV.
Le problème est lorsque dans ma cellule A1 j'ai OUI et que cette macro génère un
NON due à la formule RECHERCHEV, ma macro exécute successivement la macro OUI et
NON.
Comment faire pour que ma macro s'arrête à la première condition sans exécuter
la deuxième condition (même si elle est VRAI).
Merci à vous

Avatar
MichD
Bonjour,

As-tu quelque chose comme :

Ce qui suit dans le module de la feuille où l'action se déroule.

'--------------------------------------------
Private Sub Worksheet_Calculate()

If UCase(Range("A1")) = "OUI" Then
Call Macro1
Else
Call Macro2
End If
End Sub

'--------------------------------------------
Sub Macro1()
MsgBox "Bonjour"
End Sub
'--------------------------------------------

Sub Macro2()
MsgBox "Bonsoir"
End Sub
'--------------------------------------------
Avatar
isabelle
ps/ si la macro bug et que la commande
Application.EnableEvents = True
n'est pas exécuté, tous les événements seront désactivés.
pour y remédier exécute la macro suivante:

Sub reset_Event()
Application.EnableEvents = True
End Sub

isabelle

Le 2014-11-12 14:41, isabelle a écrit :
bonjour,

pour désactiver des événements
mets en début de macro:

Application.EnableEvents = False

et en fin de macro
Application.EnableEvents = True

isabelle

Le 2014-11-12 12:38, jeje02 a écrit :
Bonjour
J'ai une macro qui est exécuté si ma cellule A1 est OUI est une macro différente
si ma cellule A1 est NON.
Le OUI ou NON de la cellule A1, résulte d'une formule RECHERCHEV.
Le problème est lorsque dans ma cellule A1 j'ai OUI et que cette macro génère un
NON due à la formule RECHERCHEV, ma macro exécute successivement la macro OUI et
NON.
Comment faire pour que ma macro s'arrête à la première condition sans exécuter
la deuxième condition (même si elle est VRAI).
Merci à vous

Avatar
jeje02
Le mercredi 12 Novembre 2014 à 18:38 par jeje02 :
Bonjour
J'ai une macro qui est exécuté si ma cellule A1 est OUI est une
macro différente si ma cellule A1 est NON.
Le OUI ou NON de la cellule A1, résulte d'une formule RECHERCHEV.
Le problème est lorsque dans ma cellule A1 j'ai OUI et que cette macro
génère un NON due à la formule RECHERCHEV, ma macro
exécute successivement la macro OUI et NON.
Comment faire pour que ma macro s'arrête à la première
condition sans exécuter la deuxième condition (même si elle
est VRAI).
Merci à vous


Merci pour toutes vos réponses, mais pour éviter de faire des bêtises, je préfère vous mettre ma macro.



Sub sequencesuivante()
Dim effacer
effacer = MsgBox("initier la séquence suivante", vbYesNo, "SEQUENCE SUIVANTE")

If effacer = vbYes And [A1] = "OUI" Then
Sheets("Feuil1").Select
Range("K4:U13").Select
Selection.Copy
Sheets("Feuil12").Select
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:úlse, Transpose:úlse
Sheets("Feuil1").Select
Range("M4:U13").Select
Selection.ClearContents
Range("L16").Select
Selection.Copy
Range("V16").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:úlse, Transpose:úlse
Range("M4").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True
End If

If effacer = vbYes And [A1] = "NON" Then
Sheets("Feuil1").Select
Range("K4:U13").Select
Selection.Copy
Sheets("Feuil12").Select
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:úlse, Transpose:úlse
Sheets("Feuil1").Select
Range("L16").Select
Selection.Copy
Range("V16").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:úlse, Transpose:úlse
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True
End If

If effacer = vbNo Then
End If
End Sub
Avatar
MichD
Bonjour,

J'ai modifié un peu ta macro :

Avant de tester la macro, assure-toi d'avoir un backup de ton fichier...

À 2 endroits dans la macro, aux lignes de code suivantes, je te suggère
fortement
d'inclure la référence à la feuille comme ceci. Adapte le nom de la feuille
au besoin.

If Effacer = vbYes And UCase(Sheets("Feuil1").Range("A1")) = "OUI" Then
ElseIf Effacer = vbYes And UCase(Sheets("Feuil1").Range("A1")) = "NON" Then

N.B. La macro protège la feuille "Feuil" dans les 2 cas. Si tu exécutes ta
macro une
deuxième fois, cela ne fonctionnera pas, car tu ne déprotèges pas la feuille
au
début de la procédure à moins qu'une autre macro fasse le travail...

'---------------------------------------------------------
Sub SequenceSuivante()
Dim T As Variant, Effacer As Variant

Effacer = MsgBox("initier la séquence suivante", vbYesNo, "SEQUENCE SUIVANTE
")

Application.ScreenUpdating = False
Application.EnableEvents = False

If Effacer = vbYes And UCase([A1]) = "OUI" Then
T = Sheets("Feuil1").Range("K4:U13")
Sheets("Feuil12").Range("A3").Resize(UBound(T, 1), UBound(T, 2)) = T
With Sheets("Feuil1")
.Range("M4:U13").ClearContents
T = .Range("L16")
.Range("V16") = T
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowSorting:=True, AllowFiltering:=True
End With

ElseIf Effacer = vbYes And UCase([A1]) = "NON" Then
T = Sheets("Feuil1").Range("K4:U13")
Sheets("Feuil12").Range("A3").Resize(UBound(T, 1), UBound(T, 2)) = T
With Feuil1
T = .Range("L16")
.Range("V16") = T
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowSorting:=True, AllowFiltering:=True
End With
End If

Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'---------------------------------------------------------
Avatar
Jacky
Hello,

Il doit y avoir quelque chose qui m'échappe,
Toutes ces macros font la même chose qu'il y ait "OUI" ou qu'il y ait "NON" en A1

Je propose ceci (A compéter)
'------------------
Sub sequencesuivantejj()
Dim effacer
effacer = MsgBox("initier la séquence suivante", vbYesNo, "SEQUENCE SUIVANTE ")
If effacer = vbNo Then Exit Sub
With Sheets("Feuil1")
If UCase(.[A1]) = "OUI" Then
.Unprotect
.Range("K4:U13").Copy
Sheets("Feuil12").Range("A3").PasteSpecial Paste:=xlPasteValues
.Range("M4:U13").ClearContents
.Range("V16").Value = .Range("L16").Value
.Range("M4").Select
.Protect
End If
'___________________________
If UCase(.[A1]) = "NON" Then
'******
'******
'******
endif
'___________________________
End With
End Sub

--
Salutations
JJ


"MichD" a écrit dans le message de news: m423l2$ekl$
Bonjour,

J'ai modifié un peu ta macro :

Avant de tester la macro, assure-toi d'avoir un backup de ton fichier...

À 2 endroits dans la macro, aux lignes de code suivantes, je te suggère fortement
d'inclure la référence à la feuille comme ceci. Adapte le nom de la feuille au besoin.

If Effacer = vbYes And UCase(Sheets("Feuil1").Range("A1")) = "OUI" Then
ElseIf Effacer = vbYes And UCase(Sheets("Feuil1").Range("A1")) = "NON" Then

N.B. La macro protège la feuille "Feuil" dans les 2 cas. Si tu exécutes ta macro une
deuxième fois, cela ne fonctionnera pas, car tu ne déprotèges pas la feuille au
début de la procédure à moins qu'une autre macro fasse le travail...

'---------------------------------------------------------
Sub SequenceSuivante()
Dim T As Variant, Effacer As Variant

Effacer = MsgBox("initier la séquence suivante", vbYesNo, "SEQUENCE SUIVANTE ")

Application.ScreenUpdating = False
Application.EnableEvents = False

If Effacer = vbYes And UCase([A1]) = "OUI" Then
T = Sheets("Feuil1").Range("K4:U13")
Sheets("Feuil12").Range("A3").Resize(UBound(T, 1), UBound(T, 2)) = T
With Sheets("Feuil1")
.Range("M4:U13").ClearContents
T = .Range("L16")
.Range("V16") = T
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowSorting:=True, AllowFiltering:=True
End With

ElseIf Effacer = vbYes And UCase([A1]) = "NON" Then
T = Sheets("Feuil1").Range("K4:U13")
Sheets("Feuil12").Range("A3").Resize(UBound(T, 1), UBound(T, 2)) = T
With Feuil1
T = .Range("L16")
.Range("V16") = T
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowSorting:=True, AllowFiltering:=True
End With
End If

Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'---------------------------------------------------------

Avatar
MichD
Il faut poser la question au demandeur... je n'ai fait qu'adapter la syntaxe
du code de la macro...
Avatar
Jacquouille
Mais non, Denis.
Tu dois deviner ce que le client veut ..... -))

If Effacer = vbYes And UCase(Sheets("Feuil1").Range("A1")) = "OUI"
Then
ElseIf Effacer = vbYes And UCase(Sheets("Feuil1").Range("A1")) =
"NON" Then









Question: Et si A1="peut-être", que fera la macro? -))


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
m426l8$mbn$

Il faut poser la question au demandeur... je n'ai fait qu'adapter la syntaxe
du code de la macro...
Avatar
MichD
| Question: Et si A1="peut-être", que fera la macro?

Tu testes! Peut-être que ça marche, peut-être que cela ne marche pas!
1 2 3