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 :

Blocage des listes déroulantes


Sujet :

Macros et VBA Excel

  1. #1
    Membre très actif
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2022
    Messages : 174
    Par défaut Blocage des listes déroulantes
    Bonjour le forum,
    Cà me le fait assez souvent, et je crois que çà bloque les pages aussi puisque çà génère des versions.
    Par blocage, je veux dire que la LD ne s'ouvre pas.
    Nom : 1.png
Affichages : 160
Taille : 5,9 Ko
    et il faut que je ferme et rouvre le fichier pour que çà refonctionne.
    Et je ne peux pas vous présenter le blocage car il a suffit que je fasse une version allégée du fichier pour que le blocage ne soit plus présent.
    Pour ouvrir le formulaire, il faut faire un clic droit.
    Voilà le code que je mets sur une liste déroulante :
    - Avant l'initialize
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Compare Text
    Dim choix1()
    Private Sub UserForm_Initialize()
    'nom clients
        With Sheets("Clients")
            choix1 = Application.Transpose(.Range("B2:B" & .Range("B1000").End(xlUp).Row).Value)
            'liste en UF clt
            Me.nomClt.list = choix1
       end with
    en évenement change :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub nomClt_Change() 'Grpe1-clients
      If Me.nomClt.ListIndex = -1 And IsError(Application.Match(Me.nomClt.Value, choix1, 0)) Then
            Me.nomClt.list = Filter(choix1, Me.nomClt.Text, True, vbTextCompare) 'liste réduite
            Me.nomClt.DropDown 'déroulement de la liste
      End If
    Et en propriétes champ
    Propriété match entry = none

    mais il y a choix 1 à 4 et de 2 à 3 champs concernés par un choix.

    Merci de votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    Plutôt que te faire ch... a calculer des plages quelconques, as-tu pensé à utiliser des tableaux structurés ?
    Ils sont auto extensibles, embarquent leur nombre de lignes, leur nombre de colonnes, permettent de référencer une ligne ou colonne complète sans avoir à se soucier du nombre de cellules dans ces dernières, et plein d'autres trucs super pratique.

  3. #3
    Membre très actif
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2022
    Messages : 174
    Par défaut
    Salut,
    Qu'est-ce que tu me racontes toi ?
    T'as même pas ouvert mon fichier pour vérifier si j'utilisais ou pas des tableaux structurés.
    Tant que ma liste excéde le nombre de ligne du tableau, il n'y a pas de calcul de plage, ok ?
    Et sinon j'ai trouvé une erreur, çà va ptet le faire.
    Salut

  4. #4
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 508
    Par défaut
    Bonjour à tous,

    Il y a bien des tableaux structurés dans ton projet, mais tu ne les utilises pas comme il se doit. Donc Deedoliht n'a pas entièrement tord.
    Quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    choix1 = Application.Transpose(.Range("B2:B" & .Range("B1000").End(xlUp).Row).Value)
    'liste en UF clt
    Me.nomClt.list = choix1
    Cela pourrait être avantageusement remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.nomClt.list = = Range("Clts[Nom]").Value
    Idem pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'code clients
        With Sheets("Clients")
            For Each cell In .Range("A2:A" & .Range("A1000").End(xlUp).Row)
                    Me.codClt.AddItem (cell)
            Next
    Peut être remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.nomClt.list = = Range("Clts[Code client]").Value
    Valable aussi pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        With Me.dcImpr
                 .Clear
                 .AddItem "Bon de commande"
                 .AddItem "Facture"
        End With
    Qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.dcImpr.list = VBA.Array("Bon de commande", "Facture")
    L'utilisation des tableaux choix en Public ne peut amener que des soucis. Ils peuvent en effet être modifiés de façon sournoise.
    Concernant la question je n'ai pas réussi à reproduire le problème...

    Maintenant j'ai une petite question.
    Pourquoi perdre du temps et des ressources, à mettre en formes tes tableaux structurés alors que tu y accède via des formulaires ?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Citation Envoyé par frunch Voir le message
    Salut,
    Qu'est-ce que tu me racontes toi ?
    T'as même pas ouvert mon fichier pour vérifier si j'utilisais ou pas des tableaux structurés.
    Je te prierai de garder tes jugement de valeur pour toi, et ne pas avancer de faits sans preuves.
    Ce que tu viens de faire, c'est de la prédication pure et dure. Le genre de truc que font les gris-gris avec leur boule de cristal.

    Avoir quelque chose et l'utiliser sont deux choses différentes.
    Est-ce que tu as des tableaux structurés ? Peut être, je n'ai pas regardé ton classeur suffisamment en détail.
    Est ce que tu les utilises ? Clairement non.

  6. #6
    Membre très actif
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2022
    Messages : 174
    Par défaut
    Bonjour,
    Merci Valtrase pour tes explications avec exemples. Je vais mettre ma macro initialize à jour.
    Pourquoi perdre du temps et des ressources, à mettre en forme tes tableaux structurés alors que tu y accède via des formulaires ?
    Je comprends pas, c'est ma première application avec des tableaux structurés, et les formulaires marchent bien dans les 2 cas.

    Deolith,
    Est-ce que tu as des tableaux structurés ? Peut être, je n'ai pas regardé ton classeur suffisamment en détail.
    Est ce que tu les utilises ? Clairement non.
    Franchement tes explications en 2 phrases sans exemple ou code çà m'aide pas.
    Voilà mon explication alors:
    Pour moi utiliser un tableau structuré, c'est quand t'as "Création de tableau indiqué" dans Excel et que tu as le code pour au moins ajouter modifier ou supprimer une ligne.
    Y'a que pour les dicos ou quelques tableaux fixes ou j'ai pas utilisé de tableau structuré.

    Et mettez-vous d'accord les gars.
    Merci quand même

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Citation Envoyé par frunch Voir le message
    Je comprends pas, c'est ma première application avec des tableaux structurés, et les formulaires marchent bien dans les 2 cas.
    Le fait que "ca marche", ne veux pas dire que c'est efficace.
    Quand on programme dans un environnement tel qu'Office, moins on en fait, mieux on se porte.
    Tout ce qui est mise en forme et autre cosmétique, si tu peux le faire via l'interface graphique, Faits le !
    Ca allègera ton code, et le rendra plus lisible, plus compréhensible, plus facile à maintenir, plus rapide.

    Citation Envoyé par frunch Voir le message
    Pour moi utiliser un tableau structuré, c'est quand t'as "Création de tableau indiqué" dans Excel et que tu as le code pour au moins ajouter modifier ou supprimer une ligne.
    En VBA, il y a toute une série de classes qui te permettent de manipuler les tableaux structurés:
    ListObjects: Représente la collection de tableaux structurés d'une feuille
    ListObject: Représente un tableau structuré.
    ListRows: Représente les lignes.
    Listrow: Représente une ligne.
    ListColumns: Représente les colonnes.
    Listcolumn: Représente une colonne.
    Je te laisse chercher dans l'explorateur d'objets ou sur le web pour obtenir le détail de ces classes.

    Les exemples que t'as indiqué Valtrase reposent plutôt sur des plages nommées,
    en effet, l'insertion de tableaux structurés dans une feuille, implique non seulement la création d'objets de type ListObject, mais aussi la création de plages nommées.
    Ca fonctionne aussi, un peut moins pratique à mon avis (surtout quand on commence a ajouter / supprimer des lignes ou colonnes).

    Quand à un exemple de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Ws As Excel.Worksheet
    Set Ws = ThisWorkbook.Worksheets("Clients")    '// Reference la feuille
     
    Dim Lo As Excel.ListObject
    Set Lo = ws.ListObjects("Clts")    '// Reference le tableau
     
    Dim Lc As Excel.ListColumns
    Set Lc = Lo.ListColumns("Code client")    '// Reference une colonne
     
    Debug.Print Lc.DataBodyRange.address    '// Affiche l'adresse du corps de la colonne

  8. #8
    Membre très actif
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2022
    Messages : 174
    Par défaut
    Salut,
    T'as pas regardé mon code "en détail" comme tu le dis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Dim i%, ws1 As Worksheet, tb1 As ListObject
        Set ws1 = Sheets("Clients")
        Set tb1 = ws1.ListObjects("Clts")
    Mon code correspond aux TS.
    Alors me sors pas ta science sur les tableaux structurés, j'en ai pas besoin.
    Salut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Représentation intervallaire des listes arborescentes
    Par PMAR dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/11/2004, 09h35
  2. [servlet] gestion des listes d'erreurs ?
    Par MatMeuh dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 27/10/2004, 10h19
  3. [html:text][indexed]Valeurs des liste null...
    Par thibaut dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 08/09/2004, 09h36
  4. [glut] de l'intérêt des listes
    Par khayyam90 dans le forum OpenGL
    Réponses: 3
    Dernier message: 26/07/2004, 10h35
  5. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32

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