IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Macros et VBA Excel Discussion :

Problème divers à l'ouverture de mon fichier excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Juin 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2016
    Messages : 17
    Par défaut Problème divers à l'ouverture de mon fichier excel
    Bonjour à tous,

    Je travail depuis quelque temps sur une base de données qui réalise des calculs, des graphiques, de nombreuses recherches, etc. Aujourd'hui le travail est plus ou moins terminé mais je rencontre des problèmes qui sont gênant dans la mesure ou je ne serais pas le seul utilisateur de ce fichier.

    Il y a deux problèmes principaux que je n'arrive pas à régler, ils n'empêchent néanmoins pas le programme de fonctionner, ces deux problèmes ont un points communs ils apparaissent a chaque fois que je relance le programme.

    Le premier concerne une validation de donnée réalisée par macro, pour résumer, mon programme réalise un très grands nombre de validations de données sur différentes feuilles qui fonctionnent très bien, sauf que lorsque que je ferme mon fichier et que l'ouvre le lendemain il m'affiche le message disant qu'Excel n'a pas récupéré l'intégralité du fichier et il m'annonce qu'il a dû supprimer la validation des données. Ce qui m'oblige a recompiler mon code pour les réafficher a chaque fois (code qui prend 5/6 min a s'exécuter).

    La ou cela devient compliqué c'est que cela ne se produit pas nécessairement a chaque ouverture du ficher (parfois mes listes sont conservées) et en général seulement sur une des feuilles alors que plusieurs feuilles contiennent le même code fonctionnant de la même manière. Je vous transmet le code qui me réalise mes validations de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    If Target.Column <> 3 Then
     Exit Sub
     Else
        'si le changement a lieu dans une des trois premières lignes, sort de la procédure
            If Target.Row < 4 Then Exit Sub
                'If Target.Row = J Then Sheets("Uw Aluminium").Cells(J, 6) = ""
     
                If Selection.Cells.Count > 1 Then Exit Sub 'si plus d'une seule cellule sélectionnée, sort de la procédure
                    If Target.Value = "" Then Sheets("Uw Aluminium").Cells(J, 6).Clear: Exit Sub 'si la cellule est effacée, efface la cellule en colonne I (tout)
     
                        Set OB = Worksheets("BDD") 'définit l'onglet OB
                        TV = OB.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
                        Set D = CreateObject("Scripting.dictionary") 'définit le dictionnaire D
                            For I = 1 To UBound(TV, 1) 'boucle sur toutes les ligne I du tableau des valeurs TV
                            'si la valeur de la donnée (convertie en texte) ligne I colonne 1 de TV est égale
                            'à la valeur (convertie en texte) de la cellule modifiée (forcément en colonne C)
                            'alimente le dictionnaire D avec la valeur ligne I colonne 5 de TV
                                If CStr(TV(I, 3)) = Sheets("Uw Aluminium").Cells(J, 3) And CStr(TV(I, 6)) = "Périphérique" Then D(TV(I, 5)) = ""
     
     
                            Next I 'prochaine ligne de la boucle
                            With Sheets("Uw Aluminium").Cells(J, 6).Validation 'prend en compte la validation de données de la cellule décalée d'une colonne à droite (colonne B donc)
                                .Delete
                            End With
                            TT = D.KEYS 'récupère dans le tableau temporaire TT la liste des éléments du dictionnaire D sans doublon
                            L = Join(TT, ",") 'définit la liste L
                                If Not L = "" Then 'condition : si la liste L n'est pas vide (ça peut arriver si aucune occurrence
                                'de la cellule éditée n'est trouvée dans la base de données de l'onglet O)
                                 With Sheets("Uw Aluminium").Cells(J, 6).Validation 'prend en compte la validation de données de la cellule décalée d'une colonne à droite (colonne B donc)
     
                                .Add xlValidateList, Formula1:=L 'ajoute une validation de donnée avec la liste
     
                                 End With
                                End If 'fin de la condition
    Set D = Nothing
     
    End If
    J'ai un second problème qui me semble bien plus simple à résoudre, j'affiche des graphiques (image gif) dans un Userform avec différents onglets ainsi que des checkbox qui modifient les données à afficher etc. Cela fonctionne également très bien sauf que lorsque je relance mon programme si je lance ma macro pour afficher mes graphiques on me dit erreur 481 image incorrect.

    Je suis obliger pour régler cela d'aller sur mon onglet "graphiques" d'Excel la ou se trouvent mes graphiques qui s'affichent dans un second temps dans l'Userform et de parcourir tout mes graphiques comme si excel avait besoin que je charge les images avant les afficher dans mon userform.

    J'ai tenté les fonction Refresh sur ma feuille mais pour le moment cela ne fonctionne pas.

    J'ai hésité a créer deux sujets différents pour chaque soucis mais je ne voulais pas encombrer le forum j'espère que cela ne pose pas de problème.

    Merci d'avance à tous pour votre aide.

    Ounett

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Juin 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2016
    Messages : 17
    Par défaut
    Le problème 2 est résolu, pour ceux que ça intéresse il suffit de placer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuille concernée").ChartObjects(num).Activate
    Ce qui dans mon cas me permet également de masqué la feuille Excel contenant les graphiques puisque l'utilisateur n'aura pas à intervenir dessus.

    Le premier problème en revanche n'est pas résolue pour le moment.

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par ounett Voir le message
    Bonjour à tous,

    Aujourd'hui le travail est plus ou moins terminé
    Il va être à recommencer dans pas grand temps



    Le premier concerne une validation de donnée réalisée par macro, pour résumer, mon programme réalise un très grands nombre de validations de données sur différentes feuilles qui fonctionnent très bien, sauf que lorsque que je ferme mon fichier et que l'ouvre le lendemain il m'affiche le message disant qu'Excel n'a pas récupéré l'intégralité du fichier et il m'annonce qu'il a dû supprimer la validation des données. Ce qui m'oblige a recompiler mon code pour les réafficher a chaque fois (code qui prend 5/6 min a s'exécuter).
    Considères-toi extrêmement chanceux et arrêtes-tout. Excel a toujours besoin de tous ses classeurs ouverts en mémoire vive pour fonctionner. Au moins ton fichier n'est pas encore corrompu. Il suffit juste que la mémoire soit mobilisée de manière imprévue par une autre application, ou que le fichier croisse un peu plus, pour qu'Excel plante avant de terminer le (demi) sauvetage qu'il réussit encore à faire. Pour que ton code prenne 5 minutes à terminer, cela ne veut dire que deux choses. Ou bien, il est extrêmement mal conçu, ou bien tu le fais travailler sur un monstre.

    Moi, je te dirais de faire d'urgence une petite vérification.

    Puisque ton classeur est en fait un fichier zip, change temporairement l'extension en .zip et ouvres-le dans un programme de compression qui va te donner également la taille du fichier décomprimé. Ensuite compare cette valeur avec ta mémoire vive et uniquement la mémoire vive disponible. Et n'oublie pas que tu as besoin de beaucoup de marge pour traiter tes données et réaliser tes graphiques. Et c'est sans compter tous les autres calculs et toutes les mises en forme.


    En terminant, je crois fermement en la dernière ligne de ma signature.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    quand tu crées des listes de validation par VBA, tu peut générer des listes de nombreux éléments.

    mais hélas, il y a une limite à ne jamais dépasser, car sinon lors de l'ouverture du fichier, Excel ne parviendra pas à charger la totalité de la liste (je suppose même qu'il tronque cette liste lors de l'enregistrement !)

    aussi, il est nécessaire de supprimer les listes de validation lorsqu'elles dépassent 256 éléments (je crois que c'est la limite)

    de mon côté, et surtout si le classeur est utilisé par d'autres, j'utilise toujours les mêmes procédés pour être certain que le fichier n'est jamais enregistré avec les listes de validation :

    1) les listes de validation se créent uniquement quand on clique dans la cellule concernée
    2) sur l'évènement Deactivate de la feuille : suppression de toutes les listes de validation de la feuille (ça n'empêche pas la cellule de conserver la dernière valeur qui était choisie)
    3) sur l'évènement BeforeSave : suppression de toutes les listes de validation du classeur


    comme ça, je suis certain que personne ne peut enregistrer le fichier avec une liste de validation existante

    Au besoin, tu peux prévoir dans l'évènement Open du Workbook une procédure qui va les créer une première fois dans leur intégralité

Discussions similaires

  1. [XL-2010] Problème pour l'ouverture d'un fichier Excel suite à une macro VBA
    Par BDA53 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/11/2015, 09h40
  2. Problème sur VBA : ouverture d'un fichier Excel Réseau
    Par michelsimon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/12/2012, 20h59
  3. [EXCEL 2002] Problème ouverture de 2 fichiers Excel
    Par Golork dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/06/2010, 19h45
  4. [VB]Problème ouverture de deux fichier excel
    Par Yanmeunier dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/02/2006, 15h51
  5. problème d'ouverture d'un fichier EXCEL!!
    Par JauB dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/11/2005, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo