Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Sans fichier difficile de dire.
C'est peut être tout simplement parceque le nom de la feuille n'est pas strictement le même. Erreur de casse par exemple...
Thomas, j'ai essayé ta proposition mais malheureusement, impossible de passer en mode débogage à ce moment (Excel me fait un message d'erreur) ...
Spitnolan, merci beaucoup pour la proposition mais pas d'erreur de ce côté là.
Pierrot, c'était effectivement toi qui avait raison. Malheureusement, même en arrivant à déclencher worksheet_activate, ça ne résout pas mon problème.
Par contre, je crois que je viens de comprendre la cause du problème. Mais je n'arrive pas à la résoudre. J'espère que vous pourrez m'aider.
En fait, je souhaitais activer Worksheet_Activate afin que cette dernière appelle Worksheet_SelectionChange.
Worksheet_SelectionChange a pour rôle de définir plusieurs variables afin de les comparer par la suite aux valeurs obtenues lors de Worksheet_Change et exécuter des actions en conséquence. Ces variables sont déclarées sous forme de variables Private.
Malheureusement, je viens de remarquer qu'à chaque fois que je sauvegarde, les variable définies par Worksheet_SelectionChange disparaissent.
Je viens de tester dans un classeur extérieur la procédure suivante :
Code:
Option Explicit
Private var_test As String
Private Sub Worksheet_Change(ByVal Target As Range)
If var_test = "mavaleur" Then
Debug.Print 1
Else
Debug.Print 0
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
var_test = "mavaleur"
End Sub
Ca m'a permis de comprendre que le problème ne vient pas de la sauvegarde en elle-même car en l'occurence, la valeur de la variable var_test n'est pas effacée à la sauvegarde.
Ca vient donc incontestablement des modules que j'utilise.
Voici donc le code du module ShowAll :
Code:
Sub ShowAll()
Worksheets("Fiche de renseignements").Visible = xlSheetVisible
On Error Resume Next
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Visible = True
If Err.Number = 0 Then
Application.DisplayAlerts = False
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Delete
ThisWorkbook.Worksheets("Fiche de renseignements").Copy After:=Worksheets("Fiche de renseignements")
Application.EnableEvents = True
ThisWorkbook.Worksheets("Fiche de renseignements").Activate
Application.EnableEvents = False
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Visible = xlSheetVeryHidden
Application.DisplayAlerts = True
On Error GoTo 0
Else
ThisWorkbook.Worksheets("Fiche de renseignements").Copy After:=Worksheets("Fiche de renseignements")
Application.EnableEvents = True
ThisWorkbook.Worksheets("Fiche de renseignements").Activate
Application.EnableEvents = False
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Visible = xlSheetVeryHidden
On Error GoTo 0
End If
Worksheets("Informations").Visible = xlSheetVeryHidden
End Sub
Ci-dessous le code du module BeforeSave :
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.EnableEvents = False
Application.ScreenUpdating = False
Dim MonChoix As Variant
Cancel = True
If Not SaveAsUI Then
Call gestion_sauvegarde(1)
ThisWorkbook.Save
ThisWorkbook.Saved = True
Else
MonChoix = Application.GetSaveAsFilename(ThisWorkbook.Name, "Classeur Microsoft Office Excel (*.xls), *.xls")
End If
If Not MonChoix = False Then
ThisWorkbook.SaveAs Filename:=MonChoix, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
Call gestion_sauvegarde(1)
ThisWorkbook.Save
ThisWorkbook.Saved = True
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Enfin le code de gestion_sauvegarde :
Code:
Sub gestion_sauvegarde(ByVal Cas As Byte)
Select Case Cas
Case 0
On Error Resume Next
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Visible = True
If Err.Number = 0 Then
Application.DisplayAlerts = False
ThisWorkbook.Worksheets("Fiche de renseignements").Delete
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Name = "Fiche de renseignements"
Application.DisplayAlerts = True
On Error GoTo 0
Else
On Error GoTo 0
End If
Case 1
On Error Resume Next
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Visible = True
If Err.Number = 0 Then
Application.DisplayAlerts = False
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Delete
ThisWorkbook.Worksheets("Fiche de renseignements").Copy After:=Worksheets("Fiche de renseignements")
ThisWorkbook.Worksheets("Fiche de renseignements").Activate
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Visible = xlSheetVeryHidden
Application.DisplayAlerts = True
On Error GoTo 0
Else
ThisWorkbook.Worksheets("Fiche de renseignements").Copy After:=Worksheets("Fiche de renseignements")
ThisWorkbook.Worksheets("Fiche de renseignements").Activate
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Visible = xlSheetVeryHidden
On Error GoTo 0
End If
Case 2
On Error Resume Next
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Visible = True
If Err.Number = 0 Then
Application.DisplayAlerts = False
ThisWorkbook.Worksheets("Fiche de renseignements (2)").Delete
Application.DisplayAlerts = True
On Error GoTo 0
Else
On Error GoTo 0
End If
End Select
End Sub
Voilà, je sais, c'est un peu lourd, mais le problème vient très probablement de là car avant d'ajouter ces modules, je n'en avais pas. Ca fait déjà un bout de temps que j'essaye de résoudre le problème mais je n'y arrive vraiment pas.
Si vous pouvez m'aider, je vous en serais donc infiniment reconnaissant et merci à l'avance,
si tu veux avoir plus de chance d'obtenir une réponse, tu devrais pluôt nous mettre ton code dans un classeur, avec les bons noms d'onglet, car là vois tu, personnellement, pas trop de courage pour reconstituer le tout...
Je viens de définir le problème mais je n'arrive pas même à imaginer sa cause potentielle.
J'ai fait un fichier neuf et j'ai recopié le code de mon fichier précédent : ça marche.
J'ai crée une copie de mon fichier précédent, j'ai effacé tout le contenu et j'ai rendu le code exactement identique à celui du fichier neuf : ça marche pas.
Je poste dans ce fil le fichier qui marche.
Pour essayer, entrez quelque chose en P211 puis en P212 puis sélectionnez P211, sauvegardez et changez le contenu de P211 : P212 est effacé.
peut être rien à voir, mais je vois déjà 2 choses, la 1ère sur le "classeur cassé" sul la ligne 210 les cellules sont fusionnées, pas sur le "classeur qui marche". 2ème chose sur chaque feuille, il y a la même déclaration de variable public, préféré cette déclaration au niveau d'un module standard comme ton module "ouverture_fermeture".
à voir si ces modifications peuvent solutionner ton problème.
Merci pour l'idée mais non, le problème ne vient pas de là.
Ce qui est étrange c'est la taille du "classeur cassé" par rapport au "classeur qui marche".
De plus, quand on essaye de voir ce qui se passe lors de la sauvegarde en mode débogage, Excel fait le message "Impossible d'entrer en mode arrêt maintenant." sans aucune raison apparente, surtout sachant que ça ne fait pas ce problème sur le "classeur qui marche".
Personnellement, je pense que le problème vient de la structure xml du fichier qui a du être endommagée d'une manière ou d'une autre mais je ne m'y connais absolument pas.
J'ai essayé d'ouvrir microsoft script editor mais je n'y comprends rien.
Voilà, merci beaucoup pour l'aide, a bientôt,
Youri
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.