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