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 :

Trier un tableau, suppression des "vides" et des doublons [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 427
    Par défaut Trier un tableau, suppression des "vides" et des doublons
    Bonjour à la communauté.

    Dans un classeur, j'alimente des ComboBox du ruban depuis plusieurs listes contenu dans des colonnes.

    Capture du ruban :
    Nom : Excel_Protections_Ruban.png
Affichages : 99
Taille : 1,7 Ko

    Les bouton de droite servent à ajouter ou remplacer le contenu des cellules dans d'autres onglets pour les calculs ou les commandes.

    Et petite capture de l'onglet :
    Nom : Excel_Protections.png
Affichages : 101
Taille : 40,8 Ko

    Pour me facilité le boulo, j'ai nommé les cellules d'entête :
    B2 (Protect) = "SPMProtect"
    C2 (Nom) = "SPMProtectNom"
    D2 (Désignation)= "SPMProtectDesign"

    Et mon extrait du ruban pour cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <comboBox id="XlsSPMProtect"        label="Protection :"  onChange="ChangSPMProtect"       sizeString="####################" getItemCount="NbSPMProtect"       getItemLabel="LabelSPMProtect"       invalidateContentOnDrop="true" />
    <comboBox id="XlsSPMProtectNom"     label="Nom :"         onChange="ChangSPMProtectNom"    sizeString="####################" getItemCount="NbSPMProtectNom"    getItemLabel="LabelSPMProtectNom"    invalidateContentOnDrop="true" />
    <comboBox id="XlsSPMProtectDesign"  label="Désignation :" onChange="ChangSPMProtectDesign" sizeString="####################" getItemCount="NbSPMProtectDesign" getItemLabel="LabelSPMProtectDesign" invalidateContentOnDrop="true" />
    J'organise mon code VBA avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      FeuilSPMLstProtect = Range("SPMLstProtect").Worksheet.Name
      LignSPMLstProtect = Range("SPMLstProtect").Row + 1
      ColSPMLstProtect = Range("SPMLstProtect").Column
    Ce qui permet de renommer les onglets, ajouter des colonnes... Car je ne suis pas seul à utiliser ce classeur, mais le seul à "coder" (en amateur bien sur).

    Je ne sais pas comment alimenter mon Combo "XlsSPMProjet" sans doublons.

    Donc, je passe par un tableau que je rempli, je fais un tri à bulle pour l'ordre alphanumérique et je colle le tout dans une colonne (AA2), et c'est cette colonne qui alimente mon combo "XlsSPMProtect", et qui conditionne le second Combo "XlsSPMProtectNom", et je refait cette technique pour tous mes Combo (et j'en ai d'autres). Cette partie est d'environ 200 lignes, d'autres en ont plus.

    Je pense qu'il doit il y avoir une méthode pour ça, mais je ne la trouve pas.

    J'espère avoir été assez clair et compréhensible.

    Si quelqu'un(e) a une idée, un conseil, une astuce, je suis preneur.

    Bien à toi, la communauté.

    Denis...

  2. #2
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 466
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Deux possibilités :
    Comme au final les données sont collées dans la feuille de calcul en colonne AA2, on peut :
    1)
    supprimer les doublons en colonne AA2 (avec l'outil supprimer les doublons)
    les trier en colonne AA2 (avec les tris d'Excel)
    2)
    ou alors on ne les colle plus en feuille de calcul et pour cela il faudra utiliser, avec un tableau VBA (en mémoire) :
    un objet dictionnaire pour supprimer les doublons (Scripting.Dictionary)
    un tri du tableau en mémoire, par exemple avec un algorithme type QuickSort

  3. #3
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 427
    Par défaut
    Bonjour tototiti2008, et merci de me répondre.

    Pour la solution 1 (je n'y avais pas pensé) faut-il que la feuille soit visible ? Car pour moi, elle est active, mais pour mes collègue, elle est cachée.

    Pour la solution 2 : je ne connais pas du tout "Scripting.Dictionary", je vais chercher...

    Encore merci.

    Denis...

  4. #4
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 466
    Billets dans le blog
    3
    Par défaut
    Re,

    De rien, on est là pour donner des pistes

    1) faut-il que la feuille soit visible ? Car pour moi, elle est active, mais pour mes collègue, elle est cachée
    je viens de tester, ça fonctionne sur une feuille masquée

    pour avoir une piste, le code que j'ai utilisé pour enlever les doublons et trier les données de la colonne B de la Feuil2
    à ne pas réutiliser tel quel mais à adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test1()
        Feuil2.Range("B1").CurrentRegion.RemoveDuplicates 1, xlYes
        Feuil2.Sort.SortFields.Clear
        Feuil2.Sort.SortFields.Add2 Key:=Feuil2.Range("B1").CurrentRegion, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With Feuil2.Sort
            .SetRange Feuil2.Range("B1").CurrentRegion
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
    Pour choisir entre la solution 1 et la 2, savoir que :
    la 1 sera plus simple à implémenter mais un peu moins rapide
    la 2 demandera de se former à utiliser des objets spécifiques : dictionnaires, tris en mémoire... mais devrait être plus rapide

  5. #5
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 427
    Par défaut
    Que dire ? A part un super grand merci !

    C'est impeccable ! ! ! Ça fonctionne exactement comme je le souhaitais, et je ne connaissais pas du tout le "RemoveDuplicates".

    Mais suis-je obligé de passer par une liste temporaire pour alimenter le ComboBox du ruban ?

    Quoi qu'il en soit, encore merci...

    Denis...

  6. #6
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 466
    Billets dans le blog
    3
    Par défaut
    Re,

    Mais suis-je obligé de passer par une liste temporaire pour alimenter le ComboBox du ruban ?
    Euh j'avoue, j'ai déjà fait des Combobox dans le Ruban mais je ne me souviens plus de comment on les alimente, un petit rappel ?
    surtout si son contenu est variable

    comment tu as fait pour l'instant ?

  7. #7
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 466
    Billets dans le blog
    3
    Par défaut
    Re,

    Je crois que c'est le rôle de la fonction définie en GetItemLabel
    donc pour ta 1ère liste déroulante, je suppose qu'elle s'appelle LabelSPMProtect

    qu'est-ce que tu as dans LabelSPMProtect ? (ou alors elle n'est pas créée pour l'instant ?)

  8. #8
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 466
    Billets dans le blog
    3
    Par défaut
    Re,

    Vu que ton but est de faire des Combobox en cascade (contenu de la 2ème dépendant du contenu de la 1ère, etc...) la 2ème méthode est sans doute plus stable

    écrire dans une feuille masquée à chaque fois qu'on déroule une liste déroulante risque de s'avérer un peu lourd

  9. #9
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 427
    Par défaut
    Effectivement, je balbutie avec le ruban (voir moins !) !

    J'alimente un ComboBox à l'ouverture du classeur (comme dans mes post précédant) via un VBA qui n'a rien à voir avec le ruban, et ce sont les actions sur le ruban (un simple clique) qui déclenche tout le reste.

    Je vais essayer d'être clair et concis (pour tout le monde) :

    Dans un Combo (Nommons le Primaire), j'ai la liste de mes "Protection" (fournisseur : SPM) Lors de l'ouverture du classeur, J'alimente une liste (triée et par ordre et sans doublons : grâce à toi ) dans la colonne AA3 (par exemple).

    Mon combo Primaire possède maintenant toutes les protections (à partir de AA3), lors de la sélection dans le combo, je place cette sélection dans AA2, et je lance ensuite le tri pour alimenter la colonne à partir d'AB3 (avec la variable en AA2) que je vais placer dans le Combo Secondaire : "Nom" et ainsi de suite...

    Je place systématiquement mes listes (AA3, AB3, AC3...) dans mes Combo.

    Je peux essayer de te faire une petite vidéo, ou des capture d'écran, si tu veux (et ce sera un plaisir) mais je reste persuadé que ma solution n'est pas "bonne". Mais vu que je la comprend, la fait, l'écris et peux la modifier, elle reste à mes yeux la seul.

    Encore un grand merci à toi ! !

    Denis...

  10. #10
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 427
    Par défaut
    J'aimerais préciser à la communauté que toucher au Ruban, s'avère extraordinairement complexe !
    Peu de tuto, peu de renseignement (même de la part de Micro$oft)...
    En gros : Peu d'aide = Grosses difficultés ! !

  11. #11
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 466
    Billets dans le blog
    3
    Par défaut
    Re,

    J'essaie de te faire un exemple et je te reviens

  12. #12
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 427
    Par défaut
    Pourquoi ?
    Ta solution est impeccable, Que veux-tu faire de plus ?
    M'aider pour le ruban ?

  13. #13
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 466
    Billets dans le blog
    3
    Par défaut
    Re,

    un exemple avec la solution 2
    Fichiers attachés Fichiers attachés

  14. #14
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 427
    Par défaut
    Ô la VACHE ! ! !

    Quel code ! Et quelle beauté (je suis plus branché gisquette généralement, mais là) ! ! Bravo ! !

    Tu as écris en 100 lignes (environ) et quelques heures, ce que j'ai fais en plus de 600 et plusieurs jours (ce qui pourrait être vexant )! ! !

    Ton code est impressionnant d'efficacité et d'efficacité (après l'appréhension de sa complexité, qui perdure) ! !

    Je vais mettre des heures à bien le comprendre (car si je ne comprend pas, je ne l'utilise pas, parce que je ne pourrais pas le modifier ultérieurement).

    Mais celui-là, je vais bosser dessus, c'est certain, et pas plus tard que maintenant ! !

    Encore un super et un extraordinairement grand merci ! !

    Denis...

  15. #15
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 466
    Billets dans le blog
    3
    Par défaut
    Re,

    Merci

    la version corrigée car il vidait pas les champs 2 et 3 quand on changeait le champ 1

    Après le Quicksort je suis allé le chercher, je l'ai pas recodé
    Fichiers attachés Fichiers attachés

  16. #16
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 427
    Par défaut
    Re.

    Ok, encore un super grand merci à toi ! ! !

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

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 570
    Par défaut
    Bonjour le fil,
    DenisHen, si vous pouvez nous faire parvenir vôtre classeur sans données confidentielles, nous pouvons tenter de l'adapter au mieux pour vôtre utilisation.
    Jean-Paul sous Office 365 et Windows 10/11 (Intel I7 16Go)

    Si vous avez trouvé réponse à votre question penser à la passer en :resolu: Vous avez aimé la discussion alors un :plusser: fait toujours plaisir.
    Le savoir n'a de valeur que s'il est partagé.
    La vérité de demain se nourrit de l'erreur d'hier. Antoine de Saint-Exupéry

  18. #18
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 427
    Par défaut
    Bonjour @tototiti2008.

    J'ai étudié ton code pendant des heures (impressionnant !), et j'ai essayé de l'adapter à mes besoins. Je n'ai pour l'instant que renommé des paramètres.

    J'y vais étape par étape, pour bien me l'approprier. Et bien sûr, ça plante, au premier Rib.InvalidateControl (ligne 3).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub ChangSPMProtect(ByRef control As Office.IRibbonControl, ByRef Text As Variant)
        ValCh(0) = Text
        Rib.InvalidateControl "XlsSPMProtectNom"
        Rib.InvalidateControl "XlsSPMProtectDesign"
    End Sub
    J'ai juste renommer quelques champs :
    CB1 = XlsSPMProtect
    Ch1Change = ChangSPMProtect
    Ch1Count = NbSPMProtect
    Ch1Populate = LabelSPMProtect

    CB2 = XlsSPMProtectNom
    Ch2Change = ChangSPMProtectNom
    Ch2Count = NbSPMProtectNom
    Ch2Populate = LabelSPMProtectNom

    CB3 = XlsSPMProtectDesign
    Ch3Change = ChangSPMProtectDesign
    Ch3Count = NbSPMProtectDesign
    Ch3Populate = LabelSPMProtectDesign
    Car j'aurais, plus tard XlsSPMMain, ou XlsPano, XlsQuinc...

    C'est une opération que je fais souvent (le renommage) et j'arrive presque toujours à trouver pourquoi ça plante, mais pas là.

    En outre, j'ai lu plusieurs tutos sur le ruban, mais ils n'allaient pas jusqu'à ce niveau.

    Tu trouveras mon "ébauche" de mon "renommage" en pièce jointe.

    Bonjour @Valtrase, et merci de votre intérêt, vous trouverez en pièce jointe un fichier "exemple" (basé sur le travail de tototiti2008) avec les 2 premières "triples listes", les "Protections murales" et les "Mains courantes", de l'onglet SPMLst.

    Sachant que j'aurais d'autres "Listes" à traiter, depuis d'autres Onglets, comme des panneaux en bois, de la quincaillerie...

    Les icones à coté des ComboBox sont pour remplacer ou ajouter la valeur sélectionnée du ComboBox dans une feuille de calcul.

    _Combobox dynamique_SPMProtect.xlsm

    Un grand merci à vous.

    Bien à toi, la communauté.

    Denis...

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

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 570
    Par défaut
    Bonjour le fil,
    DenisHen, Vous y étiez presque il fallait passer vos tableaux en tableaux structurés, pour qu'ils puissent être chargé par la procédure "ChargeTableauProtection"

    J'ai fait quelques modifications :

    • Renommer le module MRuban en Callbacks (Désolé c'est mon appli de gestion du ruban qui renomme le module, je dois y ajouter une option )
    • Supprimer les variables publiques (elles ne sont utilisées que dans le module des Callbacks.
    • Ajouter quelques fonctions (notamment pour la remise à zéro des tableaux.
    • Ajouter des Wrapper pour le ruban (Cela permet de le récupérer si sur plantage il devait passer à "Nothing")
    • Ajouter la procédure qui doit être lue au chargement du ruban (Ici "OnRibbonLoad")
    • Puisque l'on utilise la propriété ValidateOnDrop pour les liste déroulantes, je n'utilise qu'un seul tableau (mTableauValues) pour charger toutes les données.

    Pour les autres actions c'est à vous de jouer.
    Je vous conseille de faire du pas à pas (Quand c'est possible) pour voir le suivi des étapes du code.
    Voilà n’hésitez pas si quelque chose vous parait confus.

    Combobox dynamique SPMProtect.xlsm

    Bonne programmation.

    Édit :
    Pour vous puisque vôtre ruban doit évoluer j'ai fait en sorte que la procédure "ChargeTableauUniversel()" soit unique pour tous les contrôles. Il faut donc :
    • Ajouter le tableau structuré pour les contrôles supplémentaires.
    • Lui donner un nom explicite "vt_Panneaux" ou "vt_Quincallerie"
    • Ensuite vous modifiez les procédures comme celles déjà existantes

    Exemple :
    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
    Public Sub NbSPMPanno(control As IRibbonControl, ByRef count)
        ResetCriteria
        ChargeTableauUniversel "vt_Panneaux"
        mListeMain(1) = UniqueSorted(1)
        count = UBound(mListeMain(1)) + 1
    End Sub
     
    Public Sub LabelSPMPanno(control As IRibbonControl, index As Integer, ByRef returnedVal)
        returnedVal = mListeMain(1)(index)
    End Sub
     
    Public Sub ChangSPMPanno(control As IRibbonControl, text As String)
        mValCh(0) = text
        InvalidateMyControl "XlsSPMPannoNom"
        InvalidateMyControl "XlsSPMPannoDesign"
    End Sub
     
    'etc...
    Jean-Paul sous Office 365 et Windows 10/11 (Intel I7 16Go)

    Si vous avez trouvé réponse à votre question penser à la passer en :resolu: Vous avez aimé la discussion alors un :plusser: fait toujours plaisir.
    Le savoir n'a de valeur que s'il est partagé.
    La vérité de demain se nourrit de l'erreur d'hier. Antoine de Saint-Exupéry

  20. #20
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 427
    Par défaut
    Bonjour Valtrase, et merci beaucoup pour votre aide !

    Je vais regarder ce code avec beaucoup d'attention !

    Je reviendrais vers vous si je me retrouve dans une impasse, mais je vais essayer sans.

    PS :
    Je viens de regarder "vite fait" le super tableau (avant de fouiller son code).
    Très fort, mais aussi "très complexe", carrément, mais je ne baisse pas les bras, pas encore !
    Sauf que la première colonne (A) ne me sert à rien, je pensais l'avoir "désactivée" = sans nom.
    Mais je l'ai supprimée, et ça fonctionne encore parfaitement, alors là, chapeau bas !
    Et aussi : qu'est-ce qu'un tableau "structuré" ?
    Ce tableau fera parti de macros qui sont écrites en Lisp depuis AutoCAD (pour un quantitatif "précis")

    Dans l'IDE de VBA, le code du Else est en rouge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #If VBA7 Then
        Private Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
            (ByRef Destination As Any, ByRef Source As Any, ByVal Length As LongPtr)
    #Else
        Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
            (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
    #End If
    En tous cas, encore un super grand merci ! Pour ce travail énorme ! !

    Denis...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Suppression des doublons dans une variable de type tableau
    Par damsmut dans le forum Général VBA
    Réponses: 2
    Dernier message: 23/07/2019, 10h36
  2. Suppression des doublons dans un tableau des chaines
    Par rimenis dans le forum Langage
    Réponses: 3
    Dernier message: 22/02/2013, 12h26
  3. [Tableaux] suppression des doublons dans un tableau
    Par hammag dans le forum Langage
    Réponses: 3
    Dernier message: 17/06/2009, 19h13
  4. Trier un tableau contenant des hash
    Par kioka dans le forum Langage
    Réponses: 18
    Dernier message: 30/04/2009, 16h28
  5. Réponses: 7
    Dernier message: 10/06/2008, 15h38

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