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

  1. #1
    Membre du Club
    Générer une liste de colonnes provenant d'une matrice selon la valeur dans la ligne correspondante
    Bonjour le forum,

    je cherche depuis quelques jours, sans y parvenir. J'ai une matrice avec lignes et colonnes. Dans les cellules de la matrice, il y a des croix ou cela est nécessaire.

    Selon le choix de l'utilisateur, j'aimerais aller lire dans la matrice, à la ligne concernée (par le choix de l'utilisateur)
    1# ou il y a une croix
    2# lister le nom de la colonne

    J'ai mis un petit exemple de ce que j'aimerais arriver à faire. Est-ce que qqn peut m'aider?

    merci et salutations.
    skeut

  2. #2
    Rédacteur/Modérateur

    Bonjour,

    es-tu en mesure de déterminer la ligne dans ton tableau qui correspond au choix de ton utilisateur ?

    Tu peux te faire une fonction VBA qui prend en parametre la ligne d'en tete et la plage de chaque ligne et te retourne la concaténation selon les x
    Cycle de vie d'un bon programme :
    1/ ca fonctionne 2/ ca s'optimise 3/ ca se refactorise

    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016 et Access 2019

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre expert
    Bonjour,

    Ou autre proposition avec une macro évènementielle rattachée à la feuille "CHOIX"


    Le code
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim f1 As Worksheet, f2 As Worksheet
        Dim i As Long, DerLig_Tab As Long, DerCol_Tab As Long, Lig_Dest As Long, Col_Dest As Long
        Dim Tabl As String, Valeur As String
        Dim v As Object
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        If Target.Address = "$B$3" Or Target.Address = "$B$5" Then
            Set f1 = Sheets("CHOIX")
            Set f2 = Sheets("Matrix")
            f1.Range("H3:H100").ClearContents
            DerLig_Tab = f2.Range("A" & Rows.Count).End(xlUp).Row
            DerCol_Tab = f2.[XFD1].End(xlToLeft).Column
            Tabl = Range(Cells(1, "A"), Cells(DerLig_Tab, DerCol_Tab)).Address
            Valeur = f1.[B7]
            Set v = f2.Range(Tabl).Find(Valeur, LookIn:=xlValues, lookat:=xlWhole)
            Lig_Dest = 3
            Col_Dest = 8
            If Not v Is Nothing Then
                For i = 2 To DerCol_Tab
                    If f2.Cells(v.Row, i) = "x" Then
                        f1.Cells(Lig_Dest, Col_Dest) = f2.Cells(1, i)
                        Lig_Dest = Lig_Dest + 1
                    End If
                Next i
            End If
        End If
        Application.EnableEvents = True
        Set v = Nothing
        Set f1 = Nothing
        Set f2 = Nothing
    End Sub


    Le fichier


    Cdlt

  4. #4
    Membre du Club
    merci @ARTURO83, c'est exactement ceci. Je vais maintenant continuer et améliorer.

    merci à tous et belle journée.
    skeut.

  5. #5
    Membre averti
    Aute exemple avec l'utilisation de tableaux structurés
    Bonjour …

    en retard par rapport à Arturo

  6. #6
    Responsable
    Office & Excel

    Je rappelle à nouveau que la notation à crochet, abondamment utilisée dans le code proposé, est une mauvaise syntaxe de code, dont les très rares utilisateurs n'ont jamais voulu expliquer les avantages qu'ils en retiraient. J'explique pourquoi il ne faut pas l'utiliser dans ce billet de blog.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    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...
    ---------------