Sub test()
' Semaine - 1 (V010115)
Dim Fsmoin1 As Worksheet
Set Fsmoin1 = Worksheets("V010115")
Dim TabFsmoin1() As Variant
' ci en fixe je copie en mémoire les ligne et colonne du tableau de la
' feuille V010115 soit :
' Les lignes Fsmoin1.Cells(2, 1) = A2 ici
' 2 pour Numéro de ligne = 1
' 1 Numéro de colonne = A
' TabFsmoin1 = Fsmoin1.Range(Fsmoin1.Cells(2, 1), Fsmoin1.Cells(6, 4))
' Ci dessous en variable autoajustable
' Derniere ligne de la colonne A de la feuille V010115
MsgBox Fsmoin1.Cells(65536, 1).End(xlUp).Row - 1
' Derniere colonne de la la premiere ligne de la feuille V010115
MsgBox Fsmoin1.Cells(1, Fsmoin1.Cells.Columns.Count).End(xlToLeft).Column
' ici en une seul fois la plage copier en mise en mémoire tableau soit :
' plage A2:D6
TabFsmoin1 = Fsmoin1.Range(Fsmoin1.Cells(2, 1), Fsmoin1.Cells(Cells(65536, 1).End(xlUp).Row, Fsmoin1.Cells(1, Fsmoin1.Cells.Columns.Count).End(xlToLeft).Column))
' Semaine en cours (V140115)
' Ideme ci dessus même méthode.
Dim Fs As Worksheet
Set Fs = Worksheets("V140115")
Dim TabFs() As Variant
'TabFs = Fs.Range(Fs.Cells(2, 1), Fs.Cells(6, 4))
TabFs = Fs.Range(Fs.Cells(2, 1), Fs.Cells(Cells(65536, 1).End(xlUp).Row, Fs.Cells(1, Fs.Cells.Columns.Count).End(xlToLeft).Column))
' Creation d'un Nouveau tableau regroupant les 2
Dim TabRes() As Variant
' Ici c'est un tableau viérge en mémoire
' il aura la capacité du nombre de ligne des deux tableaux
' TabFsmoin1 et TabFs
' Pour connaitre le :
' Nombre de ligne d'un tableau c'est cette instruction --- >>> UBound(TabFsmoin1, 1) ici 5 ligne
' Nombre de colonne d'un tableau c'est cette instruction --- >>> UBound(TabFsmoin1, 2) ici 4 colonne
' Ont peux aussi alloué des colonnes suplémentaire j'en ai alloué 3 suplémentaire
' Comme le tableau a 4 colonnes avec des valeurs je crée 3 de plus vides d'ou :
' UBound(TabFsmoin1, 2) ici 4 colonne + 3 vides = 7 colonnes.
' L'astuce pour dimensionné du nombre de ligne suffisantes je fais une addition
' du nombres total des deux tableaux soit
' UBound(TabFsmoin1, 1) ici 5 ligne + UBound(TabFs, 1) ici 5 ligne = 10 lignes
' ReDim TabRes(1 To UBound(TabFsmoin1, 1) + UBound(TabFs, 1), 1 To 7)
' OU
ReDim TabRes(1 To UBound(TabFsmoin1, 1) + UBound(TabFs, 1), 1 To UBound(TabFsmoin1, 2) + 3)
Dim i As Integer
' ici je copie les valeurs des deux précédents tableau en mémoire :
' TabFsmoin1 et TabFs
' dans un seul est unique que j'ai crée plus haut avec mes explication pour
' en faire un seul ou il y aura toute les donnés
' Semaine - 1 (V010115)
For i = 1 To UBound(TabFsmoin1, 1) ' Ici de i = 1 er ligne à derniére ligne TabFsmoin1
For j = 1 To UBound(TabFsmoin1, 2) 'Ici de j = 1 er colonne à derniére colonne TabFsmoin1
' Fsmoin1.Name (Fsmoin1 = Objet) et propriété Name le nom de l'objet = Nom de la feuille
' qui est copier dans la premiére colonne du tableau
' et ci dessous la suite des infos copier dans le nouveau tableau.
TabRes(i, 1) = Fsmoin1.Name ' Ici je décide que ma premiere colonne sera le nom de la feuille
TabRes(i, j + 1) = TabFsmoin1(i, j) ' ici la deuxiéme colonne sera les info de la 1 er colonne TabFsmoin1 [j + 1]
Next j
Next i
' ci dessous pricinpe ideme avec position et astuce expliqué
' le premier tableau a 5 ligne et je dois continué sur la 6 ligne du nouveau
' tableau TabRes qui en contient 10
' donc
' For i = UBound(TabFs, 1) + 1 To UBound(TabRes, 1)
' de i = 5 ligne du tableau TabFs à 10 ligne du tableau TabRes
' Semaine en cours (V140115)
For i = UBound(TabFs, 1) + 1 To UBound(TabRes, 1) ' de i = 5 ligne du tableau TabFs à 10 ligne du tableau TabRes
For j = 1 To UBound(TabFs, 2) 'Ici de j = 1 er colonne à derniére colonne TabFs
TabRes(i, 1) = Fs.Name
' explication :
' TabFs(i - UBound(TabFs, 1), j)
' i au tous début est = en faite 6
' donc le tableau n'a que 5 lignes
' d' ou 6 - 5 = 1 soit la premiere ligne du tableau
' Donc i [=6] - UBound(TabFs, 1) [=5] c'est a dire 1 soit la ligne 1
' Bien sur j = La colonne position
TabRes(i, j + 1) = TabFs(i - UBound(TabFs, 1), j)
Next j
Next i
' A voir au pas a pas pour comprendre.
' C'est comme pour identifier les doublons
' on fait une double boucle de balayage
' pour identifié les doublons = "Identiques"
' Les conditions (Doublon pour identique)
For i = 1 To UBound(TabRes, 1) ' i = premiere ligne du tableau tester
For j = i + 1 To UBound(TabRes, 1) ' j = 2 éme ligne du tableau tester
' c'est pour voir se qui est en double
If TabRes(i, 2) & TabRes(i, 5) = TabRes(j, 2) & TabRes(j, 5) Then
TabRes(j, 7) = "Identique"
End If
Next j
Next i
'Cells(23, 1).Resize(UBound(TabRes, 1), UBound(TabRes, 2)) = TabRes
' on fait une double boucle de balayage
' pour identifié les Modification = "Modifier"
' Les conditions (Difference)
For i = 1 To UBound(TabRes, 1)
For j = i + 1 To UBound(TabRes, 1)
If TabRes(i, 2) = TabRes(j, 2) And TabRes(i, 5) <> TabRes(j, 5) Then
TabRes(j, 7) = "Modifier"
End If
Next j
Next i
'Cells(23, 1).Resize(UBound(TabRes, 1), UBound(TabRes, 2)) = TabRes
' Ici suprimé c'est a dite
' si la case ou il n'y a pas de identique (doubon) ou Modifier et donc vide
' et que la colonne correspond a Fsmoin1.Name soit nom de la feuille V010115
' inutil de conservé
' Les conditions (suprimer)
For i = 1 To UBound(TabRes, 1)
If TabRes(i, 1) = Fsmoin1.Name And TabRes(i, 7) = "" Then
TabRes(i, 7) = "suprimer"
End If
Next i
'Cells(23, 1).Resize(UBound(TabRes, 1), UBound(TabRes, 2)) = TabRes
' Ici suprimé c'est a dite
' si la case ou il n'y a pas de identique (doubon) ou Modifier et donc vide
' et que la colonne correspond a Fs.Name soit nom de la feuille V140115
' c'est une ligne a crée
' Les conditions (crée)
For i = 1 To UBound(TabRes, 1)
If TabRes(i, 1) = Fs.Name And TabRes(i, 7) = "" Then
TabRes(i, 7) = "crée"
End If
Next i
'Cells(23, 1).Resize(UBound(TabRes, 1), UBound(TabRes, 2)) = TabRes
Dim cpt As Integer
' ici c'est un compteur
' pour compté le nombre de case de la colonne ou
' il n'y a pas inscrit en mémoire
' suprimer ou modifier
' dans cette exemple il y en a 3
For i = 1 To UBound(TabRes, 1)
If TabRes(i, 7) <> "suprimer" And TabRes(i, 7) <> "Modifier" Then
cpt = cpt + 1
End If
Next i
' Tableau restitution final annalyse
' Creation d'un Nouveau tableau regroupant les 2
Dim TabFinal() As Variant
' ici on dimensione juste du nombre de ligne = au compteur soit cpt
' el le nombre de colonne necéssaire soir 5
ReDim TabFinal(1 To cpt, 1 To 5)
' ici on réinitialise le cpt (compteur à 1)
cpt = 1
' colle les données dans le tableau
' les donner juste utile dans le tableau ou seront affichier
' vers excel les données final
For i = 1 To UBound(TabRes, 1)
' ' si les case de la colonne à crée ou modifier alors ont fait cette action si dessous
If TabRes(i, 7) = "crée" Or TabRes(i, 7) = "Modifier" Then
TabFinal(cpt, 1) = TabRes(i, 2) ' ligne 1 soit cpt et ici la colonne N° 2 du TabRes copier dans la colone 1 de TabFinal
TabFinal(cpt, 2) = TabRes(i, 3) ' etc
TabFinal(cpt, 3) = TabRes(i, 4)
TabFinal(cpt, 4) = TabRes(i, 5)
TabFinal(cpt, 5) = TabRes(i, 7)
cpt = cpt + 1 ' incremente le compteur de + 1
End If
Next i
' Ici ont restitu le tableau dans la cellule du tableau excel
' Cells(2, 7) 2 pour ligne 2 et 7 pour colonne N°7
Cells(2, 7).Resize(UBound(TabFinal, 1), UBound(TabFinal, 2)) = TabFinal
End Sub