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

Excel Discussion :

Création de comboBox qui vide les variables globales sans raison apparente


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut Création de comboBox qui vide les variables globales sans raison apparente
    Bonjour à tous,

    Merci de votre intérêt à lire mon post et a tenter de m'aider !

    Contexte:
    J'ai un petit fichier excel en guise de petite base de données qui recherche les données suivant les critères de recherche définie par l'utilisateur à l'aide d'un filtre composé de listBox.
    Le tout fonctionnement parfaitement et mes variables globals ne disparaissent pas ... enfin parfois mais j'ai gérer le cas en relançant les fonctions qui les initialisaient.

    Problème:
    Pour des soucis d'esthétisme je décide de remplacer mes pauvres listeBoxes, dans des cellules, par des ComboBoxs bien plus propre. Hors, à la fin de la création de mon filtre avec ces
    comboBoxs, toutes mes variables globales et mes tableaux globaux sont vides. Je ne comprends pas pourquoi elles sont toutes vides et ça me pose un soucis pour la suite car je stock
    des données concernant une certaine comboBox (Position, Taille, ...).

    Question:
    Cela étant plutôt désagréable, est-ce que quelqu'un connaitrai la cause de cette conséquence ?


    Voicis la fonction de création de mes comboBoxs (à savoir qu'à la fin de cette fonction si je fais un Msgbox d'une variable global elle est encore initialisée !! Et si je lance juste dérrière une
    fonction qui me raffiche la valeur de celle-ci, elle est soudainement vide ...)


    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Sub fct_suppr_all_comboBoxe()
     
        Const cbbs = "ComboBoxe"
        Const labs = "Label"
     
        For Each c In ActiveSheet.Shapes
     
            t_split = Split(c.Name, "_")
     
            If t_split(0) = cbbs Or t_split(0) = labs Then
                c.Select
                Selection.Delete
            End If
        Next c
     
    End Sub
     
     
     
     
    Sub fct_affichage_search_filtressdd()
     
        'afficher les noms de colonne + leur liste deroulante
        Dim lettre, plage As String
     
        cbx = 120   'écart sur la gauche "left"
     
        'on FIGE l'affichage pour le User
        Application.ScreenUpdating = False
     
        'On actualise les données de la fiche source
        Call main_fct_initialisation_secteurs
     
        'On sélectionne la feuille du filtre
        Sheets(sheet_search).Select
     
        'On supprime toutes les comboBoxes
        Call fct_suppr_all_comboBoxe
     
        'Pour le nombre de critere
        For i = 0 To nb_crit_sect - 1
     
            lettre = oth_NumCol2Lettre(t_crit_sect(2, i))
            plage = sheet_source & "!$" & lettre & "$4:$" & lettre & "$" & t_crit_sect(1, i) + 3
            cb_width = Format(Sheets(sheet_source).Columns(t_crit_sect(2, i)).ColumnWidth * 7 + 5, "0")
     
            'On créer la ComboBoxe
            ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, _
                                            Left:=cbx + i * ecart, Top:=72, Width:=cb_width, Height:=cb_height).Select
                Selection.Name = "ComboBoxe_" & oth_MajSsAccentEspace(t_crit_sect(0, i))
                Selection.Object.TextAlign = fmTextAlignCenter
                Selection.ListFillRange = plage
                Selection.Object.ListRows = 13
     
            'On créer le libellé
            ActiveSheet.OLEObjects.Add(ClassType:="Forms.Label.1", Link:=False, DisplayAsIcon:=False, _
                                        Left:=cbx + i * ecart, Top:=52, Width:=cb_width, Height:=cb_height).Select
                Selection.Name = "Label_" & oth_MajSsAccentEspace(t_crit_sect(0, i))
                Selection.Object.Caption = t_crit_sect(0, i)
                Selection.Object.TextAlign = fmTextAlignCenter
     
            cbx = cbx + cb_width
     
            'Initialise la position de la comboBox "diametre"
            If t_crit_sect(0, i) = col_diametre Then
                cbx_diam = cbx - cb_width + i * ecart  'cbx diametre
                cbx_carac = cbx + (i + 1) * ecart      'cbx carac
                nb_diams = 1
                nb_max_diams = 5
            End If
     
        Next i
     
        [O2].Select
     
        'on DEfige l'affichage pour le User
        Application.ScreenUpdating = True
     
        'Je lance la fonction pour afficher une valeur d'une variable global et j'ai un résultat
        'Dès que je la lance juste après la fin de cette fonction la variable est vide ...
        Call bonjour
     
     
    End Sub
    Merci à vous tous de votre aide
    Et bonne journée !!

    PS: Le principe de te déconnecter quand tu écris un message et que lorsque tu l'envoie on te demande de te connecter et que ton message a été supprimer ... Je trouve cela absurde et énervant...
    (pour info)

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut Autre soucis depuis l'utilisation de comboBox
    J'ai également quelques soucis depuis que j'utilise les comboBoxes.
    Par exemple, lorsque je lance ma fonction plus de 20 fois, de manière manuelle dans le code avec "F5". J'obtiens une erreur sur la suppression des anciennes comboBoxs alors que ça marche trsè bien et après je ne peux plus initialiser la ""ListFillRange"" alors que pour ce cas aussi je n'avais aucun soucis !!

    Pour résoudre à ces problèmes, je dois fermer le fichier et le réouvrire ... et si le problème persiste je dois redémarer l'ordinateur et là je n'ai plus de soucis.

    J'ai aussi un plantage bien plus fréquent d'Excel alors que pendant 1 mois et de mi d'utilisation je n'avais eu qu'une ou deux fois le soucis ... là je l'ais au moins deux, trois fois par jour ...


    Y a t'il quelque chose que je ne fais pas ou que je fais mal en créant des comboBoxs qui apporte tout ce lots de soucis ?


    Merci encore à vous
    Et bonne Soirée !

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 133
    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 133
    Points : 9 966
    Points
    9 966
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ton application semble trop complexe pour qu'on puisse résoudre ton problème en analysant simplement 2 procédures, et sans voir tes déclarations de variables publiques, et ce que tu en fais


    je me contente de rebondir sur une partie de ton explication :

    - tu cherches à construire des filtres basés sur des critères
    - tu estimes que la listbox n'est pas pratique, car son contenu est relativement pauvre sur ton formulaire


    en soi, je ne sais pas ce que sont ces critères, comment ils sont imbriqués les uns avec les autres .... mais je me permet cependant de te montrer le rendu visuel d'une petite application qui permet d'appliquer plusieurs critères avant de filtrer une base de données

    si jamais ça pouvait te donner des idées pour revenir sur les listbox (puisqu'apparemment tu n'avais pas de soucis avec elles)
    l'idée est de proposer tous les champs d'une BDD, l'utilisateur choisi un champs, un opérateur ... et une liste de toutes les valeurs lui est proposée
    il construit petit à petit sa requête, en empilant les filtres les uns après les autres
    il peut également utiliser une liste de valeur, plutôt qu'un opérateur logique

    Nom : Req.png
Affichages : 254
Taille : 23,9 Ko


    Si ça ne convient pas à ton cas, il va falloir nous montrer un peu plus que ces deux procédures je pense (je me trompe peut être... mais rien ne m'a sauté aux yeux)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    ton application semble trop complexe pour qu'on puisse résoudre ton problème en analysant simplement 2 procédures, et sans voir tes déclarations de variables publiques, et ce que tu en fais


    je me contente de rebondir sur une partie de ton explication :

    - tu cherches à construire des filtres basés sur des critères
    - tu estimes que la listbox n'est pas pratique, car son contenu est relativement pauvre sur ton formulaire

    Bas j'ai posté ces 2 procédures car c'est depuis de que je les ais créées que j'ai ces soucis là. En effet, mon programme est plus complexe et je n'allais pas poster les 800 lignes que j'ai écris.
    Mais vu que je vois qu'il te manque des informations pour comprendre mieux le contexte je vais le redécrire mais avec d'autre information supplémentaire.

    Contexte:
    - Je construis un filtre à partir d'une feuille constituée de colonne avec un titre. Chaque colonne est un critère en lui-même et toutes les valeurs en-dessous du titre de celui-ci sera la plage de valeur utilisé pour créer la liste déroulante de ce critère. À savoir qu'il est possible d'écrire n'importe quoi dans le critère pour la recherche une fois la liste créée
    - De plus il peut y avoir 4 critères un jour et le lendemain en avoir 8 car la feuille où se trouve les colonnes, on peut ajouter/supprimer des colonne et l'actualisation du filtre gère ce changement de colonne.
    - Il y a juste un certain critère où je peux le dupliquer pour précisé la recherche (au niveau des différents dimètre possible ici, car c'est mieux que d'avoir 30 critères de diamètre ...)

    Une photo avec les listBox (Une version opérationnel qui marche bien voir très bien !) Mais pas du tout esthétique à mon goût ... Bon après je pense que je peux peut-être faire quelque chose de
    correct.

    Nom : boths.PNG
Affichages : 284
Taille : 70,4 Ko


    et ici le faite que je gère l'ajout de plus critère de diamètre. (Quand j'actualise je supprime les lignes de diamètre supplémentaire mais parfois la variable globale qui indique combien j'en ai ce vide toute seule et du coup j'ai un petit soucis d'affichage alors c'est encore à corriger ça)

    Nom : diam_add.PNG
Affichages : 176
Taille : 23,0 Ko


    et ici mes la déclaration de mes variables globals:


    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
    '*******************************************************
    '               VARIABLES GLOBALES
    '*******************************************************
    '
    ' MOT DE PASSE - ADMIN - FEUILLE
    Public Const mdp_admin = "admin487954"
    Public Const mdp_sheet = "95?k7wJ"
    '
    'Déclaration des variables globals des noms des feuilles
    Public Const sheet_search = "Filtre"
    Public Const sheet_source = "Source"
    Public Const sheet_nuance = "Nuance"
    Public Const sheet_buffer = "Buffer"
    '
    Public t_secteur() As Variant                   'tableau d'info des secteurs  __  0: nom, 1: mdp, 2: début, 3: fin
    Public t_crit_sect() As Variant                 'tableau d'info des colonnes de critères __ dim1 -> 0: nom_colonne, 1: nb_val, 2: num_col, 3: largeur colonne
    Public t_critere() As Variant                   'tableau d'info de TOUTES les colonnes de critère possible __
    Public t_sheets() As Variant                    'tableau d'info des feuilles __ dim1 -> 0: num_ligne des noms de colonne
    '
    Public nb_secteur, nb_crit_sect, nb_critere As Currency     'NB total de secteur/crit_critere/critere
        '
        '
    Enfin voilà, si tu as besoin d'autre information ou des question n'hésite pas a me demander ou redemander si ce n'est pas clair du tout !!
    Merci encore pour ton aide et tes propositions

    Bonne journée et bonne continuation.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut Une meilleure présentation je pense ...
    Nom : new_presentation.PNG
Affichages : 252
Taille : 33,0 Ko

Discussions similaires

  1. Les variables globales en C++
    Par jeje99 dans le forum C++
    Réponses: 4
    Dernier message: 03/02/2006, 15h52
  2. Réponses: 13
    Dernier message: 21/11/2005, 11h05
  3. Supprimer la mémoire utilisée par les variables globales
    Par dnaprotector dans le forum OpenGL
    Réponses: 4
    Dernier message: 21/07/2005, 13h18
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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