Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre à l'essai
    [Résolu] Enregistrement Fichier - Réouverture en erreur à cause d'une macro
    Bonjour à tous,

    J'ai un problème sur mon classeur Excel.
    J'ai créer pour des utilisateurs un fichier Excel où la plupart des champs se remplissent soit par menu déroulant.
    Sur 3 cellules j'ai reproduit une macro (trouvée sur un forum) pour une prise en compte d'un menu déroulant sur 3 niveaux. (Si on choisit une enseigne, on voit les catégories uniquement de cette enseigne, dans les catégories on voit uniquement les opérations de cette dernière).

    La macro fonctionne parfaitement et est très simple à adapter un vrai bonheur.
    Mon seul problème c'est :
    -Je renseigne les 3 cases ou 2 cases qui sont concernés par cette macro
    - J'enregistre
    -Lorsque je tente de ré-ouvrir le fichier j'ai ce message :

    "Désolé...Nous avons trouvé un problème dans le contenu de "nom du fichier", mais nous pouvons essayer de récupérer le maximum de contenu. Si la source est fiable , cliquez sur Oui"

    Bien évidemment lorsqu'on ré-ouvre en cliquant sur Oui on perds des informations et toute la mise en page.

    Si je ne renseigne aucune case concerné par la macro (B14, B16 et B17 de l'onglet "Matrice"), aucun problème je peux enregistrer, fermer et ré-ouvrir sans souci.

    Je sais donc que le problème se situe au niveau de la macro mais je n'arrive pas du tout à comprendre pourquoi. J'ai testé toutes les autres cases avec mes menus déroulants ou les saisies manuelles et je n'ai aucun problème d'enregistrement et de réouverture du fichier.

    J'ai vraiment besoin de ce document et ça fait 3 jours que je tente de comprendre en vain...

    Sur Internet je trouve partout qu'il faut réinstaller la version Office, que ce serait ça le problème mais vu que je rencontre ce souci que sur ce document et que lorsque ces 3 cases sont renseignées j'ai des doutes...

    Vous trouverez en pièce jointe le fichier d'origine et le fichier test (avec deux cases, concernées par la macro, renseignées) qui me met le fameux message d'erreur.

    En vous remerciant d'avance pour toute l'aide que vous pourrez m'apporter.

  2. #2
    Responsable
    Office & Excel

    Salut.

    Tu as une objet fantôme dans ton fichier de test, et, bizarrement, tu as mis ton code sur cette feuille.




    Donc oui, je pense que ton fichier est corrompu et est inutilisable.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre à l'essai
    Bonjour Pierre,

    Je pense que c'est la réparation qui fait ça automatiquement.

    Dans le fichier d'origine ma macro est correctement positionnée sur la feuille "Matrice" et il n'y a pas de feuille fantôme.

    J'aimerais comprendre pourquoi Excel fait ça afin de réparer le problème.

  4. #4
    Responsable
    Office & Excel

    Ok, je viens de comprendre le problème que tu rencontres.

    C'est après avoir rempli B14, B16 et B17 et que tu enregistres que tu as le problème lors de la réouverture. Je viens de tester et j'ai le même problème. Je n'ai pas de solution pour l'instant.

    Faut dire que le code utilisé pour mettre à jour les listes déroulantes ne plaide pas en ta faveur. Je crois en percevoir l'origine au vu de certaines horreurs.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre à l'essai
    Pierre,

    C'est exactement ça mon problème

    Pour ma part, je ne sais pas vraiment programmer des macros, je cherche sur Internet (sur des forums principalement) et je tente d'adapter à mon cas, des fois ça marche et des fois non et je repars en quête d'une macro que j'arrive à adapter.

    Celle-ci me semblait particulièrement simple à adapter et elle fonctionne vraiment bien...enfin jusqu'à l'enregistrement du fichier....

  6. #6
    Responsable
    Office & Excel

    Voici un fichier sans VBA qui fait la même chose, mais il demande un peu de préparation. J'ajoute que j'ai travaillé avec des tableaux structurés (voir mon tuto) qui permettent de réaliser plus facilement certaines choses avec Excel, dont les listes déroulantes en cascade, ainsi qu'en VBA.

    Préparation

    J'ai scindé le grand tableau de ta DB en trois tableaux distincts placés sur Feuil1. Il y a:
    un tableau avec les trois types d'enseignes;
    un tableau avec les catégories par enseigne, trié sur les enseignes puis les catégories;
    un tableau avec les opération par catégorie et par enseigne, trié sur les enseignes, les catégories puis les opérations.

    Evidemment, ça "complique" un peu l'ajout d'une donnée dans les tableaux puisqu'il faut, pour que la mécanique fonctionne, que les trois tableaux soient triés comme expliqué ci-dessus.

    Après, on travaille avec cinq plages nommées:
    • Choix_Enseigne, qui pointe vers la cellule B14 de Matrice;
    • Choix_Catégorie, qui pointer vers la cellule B16 de Matrice;
    • Enseignes, qui fait simplement référence aux données du premier tableau;
    • Catégories, qui pointe vers la liste des catégories liées à l'enseigne choisie en B14 de Matrice grâce à la formule =DECALER(Feuil1!$C$1;EQUIV(Choix_Enseigne;t_Catégories[Enseigne];0);0;NB.SI.ENS(t_Catégories[Enseigne];Choix_Enseigne))
    • Opérations, qui pointe vers les opérations liées à l'enseigne et la catégorie choisies en B14 et B16 de Matrice grâce à la formule =DECALER(t_Opérations[[#En-têtes];[Opération]];EQUIV(Choix_Enseigne&Choix_Catégorie;t_Opérations[Enseigne]&t_Opérations[Catégorie];0);0;NB.SI.ENS(t_Opérations[Enseigne];Choix_Enseigne;t_Opérations[Catégorie];Choix_Catégorie))



    En B14, B16 et B17 de Matrice, on crée les listes déroulantes qui s'appuient sur Enseignes, Catégories et Opérations.


    Si ton fichier n'est utilisé qu'en EXCEL 365 (à toi de le préciser), on pourrait peut-être se passer des trois tableaux et travailler directement sur le grand tableau de ta DB
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Responsable
    Office & Excel

    Exclusivité 365

    Comme je le pressentais, on peut simplifier pour une utilisation exclusive en 365 ou 2019

    Il existe les nouvelles fonctions TRIER, UNIQUE, FILTRE qui permettent de recomposer les trois listes que j'ai éclaté dans la précédente version du fichier.

    L'idée est toujours de travailler avec les deux cellules B14 et B16 de Matrice nommées Choix_Enseigne et Choix_Catégorie, ainsi que sur un tableau structuré qui reprend tes données de la feuille BD:F131 nommé t_Données.

    Après, dans une feuille1, en A, on trie les enseignes et on prend des valeurs uniques.





    En C, on récupère les catégories liées à l'enseigne choisie dans Choix_Enseigne


    Attention que sur mon fichier, cette procédure impose un recalcul malgré le calcul automatique. Je ne sais pas si c'est une bizarrerie de Microsoft ou non.




    En E, on récupère les opération liées à une catégorie et une enseigne




    On crée les plages nommées qui s'appuient sur ces trois listes et on appuie B14, B16 et B17 en listes de validation sur ces trois plages nommées:
    • Enseignes: =DECALER(Feuil1!$A$1;1;0;NBVAL(Feuil1!$A:$A)-1)
    • Catégories: =DECALER(Feuil1!$C$1;1;0;NBVAL(Feuil1!$C:$C)-1)
    • Opérations: =DECALER(Feuil1!$E$1;1;0;NBVAL(Feuil1!$E:$E)-1)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre à l'essai
    Pierre,

    Merci beaucoup pour toutes tes solutions, j'ai adopté la première. Ce n'est pas grave si la construction des tableaux est un peu fastidieuse je ne le fait que 2 fois par an donc pas de souci.

    J'ai tenté de reproduire le second exemple mais je n'y arrive pas, j'en ai déduis que malgré le fait d'être sur Office 365, ce n'est pas Excel 365 que j'ai.

    En tout cas c'est vraiment gentil, j'ai réussi à dépanner mes utilisateurs.

  9. #9
    Responsable
    Office & Excel

    En fait, les fonctions dont je parle devraient être disponibles en 365. Sur le site de Microsoft, on précise que les fonctions sont dispos en juillet 2020, et sur ce lien, on donne quelques infos supplémentaires.

    C'est une chose assez bizarre que les Office 365 ne soient pas tous égaux, et c'est fastidieux de proposer les nouvelles fonctions et outils de la suite Office à partir du moment où ces nouveautés ne sont pas déployées sur tous les 365. C'est un non-sens total de la part de MS.


    Ceci étant dit, le fait de reprendre les tables en les séparant n'est pas forcément une mauvaise chose en soi et participe, à mon sens, d'une bonne conception de son classeur

    Bonne continuation sur nos forums
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

###raw>template_hook.ano_emploi###