Mickoik
Habitué
Bonjour,
j'ai une macro un peu longue et une procédure un peu tirée par les cheveux mais qui fonctionne plutôt bien. Le truc, c'est que j'ai besoin de changer la procédure et je voudrais que les résultats s'affichent dans une listbox. Mais là j'ai besoin de votre aide parce que c'est un peu trop compliqué pour moi.
J'explique ma procédure actuelle :
je vais chercher les éléments que je veux comme ça :
ensuite, directement sur la tableau excel je complète les trous avec des formules du type :
=SI(OU(BA3="";BA3="x");"";SI(BB3="";AX2;BB3))
ou bien
=SI(AZ11="";SI(OU(BA11="";BA11="x");"";1);AZ11)
parce que je tableau que je traite a des trous mais ces trous sont facile à compléter avec les 2 formules ci-dessous.
J'obtient donc un deuxième tableau que je traite comme ça :
Ce troisième tableau correspond à mon résultat.
J'aimerai arriver à faire tout ça sans avoir besoin d'utiliser le tableau excel et faire apparaître le résultat final directement dans une listbox.
Vous pensez que c'est possible ?
j'ai une macro un peu longue et une procédure un peu tirée par les cheveux mais qui fonctionne plutôt bien. Le truc, c'est que j'ai besoin de changer la procédure et je voudrais que les résultats s'affichent dans une listbox. Mais là j'ai besoin de votre aide parce que c'est un peu trop compliqué pour moi.
J'explique ma procédure actuelle :
je vais chercher les éléments que je veux comme ça :
CSS:
For Each macellule In client_materiel
If macellule = client.Value Then
Sheets("Gestion des installations").Cells(macellule.Row, 15).Copy Destination:=Sheets("Rechercher Client").Range("BA" & Rows.Count).End(xlUp).Offset(1, 0)
derligcam = Sheets("Rechercher Client").Range("BA" & Rows.Count).End(xlUp).Row
Sheets("Gestion des installations").Cells(macellule.Row, 13).Copy Destination:=Sheets("Rechercher Client").Range("BB" & derligcam)
Sheets("Gestion des installations").Cells(macellule.Row, 14).Copy Destination:=Sheets("Rechercher Client").Range("AZ" & derligcam)
Sheets("Gestion des installations").Cells(macellule.Row, 16).Copy Destination:=Sheets("Rechercher Client").Range("BA" & Rows.Count).End(xlUp).Offset(1, 0)
Sheets("Gestion des installations").Cells(macellule.Row, 17).Copy Destination:=Sheets("Rechercher Client").Range("BA" & Rows.Count).End(xlUp).Offset(1, 0)
Sheets("Gestion des installations").Cells(macellule.Row, 18).Copy Destination:=Sheets("Rechercher Client").Range("BA" & Rows.Count).End(xlUp).Offset(1, 0)
Sheets("Gestion des installations").Cells(macellule.Row, 19).Copy Destination:=Sheets("Rechercher Client").Range("BA" & Rows.Count).End(xlUp).Offset(1, 0)
Sheets("Gestion des installations").Cells(macellule.Row, 20).Copy Destination:=Sheets("Rechercher Client").Range("BA" & Rows.Count).End(xlUp).Offset(1, 0)
End If
Next
ensuite, directement sur la tableau excel je complète les trous avec des formules du type :
=SI(OU(BA3="";BA3="x");"";SI(BB3="";AX2;BB3))
ou bien
=SI(AZ11="";SI(OU(BA11="";BA11="x");"";1);AZ11)
parce que je tableau que je traite a des trous mais ces trous sont facile à compléter avec les 2 formules ci-dessous.
J'obtient donc un deuxième tableau que je traite comme ça :
CSS:
Set d1 = CreateObject("Scripting.Dictionary")
a = Range("AV2:AY" & [ba65000].End(xlUp).Row)
j = 0
For i = LBound(a) To UBound(a)
If Not d1.exists(a(i, 2)) Then j = j + 1: d1(a(i, 2)) = j
Next i
Dim b(): ReDim b(1 To d1.Count, 1 To UBound(a, 2))
For ligne = LBound(a) To UBound(a)
p = d1(a(ligne, 2))
b(p, 1) = b(p, 1) + a(ligne, 1)
For K = 2 To 4: b(p, K) = a(ligne, K): Next K
Next ligne
[AR1].Resize(UBound(b), UBound(b, 2)) = b
[AT1].Sort Key1:=[AT1], Order1:=xlAscending, Header:=xlYes
Ce troisième tableau correspond à mon résultat.
J'aimerai arriver à faire tout ça sans avoir besoin d'utiliser le tableau excel et faire apparaître le résultat final directement dans une listbox.
Vous pensez que c'est possible ?