Microsoft 365 Succession de conditions avant de fermer le fichier

raf26

XLDnaute Occasionnel
Bonjour,

J'ai sur mon fichier des contrôles en BeforeClose

Différentes alertes qui s'affichent suivant conditions.

Chacune marche si elle est seule dans le BeforeClose

Problème , je n'arrive à faire enchainer les conditions pour déclencher chaque msgbox :

  1. pour les 2 premières : si oui je retourne en feuille1 / si non je passe à la condition suivante
  2. pour la 3ème, si condition = oui message info, clique ok et ensuite affichage usf / si condition = non ignore et affichage usf
  3. enfin si aucunes des 3 premières conditions réunies, si condition dernière condition = oui affichage usf / si condition = non fermeture du fichier
  4. si aucune des 4 conditions, fermeture du fichier
Il y a surement des trucs mal placés ou absent, mais je ne vois pas quoi.



Ci-dessous mon code que j'ai aéré pour être plus lisible
------------------------------------------------------------------------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

'1ere condition

With Sheets("FEUILLE1")

If Range("M10").Value Like "*MAJUSCULES*" And .Range("S148") < 800 Then

If MsgBox("mon texte" & Chr(13) & Chr(10) & "ma question ?", vbQuestion + vbYesNo, "- - - ATTENTION - - -") = vbYes Then

Cancel = True

Exit Sub

End If

End If

End With

'2ème condition

With Sheets("FEUILLE1")

If Range("M10").Value Like "*minuscules*" And .Range("S148") < 800 Then

If MsgBox("mon texte" & Chr(13) & Chr(10) & "ma question ?", vbQuestion + vbYesNo, "- - - ATTENTION - - -") = vbYes Then

Cancel = True

Exit Sub

End If

End If

End With

'3ème condition


If Sheets("FEUILLE1").Range("M10") = "blablabla" Or Sheets("FEUILLE1").Range("G7") = "" Then

If Sheets("feuille2").Range("I18") > 0 Or Sheets("feuille2").Range("I20") > 0 Then

MsgBox "mon texte", vbInformation, "- - - ATTENTION - - -"

End If
Else

'4ème condition

If Sheets("FEUILLE1").Range("G10").Value Like "@ blabla @" Then
UserForm3.Show
End If
End If
End Sub

--------------------------------------------------------------------------------------------------------------

Merci d'avance pour votre aide.

Bonne soirée.
 

raf26

XLDnaute Occasionnel
Bonjour Paf

Je viens de découvrir le bouton "insérer un code"..... (enfin !)

Voici le code indenté


VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    '1ere condition
    
    With Sheets("FEUILLE1")
        
        If Range("M10").Value Like "*MAJUSCULES*" And .Range("S148") < 800 Then
            
            If MsgBox("mon texte" & Chr(13) & Chr(10) & "ma question ?", vbQuestion + vbYesNo, "- - - ATTENTION - - -") = vbYes Then
                
                Cancel = TRUE
                
                Exit Sub
                
            End If
            
        End If
        
    End With
    
    '2ème condition
    
    With Sheets("FEUILLE1")
        
        If Range("M10").Value Like "*minuscules*" And .Range("S148") < 800 Then
            
            If MsgBox("mon texte" & Chr(13) & Chr(10) & "ma question ?", vbQuestion + vbYesNo, "- - - ATTENTION - - -") = vbYes Then
                
                Cancel = TRUE
                
                Exit Sub
                
            End If
            
        End If
        
    End With
    
    '3ème condition
    
    If Sheets("FEUILLE1").Range("M10") = "blablabla" Or Sheets("FEUILLE1").Range("G7") = "" Then
        
        If Sheets("feuille2").Range("I18") > 0 Or Sheets("feuille2").Range("I20") > 0 Then
            
            MsgBox "mon texte", vbInformation, "- - - ATTENTION - - -"
            
        End If
    Else
        
        '4ème condition
        
        If Sheets("FEUILLE1").Range("G10").Value Like "@ blabla @" Then
            UserForm3.Show
        End If
    End If
End Sub
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
1 ére verif : Ou as tu placé cette Sub ?
2eme : ajoute quand même les Cancel= False après les ELse si rien ou les End if et vérifier la valeur de Cancel à chaque étape . pour tester tu mets un point d'arrêt (en mode debug) et tu fais du pas à pas c'est radical pour trouver ::
 
Dernière édition:

herve62

XLDnaute Barbatruc
Supporter XLD
re Salut Paf
C'est ce que j'ai dit !! , j'ai pas pigé non plus les conditions ?
sinon je viens d'intégrer ton code dans un fichier vierge , j'ai juste mis les conditions dans les cellules nécessaires , j'ai fait du pas à pas tout est nickel et s'enchaine bien
Bon ce ne sont que des Msgbox mais tous les If sont balayés ,
Sauf que le Pb vient du dernier IF ?? j'arrive pas à voir pourquoi comme ça vite fait > le dernier ELSE n'est pas pris en compte ??? j'ai vu en 'PAS A PAS' avec ça c'est SUR on rate pas les erreurs !!
je laisse mon test > PAF si tu vois ?? ; (là je vais bosser au jardin )
 

Pièces jointes

  • test.xlsm
    18.7 KB · Affichages: 8

raf26

XLDnaute Occasionnel
re herve 62 et paf

les 3 premières conditions étaient les 3 telles quelles dans ThisWorkbokk BeforeClose

Et ça fonctionnait sans problème.

C'est en voulant ajouter la 4ème (celle qui déclenche mon usf), que les problèmes sont apparus.
 

herve62

XLDnaute Barbatruc
Supporter XLD
Et bien alors tout va bien , non ?
Faut bien penser que si une condition est 'VRAI' ( donc Cancel= False)alors le prog. s'arrête et donc ferme le fichier en aucun cas il n'ira plus loin
A bien penser ... si ta condition est VRAI alors Cancel= False ( FAUX) .... eh oui !!!!! c'est la logique illogique ! :confused:
donc comme disait PAF si tu veux tester TOUTES les conditions il faudrait mettre des flags à chaque test et laisser CAncel=true
if .....
.....
Si1= 1
Cancel= true
If .....
...
Si2=1
Cancel=true
Comme cela tout sera balayé et à la fin tu fais un test final
IF Si1=1 ... Or And Si2 ...etc enfin ta suite logique selon ce que tu veux faire
Enfin , normalement pas besoin d ' EXIT SUB' puis que déjà tu mets Cancel= true la sub s'arrête
J'espère que cela t'aidera
 

Discussions similaires