Excel buggé
fabien25000
Messages postés
697
Statut
Membre
-
fabien25000 Messages postés 697 Statut Membre -
fabien25000 Messages postés 697 Statut Membre -
Bonjour,
J'ai fait un fichier excel pour mes commerciaux qui édite des devis (avec l'aide de plusieurs d'entre vous, que je remercie encore, sur certains points qui me posaient problème).
il fonctionne à merveille, c'est devenu un véritable outil de force de vente.
Cependant, mercredi dernier, la version qui était disponible pour les commerciaux a complètement planté, impossible de l'ouvrir : bug à la première ligne de code du workbook_open et un excel vide sans feuilles. Il faut savoir que se fichier excel ne fonctionne que par VBA en mode Application.WindowState = xlMinimized et Application.Visible = False et que le code ne fait jamais rien d'autre que enregistrer sous hors là il a été enregistrer ce mercredi
j'aimerai comprendre ce qui a pu se passer afin de faire en sorte d'empêcher que ça se reproduise.
le premier bug était sur une variable qui va récupérer un mot de passe dans le gestionnaire de nom résultat : "error 2029".
j'ai remplacé le [nom] par la vrai valeur dans le débogueur, il passe la ligne et plante dans la foulée sur la récupération d'une valeur en A1 sur une feuille précise en déclarant que la feuille n'appartient pas à sélection alors qu'elle apparait bien dans la liste de l'éditeur. Pour vérifier j'ai fait un "sub toto msgbox lafeuille.rangeA1.value" et ça me renvoie bien la valeur contenue en A1 de cette feuille..
j'ai ensuite essayé de faire un sub pour rendre toutes feuilles visibles avec une boucle, la boucle tourne mais le classeur est toujours vide en apparence
Il a fallut que j'utilise des méthodes que l'on connait mais dont on parle pas pour forcer les feuilles à être à nouveau visibles dans ce fameux classeur vide et le code refonctionne normalement
je vous partage le code du workbook_open bien que je ne pense pas que le problème vienne de là :
Merci d'avance pour vos avis éclairés
J'ai fait un fichier excel pour mes commerciaux qui édite des devis (avec l'aide de plusieurs d'entre vous, que je remercie encore, sur certains points qui me posaient problème).
il fonctionne à merveille, c'est devenu un véritable outil de force de vente.
Cependant, mercredi dernier, la version qui était disponible pour les commerciaux a complètement planté, impossible de l'ouvrir : bug à la première ligne de code du workbook_open et un excel vide sans feuilles. Il faut savoir que se fichier excel ne fonctionne que par VBA en mode Application.WindowState = xlMinimized et Application.Visible = False et que le code ne fait jamais rien d'autre que enregistrer sous hors là il a été enregistrer ce mercredi
j'aimerai comprendre ce qui a pu se passer afin de faire en sorte d'empêcher que ça se reproduise.
le premier bug était sur une variable qui va récupérer un mot de passe dans le gestionnaire de nom résultat : "error 2029".
j'ai remplacé le [nom] par la vrai valeur dans le débogueur, il passe la ligne et plante dans la foulée sur la récupération d'une valeur en A1 sur une feuille précise en déclarant que la feuille n'appartient pas à sélection alors qu'elle apparait bien dans la liste de l'éditeur. Pour vérifier j'ai fait un "sub toto msgbox lafeuille.rangeA1.value" et ça me renvoie bien la valeur contenue en A1 de cette feuille..
j'ai ensuite essayé de faire un sub pour rendre toutes feuilles visibles avec une boucle, la boucle tourne mais le classeur est toujours vide en apparence
Il a fallut que j'utilise des méthodes que l'on connait mais dont on parle pas pour forcer les feuilles à être à nouveau visibles dans ce fameux classeur vide et le code refonctionne normalement
je vous partage le code du workbook_open bien que je ne pense pas que le problème vienne de là :
Private Sub Workbook_Open()
Dim tmpmsgbx, i As Integer
Dim Ws As Worksheet
Dim WB As Workbook, Pass As String, tmpSheetName As String
Dim MonTab As Variant
Dim tmptxt As String
'empêcher l 'affichage d'un classeur s'il est ouvert alors que l'exécution
'des macros est désactivée dans les options de sécurité
' ThisWorkbook.IsAddin = False
''au début de ta macro
Application.EnableCancelKey = xlDisabled 'empeche raccourci clavier Ctrl Pause
tmpSheetName = Worksheets("INFO").Range("A1").Value
Names("EditDevis").Visible = False
Names("ProtekLogo").Visible = False
MonTab = [ProtekLogo]
Worksheets(tmpSheetName).Activate
Worksheets(tmpSheetName).Protect MonTab
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayGridlines = False
Application.DisplayFormulaBar = False
If ThisWorkbook.Name = "NomDuFichierOuvert.xlsm" Then
MonTab = [EditDevis]
Call MisEnFormeLogin(False, MonTab)
For Each Ws In Worksheets
If Ws.Name <> tmpSheetName Then Sheets(Ws.Name).Visible = True
Names("EditDevis").Visible = True
Names("ProtekLogo").Visible = True
Next Ws
Application.WindowState = xlMaximized
Application.Visible = True
ActiveWindow.DisplayHeadings = True
ActiveWindow.DisplayGridlines = True
Application.DisplayFormulaBar = True
Exit Sub
Else
For Each Ws In Worksheets
If Ws.Name <> tmpSheetName Then Sheets(Ws.Name).Visible = xlSheetVeryHidden
If Ws.Name = Environ("username") Then 'résultat de 3 essais erronés sur un mot de passe qui ouvre le classeur
MsgBox "Erreur système, merci de contacter le Service compétant pour la remise en route de l'application"
ThisWorkbook.Close savechanges:=False
End If
Next Ws
If Worksheets("INFO").Range("A1").Value = "toto" Then
tmptxt = "toto"
Else
tmptxt = "tata"
End If
tmpmsgbx = MsgBox("Merci de vous assurer de ne pas avoir d'autre fichier Excel ouvert" & vbCrLf & vbCrLf & _
"Assurez vous d'enregistrer et fermer vos différents fichiers Excel avant de lancer l'application de chiffrage " & tmptxt, vbCritical + vbOKCancel, tmptxt)
'mon fichier ferme excel en dur à la fin du programme donc ça peut créer des problèmes si d'autres classeurs sont ouverts et non enregistrés
tmpmsgbx = MsgBox("mentions legales RGPD", vbInformation + vbYesNo, tmptxt)
End If
Worksheets(tmpSheetName).Visible = 1
If tmpmsgbx = vbYes Then
If Not ThisWorkbook.Name = "NomDuFichierOuvert.xlsm" Then
Application.WindowState = xlMinimized
Application.Visible = False
Load ufLoggin
ufLoggin.Show 0
End If
Else
ThisWorkbook.Close savechanges:=False
End If
End Sub
Merci d'avance pour vos avis éclairés
Configuration: Windows / Chrome 90.0.4430.212
A voir également:
- Excel buggé
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel trier par ordre croissant chiffre - Guide
Effectivement le code est impossible à tester en l'état, il va chercher trop d'infos annexes dans le classeur et dans d'autres sub. Il fonctionne comme je l'attend mais il est peut-être mal écrit, je l'ai partagé plutôt dans l'idée de faire sortir une "grosse" erreur qui sauterait aux yeux.
Rendre le fichier anonyme et exempt d'info confidentielles est clairement impossible (ou plutot beaucoup trop long) à ce stade malheureusement.
Depuis que c'est arrivé j'ai eu le temps d'y réfléchir, je ne sais toujours pas quelle manip' a été faite, ni par qui.
Ce qui est sûr c'est que le fichier a été enregistré, j'imagine suite à un bug ou une mauvaise fermeture puisque dans le code, je n'ai écrit "ThisWorkBook.save" que si le nom du fichier est différent de "NomDuFichier.xlsm".
Pour être clair, la trame c'est :
"NomDuFichier.xlsm" -> commercial édite un devis -> ThisWorkBook.SaveAs "NomduClient-Ville-Date"-> commercial édite un autre devis-> ThisWorkBook.Save
En tout état de cause c'est cet enregistrement "sauvage" qui a corrompu le fichier.
je réfléchis donc à un code qui dirait "tant que tu t'appelles "NomDuFichier.xlsm" alors enregistrer impossible MAIS enregistrer sous possible"' pour bien verrouiller ce mon code fait implicitement.
J'ai commencé à chercher à temps perdu, j'ai trouver comment empêcher tout enregistrement mais pas encore la nuance entre enregistrer et enregistrer sous. En m'y mettant sérieusement, je ne pense pas que ce soit compliqué.
Et idéalement une fermeture plus propre en cas de bug : j'aimerai trouver une solution qui en cas de bug, m'enregistre le fichier sous un nom spécifique dans un dossier dédié avec la valeur de tous les objets concernés au moment du bug.
Ca m'aiderait énormément parce qu'à ce jour le fichier peut éditer des devis sur 6 produits différents avec chacun minimum une vingtaine d'option possible donc quand le commercial vient en me disant "ton fichier à buggé j'ai pas pu faire mon devis" ça m'aide pas trop ... je pense qu'il faut que je me tourne vers un "On Error Go To" et un sub qui relève les infos mais je m'y suis pas encore penché.
Merci encore en tout cas