Sub TrendDSP_Bis()
' Mise en mémoire de la feuille Info
Dim FeInfo As Worksheet
Set FeInfo = Worksheets("Info")
' Création d'une variable tableau 2 dimenssion
Dim TabInfo() As Variant
' Plage de du tableau dans la feuille info a stocké dans la variable tableau !
TabInfo = FeInfo.Range(FeInfo.Cells(3, 2), FeInfo.Cells(FeInfo.Cells(65536, 8).End(xlUp).Row, 10))
' comme les données sont stocké dans une variable tableau
' Se ne sont plus les valeur de la feuille excel car transféré dans cette variable
' il faut ajouté une colonne pour stocké les valeurs de recherches trouvé soit
' un redim preserve / c'est a dire ont conserve toute les valeurs du tableau et ont affecte une colonne suplémentaire
' LBound(TabInfo, 1) = 1 ligne, de la premiere colonne
' UBound(TabInfo, 1) = Derniere ligne de la premiere colonne
' LBound(TabInfo, 2) = 1 ere colonne du tableau
' UBound(TabInfo, 2 = Derniére colonne du tableau
' se qui corespond au valeur de la plage du tableau feuille info soit : FeInfo.Range(FeInfo.Cells(3, 2), FeInfo.Cells(FeInfo.Cells(65536, 8).End(xlUp).Row, 10))
' Ensuite j'affecte une autre colonne d'ou le +1
ReDim Preserve TabInfo(LBound(TabInfo, 1) To UBound(TabInfo, 1), LBound(TabInfo, 2) To (UBound(TabInfo, 2) + 1))
' Idem même principe
Dim FeSource As Worksheet
Set FeSource = Worksheets("Source")
Dim TabSource() As Variant
TabSource = FeSource.Range(FeSource.Cells(2, 9), FeSource.Cells(FeSource.Cells(65536, 9).End(xlUp).Row, 12))
ReDim Preserve TabSource(LBound(TabSource, 1) To UBound(TabSource, 1), LBound(TabSource, 2) To (UBound(TabSource, 2) + 1))
' systéme de boucle simple !
' Compte le nombre de ligne dans le tableau source qui sont identique au tableau info
' dans la colonne crée du tableau info (Redim preserve +1) selon mes explication
' je fait un compteur dans cette colonne
' et chcunes des lignes qui sont reperer dans le tableau source (sur le même principe de céation que l'explication du tableau info)
' une fois la igne selon une clef primaire créer au moyen de concatenation (Vendor Name & Insertion Orders)
' je connais le nombre de ligne que je stocke dans le tableau info
For i = LBound(TabInfo, 1) To UBound(TabInfo, 1)
For j = LBound(TabSource, 1) To UBound(TabSource, 1)
If TabInfo(i, 7) & TabInfo(i, 9) = TabSource(j, 2) & TabSource(j, 4) Then
TabInfo(i, 10) = TabInfo(i, 10) + 1
End If
Next j
Next i
' il n'y a plus cas faire une boucle sur le tableau info sur le même principe
' de cléf primaire créer
' puis devant chaque ligne du tableau source qui correspond au tableau info
' le montant info memtioné des la base puis se servire de cette colonne nouvelle ou sont stocké le nombre de
' ligne identique (boucle précédente) ont divive le montant par le nombre de ligne trouvé identique.
For i = LBound(TabInfo, 1) To UBound(TabInfo, 1)
For j = LBound(TabSource, 1) To UBound(TabSource, 1)
If TabInfo(i, 7) & TabInfo(i, 9) = TabSource(j, 2) & TabSource(j, 4) Then
TabSource(j, 5) = "=" & TabInfo(i, 8) & "/" & TabInfo(i, 10)
End If
Next j
Next i
' restitution des données dans la feuille source.
' je restitu jsute la colonne créer au moyen du redim preserve
' soit la colonne N°5
FeSource.Range("D2").Resize(UBound(TabSource, 1), 1).Value = Application.Index(TabSource, , 5)
' maintenant ont doit retrouvé les dates donc le tableau source n'a pas assez de colonne
' (UBound(TabSource, 2) = le nombre total de colonne ici 5 colonnes
' donc plus 2 colonnes pour les dates eDay et sDay
' la tableau source a maintenant 7 colonnes
ReDim Preserve TabSource(LBound(TabSource, 1) To UBound(TabSource, 1), LBound(TabSource, 2) To (UBound(TabSource, 2) + 2))
' donc le tableau source a 7 colonnes maintenant (le deux derniere vide que l'on va remplire ci-desous
'suite idem : Même principe clef primaire créer / recherche et ont colle dans les deux colonnes créer
' du tableau source les dates de valeurs du tableau info.
' C'est un peux le même principe.
' Ps : pour les dates copier dans une variable tableau et restituer dans une feuilles excel
' parfois les resultats sont pas identique donc
' la valeur trouver dans excel avant d'etre stocker dans la variable tableau et transformer
' en date avec Cdate
' et ont affecte un format de type internationnal avec
' Format(LaVariabledtate,, "yyyy-mm-dd")
' ps : Il y a un lien qui explique dans le commentaire a l'endroit que cela interesse.
For i = LBound(TabSource, 1) To UBound(TabSource, 1)
For j = LBound(TabInfo, 1) To UBound(TabInfo, 1)
If TabInfo(j, 7) & TabInfo(j, 9) = TabSource(i, 2) & TabSource(i, 4) Then
' un peux compliqué les format date donc un lien
' https://www.developpez.net/forums/d1544905/logiciels/microsoft-office/excel/macros-vba-excel/format-certaines-dates-change-apres-traitement-variable-tableau/
TabSource(i, 6) = Format(CDate(TabInfo(j, 1)), "yyyy-mm-dd")
TabSource(i, 7) = Format(CDate(TabInfo(j, 2)), "yyyy-mm-dd")
End If
Next j
Next i
'Idem ont restitu les resultat
'sDay
FeSource.Range("E2").Resize(UBound(TabSource, 1), 1).Value = Application.Index(TabSource, , 6)
'eDay
FeSource.Range("F2").Resize(UBound(TabSource, 1), 1).Value = Application.Index(TabSource, , 7)
End Sub