Problème de changement de procédure
Bonjour et merci pour le travail pédagogique instructif de tous sur tous les sujets.
Mon problème:
Lorsqu’une demande de sauvegarde est confirmée (subgeseng s’active bien), l’action d’effacer C2 s’effectue bien,mais retour immédiat au tout début de la procédure principale (Public Sub Worksheet_Calculate() au lieu de poursuivre à la ligne suivante de la procédure de sauvegarde (effacer C3
Ouieng est revenu à 0 lors de ce changement de procédure.
Les 2 procédures se trouvent dans la macro de la feuille1 et non dans un module pour la séquence de sauvegarde(l'essai a été fait avec le même résultat.
Merci de votre aide bienveillante.
Cordialement
Bonjour Matysek et bienvenu, bonjour le forum,
La macro événementielle Calculate n'agit que s'il y a des formules dans l'onglet (puisqu'elle va recalculer la valeur des formules). Dans ton exemple il n'y en a pas ?!... Il n'y a pas non plus de Module1 ce qui fait planter la ligne :
Module1.ferm4fich 'Fermeture des 4 fichiers ouverts (fonctionne par ailleurs)Soit ton exemple ne correspond pas à ta requête, soit je ne comprends pas ce que tu veux faire. mais on ne peut pas écrire n'importe quoi en VBA...
Bonjour Thau Thème et merci d'abord d'avoir répondu aussi vite, bravo
Pour répondre d'abord à tes remarques, je joins, le fichier avec la procédure de fermeture des fichiers placée dans le Module1; celle-ci fonctionne parfaitement en répondant "non" à la demande de la Mgs box. Les séries de cellules BBx et BDx sont réelles dans mon programme.
Je t'ai ajouté, dans le programme de la feuille1, 2 exemples qui fonctionnent: le test de l'existence de fichiers optionnels, puis le choix, par une msgbox en liste de choix, d'ouvrir ou pas un fichier optionnel (LT, Tb,CF,CfMp); je n'ai pas joint, pour le moment, les 2 procédures concernées.
Ce qui semble vraiment poser problème est certainement en lien avec la msgbox de confirmation de sauvegarde ou pas.
En répondant non, noneng est à1 et efface la cellule de demande d'arrêt
En répondant oui, dès que la commande d'effacement de C2 (par la procédure geseng), on quitte cette procédure pour retrouver la procédure dee la feuille en calculate et pourtant geseng se trouve aussi après et séparé du programme shetts calculate de la feuille.En plaçant geseng dans un module, c'est exactement le même résultat
Voilà les précisions que je pouvais apporter.
De manière plus générale, voilà le but complet de tout cela et sur lequel je travaille depuis plusieurs années pour le fun, pour le moment:
Utilisant Excel, je termine la mise au point d'un logiciel de cryptage complexe, utilisant une douzaine de codages différents. il est constitué de 4 fichiers Excel de base assurant le cryptage, l'interface entre fichiers et l'écriture ou le décodage d'un message de 1000 caractères. Les fichiers optionnels sont les interfaces pour un long texte de 5000 caractères, un tableau excel, des formules maths ou chimie et gestion de données sensibles... Si ce t'intéresse...
Je ne peux malheureusement pas joindre le fichier CL modifié , cela m'est pas disponible. J'essaie de mettre à la suite les lignes concernées du module 1 et les 2 exemples.
Belle continuation à toi en espérant que tu puisses m'apporter ldes ébauches de solutions
Module1:
Sub ferm4fich()
Dim Workbookf As Workbook
Dim Foundcpf As Boolean, Foundliaf As Boolean, Foundcmf As Boolean, Foundclf As Boolean
Dim fichCL As String, fichLIA As String, fichCP As String, fichCM As String
Dim NFcl As String, NFlia As String, NFcp As String, NFcm As String
' If workbooks.Count = 5 Then Exit Sub
fichLIA = Range("BB9").Value 'chemin du fichier : C:\Users\user\Desktop\Crx-maint\Lia maint.xlsm
fichCP = Range("BB12").Value 'chemin du fichier : C:\Users\user\Desktop\Crx-maint\CPmx maint.xlsm
fichCM = Range("BB11").Value 'chemin du fichier : C:\Users\user\Desktop\Crx-maint\CM maint.xlsm
fichCL = Range("BB10").Value 'chemin du fichier : C:\Users\user\Desktop\Crx-maint\CL maint.xlsm
NFlia = Range("BD9").Value 'Nom du fichier : Lia maint.xlsm
NFcp = Range("BD12").Value 'Nom du fichier : CPmx maint.xlsm
NFcm = Range("BD11").Value 'Nom du fichier : CM maint.xlsm
NFcl = Range("BD10").Value 'Nom du fichier : CL maint.xlsm
Foundcpf = False: Foundcmf = False: Foundclf = False: Foundliaf = False
For Each lWorkbookf In Workbooks
If lWorkbookf.FullName = fichLIA Then
Foundliaf = True
End If
If lWorkbookf.FullName = fichCM Then
Foundcmf = True
End If
If lWorkbookf.FullName = fichCP Then
Foundcpf = True
End If
If lWorkbookf.FullName = fichCL Then
Foundclf = True
End If
Next
If Foundcpf Then
Workbooks(NFcp).Close Savechanges:=False: ' Fermeture FICHIER CPmx
End If
If Foundcmf Then
Workbooks(NFcm).Close Savechanges:=False: ' Fermeture FICHIER CM
End If
If Foundliaf Then
Workbooks(NFlia).Close Savechanges:=False: ' Fermeture FICHIER LIA
End If
If Foundclf Then
Workbooks(NFcl).Close Savechanges:=False: ' FermetureFICHIER CL
End If
End Sub
Les 2 exemples dans le programme principal de la feuille:
If Range("C2").Value = "" And Range("BB35").Value = 0 And Range("A1").Value = "" Then existO: 'FICHIERS optionnels existants ou pas LT Tb CF CfMp
End If
' BB35, entre 0 et 4 indique le nombre de fichiers optionnels présents (cela fonctionne et la procédure existO est après et séparée de la procédure Worksheet_Calculate()de la feuille1
If Range("C2").Value = "" And Range("BB35").Value = 4 And Workbooks.Count = 4 Then Module3.choixoption ' Par une Msgbox différente, on choisit l'option souhaitée éventuelle; cela fonctionne bien
End If
'La partie qui pose problème en répondant "oui"
If Range("A1").Value = Range("L2").Value And Workbooks.Count = 4 And Range("C2").Value = "x" Then
If MsgBox(Range("H1").Value, vbYesNo) = vbYes Then Ouieng = 1 Else Noneng = 1
End If
If Noneng = 1 Then
Range("A1").Value = ""
End If
If Ouieng = 1 Then geseng: ' Sauvegarde du fichier
'End If
'Poursuite du programme OK
End SubLa procédure geseng suit et est présente dans mon 1er fichier joint
Re,
Tu as besoin d'aide mais ne peux nous envoyer un fichier cohérent. Je ne peux rien pour toi...