Croiser tableau

je souhaiterais à partir du premier tableau déduire le 2ème tableau par macro

1er tableau affiche des données par colonne, le 2eme affiche sur sa première colonne tous les champs qui se trouvent dans toute les colonnes et le reste des colonnes affichent en X les champs s'ils se trouvent dans leurs colonnes.

Veillez trouvez ci-joint un fichier Excel pour

8filter.xlsx (8.58 Ko)

ce problème, le but est de l'automatiser pour traiter des données plus importantes dynamiquement.

Pourriez vous m'aider ?

Merci par avance

Bonjour, quelqu'un peut m'aider ?

Bonjour, pourquoi mon message est grisé? 😢

Ola ! Minute papillon ....

Tu as peut être pour habitude de diriger une équipe d'une main de fer mais ici nous sommes bénévole. Si tu veux de la réactivité tu peux toujours faire appel à un indépendant qui t'enverra avec plaisir sa facture.

10alexpp.xlsm (19.28 Ko)

Sorry, je dirige personne, je viens d'avoir un emploi après une très longue galère, j'essaie de faire de mon mieux et désolé si dans mes précédents messages, j'ai donné l'impression d'être impatient.

Je vais tester la formule

Ca marche bien, merci beaucoup pour votre aide, je vais forcément essayer de comprendre le code, à première vue, ça me semble difficile, mais je dois le comprendre.

Pouvez-vous m'aider à déduire la colonne All fields automatiquement?

Bonjour, désolé Rag02700 mais la formule ne marche pas, elle supprime la colonne qui restutue tous les champs existant et le X n'est pas là où il devrait y être

Bonjour,

Une proposition Power Query (Récupérer et transformer) ?

Cdlt.

5filter.xlsx (17.89 Ko)

Merci Jean-Éric je vais voir votre proposition, finalement la proposition de Rag02700 marche super bien, c'était de ma faute, je n'ai pas mis les bon champs

Encore merci Merci Jean-Éric, mais je ne sais pas si les power query est automatique

Hello,

tu veux que je commente mon code ?

J'aimerais pas vous déranger mais j'aimerais bien comprendre le code.

Les données sont posées dans un dictionnaire de données et par la suite elles sont déposées dans un autre endroit.

Pourquoi le Dim j est byte et non integer?

Dico_all(Valeur) ="" comme le code renseigne le dico est ""

Bonjour,

Une mise à jour avec l'actualisation de la requête à l'aide de VBA.

Cdlt.

5filter.xlsm (25.10 Ko)
Public Sub RefreshQuery()
    Range("Table1_2").ListObject.QueryTable.Refresh BackgroundQuery:=False
End Sub

Hello,

Voici :

byte/integer/long c'est une question de mémoire, bref si tu ne veux pas être embêté tu mets en long les byte/integer ça fonctionne.

Sub recup_all()

Dim dico_all As Object
Dim Tab_Temp, valeur, Tab_Present
Dim j As Byte
Dim i As Integer, cpt As Integer

' Ici je vais créer un dictionnaire sans doublons de chaque valeur dans les colonnes pour avoir ma colonne "ALL FIELDS"
' 1-Je mets toutes les cellules dans un tableau pour gagner en rapidité d'execution
'2- Je boucle sur chaque valeur du tableau
'3-Si la valeur n'existe pasdans le dictionnaire, on l'ajoute au dictionnaire
Set dico_all = CreateObject("Scripting.Dictionary")
Tab_Temp = Range(Cells(2, 1), Cells(4, 4)).Value
For Each valeur In Tab_Temp
    dico_all(valeur) = ""
Next valeur

' Ici je redimensionne un nouveau tableau
'de 1 àu nb d'element dans mon dictionnaire (en ligne)
' et de 1 à 4 car dans ton exemple j'ai 4 colonnes
ReDim Tab_Present(1 To dico_all.Count, 1 To 4)
For j = 1 To 4 'Je boucle 4 fois car 4 colonnes
    cpt = 1 ' cette variable sert à renseigner le "X" si trouvé dans la colonne
    For Each valeur In dico_all.keys 'Boucle sur les elements du dictionnaire
        For i = LBound(Tab_Temp, 1) To UBound(Tab_Temp, 1) ' ici je reprends mon tableau de valeur et je boucle dessus
            If Tab_Temp(i, j) = valeur Then 'Si dans mon tableau ligne i et colonne j j'ai la valeur de mon element de dico
                Tab_Present(cpt, j) = "X" 'Alors j'ajoute un "X" dans mon tableau des valeurs présentes
                Exit For 'Je quitte ma boucle i
            End If
        Next i
        cpt = cpt + 1 'Field suivant
    Next valeur 'Valeur dico suivante
Next j 'Colonne suivante

Application.ScreenUpdating = False: Application.Calculation = xlManual 'Optimisation

Range("A7:E65000").ClearContents 'efface l'historique du tableau all fields de la feuille
Range(Cells(7, 2), Cells(UBound(Tab_Present, 1) + 6, UBound(Tab_Present, 2) + 1)) = Tab_Present 'Ajoute mon tableau des valeurs presentes à la feuille
[A7].Resize(dico_all.Count, 1) = Application.Transpose(dico_all.keys) ' ajoute les valeur du dictionnaire à la feuille

Application.ScreenUpdating = True: Application.Calculation = xlAutomatic 'Optimisation

End Sub

Merci beaucoup, c'est très clair, il me faut plus d'exercice pour être autonome.

J'ai compris l'algorithme et la stratégie d'utiliser tab_temps, tab_present et Dico_all.

Encore merci, j'ai appris plein de choses ses derniers jours grâce à des personnes comme vous.

Rechercher des sujets similaires à "croiser tableau"