Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Récupérer d'un tableau valeur sans doublon

cathodique

XLDnaute Barbatruc
Bonsoir,

Ne maitrisant pas très bien le dictionnaire, je trouve des difficultés à parvenir au bout de mon raisonnement.

Je m'explique, sur la feuille BD (col 3, 4 et 5) on trouve les valeurs de la feuille Test F1 correspond à col 3, C2correspond à col 4 et C3 correspond à col 5. sur la feuille BD on les retrouve plusieurs fois.

Alors je voudrais faire un test sur la présence ou non sur la feuille BD par rapport aux cellules F1,C2et C3.

je ne veux pas passer par une colonne intermédiaire. Mon idée est d'utilisé un tableau et un dictionnaire.

J'ai récupéré les données de la feuille BD dans un tableau les valeurs correspondant à F1,C2 et C3 et j'ai concaténé dans un tableau. mon souci est comment récupéré de ce dernier tableau les valeurs sans doublons.

Normalement, il n'en restera qu'une afin que je puisse la comparer à la concaténation de F1,C2 et C3.
Code:
'Option Explicit
Sub Test_Critères()
Dim fo As Worksheet, bd As Worksheet, fg As Worksheet
Dim LastLig As Long
Dim Tb, RES(), Ret(), mondico
Dim Val1 As String, Val2 As String, Val3 As String
Dim i As Long, j As Long
'''''''''''''''''''''''''''''''''''''''''''
Set bd = Sheets("BD") 'définit l'onglet bd
Set fo = Sheets("Feuil1")       'juste pour voir resultat
Set fg = Sheets("test") 'où sont les paramètres
'==============================================================================
Application.ScreenUpdating = False
'Dans la variable tableau Tb on récupère toutes les données de la feuille BD
With bd
    LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
    Tb = .Range("C2:E" & LastLig)
End With
     
     Val1 = fg.Range("F1")        'date
     Val2 = fg.Range("C2")        'size1
     Val3 = fg.Range("C3")        'size
    'on parcours le tableau Tb et si la ligne correspond aux 3 critères
    For i = 1 To LastLig - 1
        '
        If Tb(i, 1) = Val1 And Tb(i, 2) = Val2 And Tb(i, 3) = Val3 Then
            'on incrémente le compteur j
            j = j + 1
            'On redimensionne notre tableau Resultat Res
            ReDim Preserve RES(1 To 4, 1 To j)
            'Le compteur est inscrit en 1ère ligne
            'on fait une petite boucle
            RES(1, j) = Tb(i, 1)    'date
            RES(2, j) = Tb(i, 2)    'size1
            RES(3, j) = Tb(i, 3)   'size2
            RES(4, j) = Tb(i, 1) & Tb(i, 2) & Tb(i, 3)
        End If
        
    Next i
    
    '''''ces 3 lignes juste pour avoir une idée du résultat''''''''''
    LastLig = o.Cells(o.Rows.Count, 1).End(xlUp).Row
    If LastLig > 1 Then o.Range("A2:L" & LastLig).Clear
    If j > 0 Then o.Range("A2").Resize(j, 4) = Application.Transpose(RES)
   ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End Sub
En vous remerciant par avance.
Mon objectif est faire un test en mémoire, extraire du tableau RES(4,J) valeur sans doublon ou bien vérifier que la concaténation de F1,C2 et C2 existe dans le dictionnaire pour effectuer tel ou tel autre procédure.
 

cathodique

XLDnaute Barbatruc
Re : Récupérer d'un tableau valeur sans doublon

Bonsoir Job75,

Je te suis vraiment reconnaissant. En général, quand on ne reçoit pas la solution escomptée c'est qu'on a mal exposé son problème et je m'en excuse.

Dernière question si tu permets, est-ce tu penses vraiment que j'ai l'art de compliquer les choses.

Bien que Laetitia ait compris mes attentes en premier, je préfère ton code pour sa simplicité.

à toi aussi un grand bravo, je te suis vraiment très très reconnaissant.

Je vous remercie tous autant que vous êtes c'est sympa de votre part.
 

job75

XLDnaute Barbatruc
Re : Récupérer d'un tableau valeur sans doublon

Re,

Maintenant cathodique vous parliez de concaténer les colonnes C D E.

J'espère que c'est pour s'en servir ensuite... Alors avec Evaluate pas besoin de boucle :

Code:
Sub Test()
Dim critere$, C As Range, a1$, a2$, a3$, tablo, i As Variant
critere = Feuil1.Range("F1").Value2 & Feuil1.Range("C2") & Feuil1.Range("C3")
Set C = Feuil2.Range("C1:E" & Feuil2.Cells(Rows.Count, 1).End(3).Row).Columns
a1 = C(1).Address(External:=True)
a2 = C(2).Address(External:=True)
a3 = C(3).Address(External:=True)
tablo = Evaluate(a1 & "&" & a2 & "&" & a3) 'concatène les colonnes
i = Application.Match(critere, tablo, 0)
If IsNumeric(i) Then MsgBox "trouvé ligne " & i: Exit Sub
'code transfert
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Trouve(3).xls
    779.5 KB · Affichages: 42
  • Trouve(3).xls
    779.5 KB · Affichages: 39
  • Trouve(3).xls
    779.5 KB · Affichages: 42

cathodique

XLDnaute Barbatruc
Re : Récupérer d'un tableau valeur sans doublon

Bonsoir Job75,

C'est vraiment très gentil de ta part de me proposer une autre alternative. Je pense que je suis très mal expliqué dès le début.

Je voulais juste effectuer un test pour ne pas enregistrer dans ma BD des données en double. Je ne m'en suis aperçu qu'au moment où je suis passé à l'étape calcul. J'ai obtenu des résultats bizarres. Je me suis aperçu que j'avais des données en double, triple et plus.

Grâce à votre aide, je suis certain maintenant que je ne pourrais plus transférer dans ma BD des données en double.

1000 mercis pour ta précieuse aide.

Bonne soirée.
 

Discussions similaires

Réponses
4
Affichages
450
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…