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 :

Variable créées dans un public Sub ? et quelle est la limite de création d’application sous-excel ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 8
    Par défaut Variable créées dans un public Sub ? et quelle est la limite de création d’application sous-excel ?
    Salut,

    C'est ma deuxième question sur le forum, je ne cherche pas de solutions à mon problème parce qu'en lisant les autres discussions il s'est avéré que ce n'est pas évident sans optimisation de code.
    Vers la fin de la réalisation de mon application, mon Excel 2013 commence à planter quand je clique sur un combobox (ça n'arrive pas souvent mais ça arrive).
    Je change de post et là sur Excel 2007 quand je clique sur n'importe quel bouton de mon application ainsi que le combobox qui faisait planter mon Excel 2013, j'ai le message d'erreur "Mémoire insuffisante pour afficher en entier" je clique sur le ok du message et l'objectif de ma macro est atteint. Je cherche sur ce forum je trouve que c'est dû à un problème de mémoire et dans une discussion que c'est sur Excel 2007 uniquement.

    Bon je n'ai pas de variable public mais j'ai crée des fonctions avec sub au lieu de private sub (par ignorance) et j'avoue avoir crée beaucoup de variables que je pourrai minimiser (par ignorance aussi). Bon ma question est la suivante est ce que les variables créés dans un sub ne sont pas vider ou écraser ? J'aimerai comprendre comment Excel manipule les choses pour prendre en considération vos explications lors de l'optimisation de mon code. Dans ma tête après un end toutes les variables sont écrasées.

    Une deuxième question banale peut être mais j'ai besoin d'être rassurée :

    Quelle est la limite de création d'application sur Excel ?

    En gros mon application permet d'alimenter une base de données pour le moment (50 lignes et 35 colonnes) après mise en pratique (plus que 500 lignes et 35 colonnes toujours) et de générer des tableaux de bord.

    Pour alimenter mon application j'utilise 3 Userform.
    Pour générer mes tableaux de bord (7 tableaux) j'utilise un Userform pour entrer la date de début et la date de fin, je clique sur un bouton et mes 7 tableaux sont remplis (à l'aide de filtres automatiques je calcule sur des tableaux le nombre de cellules visibles et sur d'autres la sommes d'une colonne ).
    Mes feuilles ne comportent aucun graphique.

    Est ce que je suis dans la limite genre est ce que vous avez vu ou programmé des applications plus lourdes que celle que je tente réaliser ?
    Et si j'arrive à résoudre mon problème de mémoire en optimisant mon code est ce que je risque d'avoir le même problème quand la base de données deviendra plus grande ?

    J'ai beaucoup écrit mais j'ai besoin d'être rassurée. Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mary93 Voir le message
    Bonjour,

    Quelques questions qui pourraient éclairer :
    • Combien de lignes de codes avez-vous avec des Set NomdeVariable =..... ? Et combien de Set NomDeVariable = Nothing ?
    • Utilisez-vous des matrices ?
    • Lorsque vous utilisez des variables Range, combien de cellules sont sélectionnées ?

  3. #3
    Membre habitué
    Femme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 8
    Par défaut
    Bonjour Eric,

    Merci pour ta réponse.

    Alors pour répondre à tes questions :

    Je n'utilise pas de matrice.

    Mon code fait 4 540 lignes sur 4 userforms et un module qui permet de masquer et afficher mes userforms et les 5 feuilles que j'utilise (à savoir que je sautais les lignes pour que je puisse me repérer facilement et j'ajoutais beaucoup de commentaires).

    Mon userform qui permet de générer mes tableaux de bord (d'ailleurs c'est sur ce Userform que ça plante) est de 1 365 lignes. Sur la première ligne de mon userform j'ai déclaré un objet que j'utilise après pour identifier ma base de données et un Range qui définit la plage que je souhaite filtrer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private O As object 
    Private PLA As Range
    et dans chaque procédure je mets le code suivant une seule fois mais je ne vide no l'objet ni la plage après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set O = Sheets("BaseDeDonnées")
    Set PL = O.Range("F3:F" & DL) 'DL est la dernière ligne saisie de la colonne F pour le moment (pour mes tests) c'est 50 lignes
    Pour parcourir ma base de données filtrée j'utilise un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Tablo As new collection, cellule As Range
    Je vide le tablo par = Nothing à chaque fois mais pas la cellule.

    Comment pourrais-je vider mon Object et ma plage par nothing aussi ?

    NB : J'ai mis toutes mes precédures entre Private sub et end sub mais le problème persiste.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mary93 Voir le message
    Une règle que je m'applique : Un Set créé dans une procédure est systématiquement détruit dans la même procédure. Les macros lancées à l'intérieur de la procédure et qui ont besoin des données de la procédure principale sont passées par paramètres.

    Regarde déjà pour qu'à chaque Set XXXX, tu as Set XXXX = Nothing et indique si tu rencontres toujours un problème.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    [...]
    J'aime beaucoup. Lorsqu'une procédure/fonction a besoin de valeurs externes, on les lui passe en arguments: règle de base pour écrire du code propre et réutilisable.

    NE JAMAIS utiliser de variables globales dans ce cas, et d'ailleurs, en utiliser le moins possible.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    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...
    ---------------

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/01/2016, 10h18
  2. [AC-2013] remplacer le nom d'un formulaire par une variable dans un Public Sub
    Par GuyDuLac dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/10/2014, 17h23
  3. Réponses: 2
    Dernier message: 03/12/2008, 17h34
  4. Macro dans un public sub
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/08/2007, 15h54
  5. Utilisation de recordset dans une Public Sub
    Par Tintou dans le forum Access
    Réponses: 6
    Dernier message: 07/08/2007, 17h08

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