1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| Sub DemoC()
Dim cLig As New Collection, C As Byte, L&, R&, VA, VR
With Feuil1 'Sur la Feul1
VA = .Cells(1).CurrentRegion.Value ' VA (Variant) = plage pour l'ensemble des valeurs
If UBound(VA, 2) < 5 Then Beep: Exit Sub 'Si le nombre de colonne inferieur à 5 alors joue le son beep (propre au sytème) et quitte la macro
ReDim VR(1 To UBound(VA) - 1, 1 To 5) 'Création du tableau VR : on Redimensionne le nombre de lignes (-1 : entête) et de colonnes de 1 à 5
Debug.Print UBound(VR) & " : " & UBound(VR, 2)
For R = 2 To UBound(VA) 'Boucle For de R (type long) = 2 à hauteur max du tableau VA
Debug.Print R & " / " & UBound(VA) & "Valeur la plus haute du tableau"
On Error Resume Next 'En cas erreur passe à la ligne suivante
L = cLig(VA(R, 2)) 'A chaque erreur L = 0, sinon L est égal à la valeur enregistrée dans la collection
Debug.Print L & " / " & VA(R, 2)
On Error GoTo 0 'on désactive le gestionnaire d'erreur activé dans la procédure en cours (on récupère la valeur de L)
If L Then 'équivalent de If L<>0 Then
Debug.Print VR(L, 4) & " + " & VA(R, 4) & " = "; VR(L, 4) + VA(R, 4)
VR(L, 4) = VR(L, 4) + VA(R, 4) 'on additionne en 4è col VR + VA pour résultat en VR correspondant à la ligne L et R
Debug.Print VR(L, 5) & " + " & VA(R, 5) & " = "; VR(L, 5) + VA(R, 5)
VR(L, 5) = VR(L, 5) + VA(R, 5) 'on additionne en 5è col VR + VA pour résultat en VR correspondant à la ligne L et R
Else
L = cLig.Count + 1 'Permet d'incrémenter le n° de ligne pour VR
cLig.Add L, VA(R, 2) 'enregistrement dans la collection du n° de ligne dans VR de la clef VA(R,2)
(index)
Debug.Print L & " / " & cLig(VA(R, 2))
For C = 1 To 5: VR(L, C) = VA(R, C): Debug.Print VA(R, C): Next ' on enregistre dans le tableau VR les donnée en ligne de la REF
End If
L = 0 ' on initialise L à 0
Next
If cLig.Count < UBound(VR) Then 'Si le nomdre de ligne de la collection est strictement inferieur au nombre de ligne max du tableau VR alors
Debug.Print cLig.Count & " < " & UBound(VR)
.[A2:E2].Resize(cLig.Count).Value = VR 'les valeurs de la plage VR sont copiés dans feuil1 de plage équivalente
Debug.Print .[A2:E2].Resize(cLig.Count).Address
.Rows(cLig.Count + 2 & ":" & UBound(VA)).Delete 'on efface les lignes de x1 à x2 (cLig.Count + 2 à UBound(VA)
' + 2 => +1 pour l'entête et + 1 pour être sur la ligne superieur à la plage venant d'être copiée
Debug.Print cLig.Count + 2 & " : " & UBound(VA)
End If
End With
Set cLig = Nothing
End Sub |
Partager