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 :

Conserver les données d'un tableau après fermeture d'un classeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 44
    Par défaut Conserver les données d'un tableau après fermeture d'un classeur
    Bonjour,

    Maintenant que je suis sur le bon forum, je reprends . Merci à ceux qui m'ont expliqué que je n'étais pas sous vb6 mais sous l'éditeur Microsoft Visual Basic 6.3 ce qui prête à confusion (pour ma part).

    Donc, j'ai créé une variable tableau et l'alimente régulièrement via les données d'un formulaire. Je voudrais que les données de ce tableau "virtuel" soient conservées après la fermeture du classeur, pour qu'à sa réouverture je puisse retrouver toutes les données de mon tableau et en rajouter si besoin. Comme je sais que la conservation de ces données n'est pas possible, je cherche des solutions.
    Le but est que ces données ne soient pas en permanence ausein des feuilles Excel parce que le classeur est déjà très lourd.

    Merci beaucoup,

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,

    ça ne va pas être facile si tu ne veux pas quelles soient stockées dans le classeur. Peut être utiliser un fichier externe mais dans ce cas, il faudra toujours t'assurer de son chemin pour la récup à l'ouverture du classeur car si tu déplace ce dernier ou que tu le distribue, il faudra faire suivre le fichier.

    Hervé.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 44
    Par défaut
    Merci de ta rapidité.
    En fait, je suis déjà en train de tester des choses : enregistrer les données sur des feuilles à la fermeture du classeur, et les supprimer après les avoir remises dans mon tableau à la réouverture.

    Cela marche comme ceci :
    • dans un module, je crée le tableau et l'alimente avec des données-exemples (je commence à tester sans le formulaire) en redimensionnant mon tableau à chaque fois
    • - ensuite l'événement "Fermeture du classeur" répartit les données sur différentes lignes et différentes colonnes de différents onglets (le tableau a 3 dimensions et est dynamique ce qui ne me facilite pas la tâche). Ces onglets commencent tous par "Sauvegarde Onglet1", 2, 3...
    • - ensuite l'événement "Ouverture" récupère ces données dans mon tableau et supprime les onglets

    Plusieurs problèmes à cette tentative de solution :
    • - lorsque j'ai alimenté le tableau, fermé le classeur, ouvert et que je veux alimenter le tableau de données supplémentaires, la fonction "redim preserve" plante (alors qu'après différents tests, je sais que mon tableau a bien récupéré toutes les données à l'ouverture)
    • - ensuite, comme le fichier sur lequel seront ces codes est déjà lourd, j'espère que çà ne ralentira pas encore plus son ouverture et sa fermeture
    • - enfin, et c'est là que je me demande pourquoi je continue ces tests, c'est que la création d'onglets de sauvegarde implique qu'il faut enregistrer à chaque fois. Or, si l'utilisateur veut fermer le classeur sans enregistrer pour x raisons, ma base de donnée disparait de la circulation...

    Sinon, pour prendre en compte ta solution, c'est ce que je pensais faire au départ mais mon formulaire est assez complexe et je ne sais pas si je pourrais transférer les données et les récupérer aussi facilement (je n'ai jamais essayé), et comme tu dis le fait d'avoir un fichier supplémentaire me paraît risqué : le fichier où j'intègre la macro est un gros fichier (pleins d'onglets, de requêtes SAP ou de feuilles en liaison avec d'autres classeurs) que l'utilisateur copie tous les 10 jours dans un nouveau dossier à chaque nouvelle date de facturation.

    Si j'avais pu créé ce fichier moi-même, je l'aurai simplifié de façon à gérer mes macros facilement, mais là je dois m'adapter.
    Le tableau que je souhaite créé récupère en fait les données de l'utilisateur, pour indiquer à la macro quelles données elle doit récupérer, dans quel(s) onglet(s), quelle(s) colonnes, sous quelles conditions, pour aller dans quel tableau de synthèse...

    Bref j'essaie de simplifier la tâche au maximum pour que personne, à la moindre modification, ait besoin d'accéder au code, mais çà devient difficile (cela dit rien qu'avec ce fichier j'en ai appris pas mal en VBA!)

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Le problème avec un tableau, qu'il soit à deux ou trois dimensions ou même plus (mais là, bonjour pour ci retrouver !) c'est qu'on ne peut redimensionner qu'une dimension, la dernière. Dans le premier Redim (à l'initialisation), tu donne les dimensions que tu veux mais ensuite, tu ne peux redimensionner que la dernière car forcément dans le cas contraire tu aurais ensuite des trous dans tes enregistrements précédents. Ci dessous ce qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim Tbl()
    Dim I As Integer
     
    ReDim Tbl(1 To 3, 1 To 2, 1 To 1)
    Tbl(1, 1, 1) = "Hervé"
    I = 2
    ReDim Preserve Tbl(1 To 3, 1 To 2, 1 To I)
    Tbl(1, 1, I) = "Theze"
    MsgBox Tbl(1, 1, 1) & vbCrLf & Tbl(1, 1, I)
    et ci-dessous ce qui ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim Tbl()
    Dim I As Integer
     
    ReDim Tbl(1 To 3, 1 To 2, 1 To 1)
     
    'redimensionnement de la dim. du milieu
    I = 3
    ReDim Preserve Tbl(1 To 3, 1 To I, 1 To 1)
    Tbl(1, I, 1) = "Theze"
    MsgBox Tbl(1, I, 1)
    Maintenant, travailler avec un tableau en mémoire sera toujours plus rapide que de travailler sur des cellules. Il te faudrait voir, pour les premières dimensions, si il t'es possible de leurs donner des dimensions plus grandes pour être sûr de pouvoir stocker toutes tes valeurs mais dans ce cas, attention dans les traitements futurs des valeurs avec ces cases vides ?
    Hervé.

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    pour les variables tableau vois ces tutoriels :



    - enfin, et c'est là que je me demande pourquoi je continue ces tests, c'est que la création d'onglets de sauvegarde implique qu'il faut enregistrer à chaque fois. Or, si l'utilisateur veut fermer le classeur sans enregistrer pour x raisons, ma base de donnée disparait de la circulation...
    Ce genre de réflexion, te ramène au départ de tout développement, le crayon et la papier, tu gagnerais peut-être du temps en exposant la nature de ton projet dans le Forum Conception Excel, ce qui te fournira possiblement les bonnes pistes d'approche et ensuite, si besoin, tu abordes les soucis techniques points par points dans le forum VBA technique

    cordialement,

    Didier

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 44
    Par défaut
    Bonjour,

    J'ai bien compris que Redim ne redimensionnait que la dernière dimension, et ai fait comme tu l'indiques : mes deux premières dimensions sont plus grandes puisque je ne peux pas les redimensionner, et seul la troisième dépend d'une variable et s'incrémente à chaque ajout de données.

    Comme je le disais :
    - quand j'ajoute des données dans mon tableau, Redim marche très bien.
    - à la fermeture du classeur, la macro crée des onglets et les remplit des données du tableau (pour pouvoir représenter un tableau à 3 dimensions dans Excel), cela marche aussi.
    - à l'ouverture du classeur, la macro remplit à nouveau le tableau avec les données de ces onglets, ce qui marche également.
    - là, mon tableau a bien récupéré toutes les données (vérifié aussi), mais si je veux rajouter des données maintenant, la Redim qui marchait bien avant ne marche plus!!!!

    Ensuite, çà n'arrange pas le problème, puisque la sauvegarde dans des onglets implique que l'utilisateur qui ferme le classeur doit obligatoirement l'enregistrer pour garder ces onglets, alors qu'il est possible régulièrement de vouloir fermer, pour telle ou telle raison, un classeur sans l'enregistrer.

    Pour répondre à Ormonth, tout ce que j'ai réussi à faire jusqu'ici dans la création de variables tableau provient des fichiers que tu as mis en lien.
    J'ai pas mal réfléchi justement sur ce sujet avant d'en arriver à cette solution (qui n'en est pas vraiment une), c'est pourquoi j'expliquai que si je me pose toutes ces questions c'est que le fichier a été créé par des utilisateurs ne connaissant pas vba (donc sans faire attention à des détails qui aurait pu me faciliter la tâche et diminuer le nombre de contraintes ou d'obstacles au projet). Mais tu as raison, je pense que je vais aller sur ce forum Conception, après avoir bien réfléchi à comment expliquer mon problème.

    Par contre pour ne pas me tromper pour la énième fois de forum, dans quelle partie du forum Conception dois-je exposer mon problème??

    Merci à vous. Si des idées arrivent entre temps, je prends toujours!!

Discussions similaires

  1. Pb pour conserver les données de mon tableau
    Par Macrocosmos dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/09/2014, 12h16
  2. Réponses: 6
    Dernier message: 17/06/2014, 15h53
  3. [MySQL] Mysql conserver les données après un retour de page
    Par fazpedro dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 31/08/2011, 08h56
  4. Réponses: 12
    Dernier message: 15/07/2009, 12h51
  5. Réponses: 2
    Dernier message: 19/06/2007, 12h08

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