Résolu dictionary et listbox

Mickoik

Habitué
comme ça, ça marche mais 2 problèmes :
1) quand il y a trop de lignes, la date s'efface
2) je ne vais chercher qu'une seule colonne

Code:
Dim derligne_recup As Integer

derligne_recup = n * 5

 
ReDim tab_recup(derligne_recup, 3)

 
For i = LBound(tab_donnees, 1) To UBound(tab_donnees, 1)
For k = 0 To n
 
If clientbox = tab_donnees(i, 0) Then
    If tab_donnees(i, 2) = "" Then
    tab_recup(k, 0) = 1
    Else
    tab_recup(k, 0) = tab_donnees(i, 2) 'nb de matos
    End If
    
    tab_recup(k, 1) = tab_donnees(i, 3) 'matos
    
    If tab_donnees(i, 1) = "" Then
    tab_recup(k, 2) = tab_donnees(i - 1, 1)
    Else
    tab_recup(k, 2) = tab_donnees(i, 1) 'date
    End If

End If
Next k
Next i


With Sheets("Feuil1")
Range("D38:F48") = tab_recup
End With
 

drul

Obscur pro du hardware
Staff
T'as essayer ce que j'ai posté juste au dessus ?

Edit avec un dictionnaire ce sera très similaire ...
 

Mickoik

Habitué


bien sur que j'ai essayé mais ça ne marche pas
 

Mickoik

Habitué
quand ça chargeait une feuille de calcul, le code qui marchait était ça :
Code:
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
 

Mickoik

Habitué
regarde, comme ça, ça va chercher toutes les bonnes infos mais 1 anomalie :
sur une même ligne j'ai :
4 I CAMERAS I ECRAN X I DVR X I DD I ALIM

il me prend tout comme il faut mais évidement, il me met :
4 CAMERAS
4 ECRAN X
4 DVR X
4 DD
4 ALIM

alors que le "4" n'autait du être pris qu'une seule fois.
Le code :

Code:
Dim derligne_recup As Integer

derligne_recup = n * 5

 
ReDim tab_recup(derligne_recup, 3)

 

k = 1
For i = LBound(tab_donnees, 1) To UBound(tab_donnees, 1)
 
    If clientbox = tab_donnees(i, 0) Then
       tab_recup(k, 0) = tab_donnees(i, 2) 'nb de matos
       tab_recup(k, 1) = tab_donnees(i, 3) 'matos
       tab_recup(k, 2) = tab_donnees(i, 1) 'date
 
       tab_recup(k + 1, 0) = tab_donnees(i, 2) 'mettre si >1
       tab_recup(k + 1, 1) = tab_donnees(i, 4)
       tab_recup(k + 1, 2) = tab_donnees(i, 1) 'mettre si pas de date
 
       tab_recup(k + 2, 0) = tab_donnees(i, 2) 'mettre si >1
       tab_recup(k + 2, 1) = tab_donnees(i, 5)
       tab_recup(k + 2, 2) = tab_donnees(i, 1) 'mettre si pas de date
 
       tab_recup(k + 3, 0) = tab_donnees(i, 2) 'mettre si >1
       tab_recup(k + 3, 1) = tab_donnees(i, 6)
       tab_recup(k + 3, 2) = tab_donnees(i, 1) 'mettre si pas de date
 
       tab_recup(k + 4, 0) = tab_donnees(i, 2) 'mettre si >1
       tab_recup(k + 4, 1) = tab_donnees(i, 7)
       tab_recup(k + 4, 2) = tab_donnees(i, 1) 'mettre si pas de date

k = k + 5


End If
Next

 

Mickoik

Habitué
alors là on y est presque presque :
tout est juste plus d'erreurs.
Mais

1) dans ma condition je voudrai ajouter
Code:
 And date_ins = tab_donnees(i, 1)
mais ça fait une erreur "incompatibilité de type" erreur 2042

2) j'ai encore des lignes vides sans résultat que je souhaiterai enlever

3) comment regrouper les éléments identiques de ma deuxième colonne, les compter et mettre le nombre en première colonne ex :
cam x
cam x
cam x
qui donne
3 cam x

après j'aurai fini !

le code :
Code:
For i = LBound(tab_donnees, 1) To UBound(tab_donnees, 1)

If clientbox = tab_donnees(i, 0) Then

n = n + 1

End If

Next

 
' je charge mon tableau de resultats et transforme mon tableau en 3 colonnes en comblant les trous

Dim derligne_recup As Integer

derligne_recup = n * 5

 
ReDim tab_recup(derligne_recup, 3)

Dim client As String
Dim date_ins As Date

client_box_rec = clientbox.text
date_ins = installbox.text


k = 1
For i = LBound(tab_donnees, 1) To UBound(tab_donnees, 1)
 
    If client_box_rec = tab_donnees(i, 0) And date_ins = tab_donnees(i, 1) Then

       tab_recup(k, 0) = tab_donnees(i, 2) 'nb de matos
       tab_recup(k, 1) = tab_donnees(i, 3) 'matos
       tab_recup(k, 2) = tab_donnees(i, 1) 'date

 
       If Not tab_donnees(i, 4) = "" Then
       tab_recup(k + 1, 1) = tab_donnees(i, 4)
       tab_recup(k + 1, 2) = tab_donnees(i, 1) 'mettre si pas de date
       End If
       
       If Not tab_donnees(i, 5) = "" Then
       tab_recup(k + 2, 1) = tab_donnees(i, 5)
       tab_recup(k + 2, 2) = tab_donnees(i, 1) 'mettre si pas de date
       End If
       
       If Not tab_donnees(i, 6) = "" Then
       tab_recup(k + 3, 1) = tab_donnees(i, 6)
       tab_recup(k + 3, 2) = tab_donnees(i, 1) 'mettre si pas de date
       End If
       
       If Not tab_donnees(i, 7) = "" Then
       tab_recup(k + 4, 1) = tab_donnees(i, 7)
       tab_recup(k + 4, 2) = tab_donnees(i, 1) 'mettre si pas de date
       End If

k = k + 5
End If
Next



Me.listMatos.AddItem
listMatos.List = tab_recup
 

Mickoik

Habitué
pour le 1) j'ai trouvé la formulation mais ça ne marche pas parce que j'ai des cellules vides.

Code:
If client_box_rec = tab_donnees(i, 0) And date_ins = CDate(tab_donnees(i, 1)) Then
 

drul

Obscur pro du hardware
Staff
Salut, vraiment désolé mais je manque de temps pour assurer le suivit d'un sujet aussi complexe :/
c'est bien je vois toutefois que tu avances de ton côté.
 

Mickoik

Habitué
Meilleure réponse
je vous mets le code qui marche :
Code:
'recherche du matériel
Dim tab_donnees()
Dim tab_recup()

Dim derligne_donnees As Integer


' je recupère ma base
derligne_donnees = Sheets("Gestion des installations").Range("O" & Rows.Count).End(xlUp).Row

ReDim tab_donnees(derligne_donnees, 8)

    For i = 1 To derligne_donnees
        tab_donnees(i, 0) = Sheets("Gestion des installations").Range("A" & i) 'client
        tab_donnees(i, 1) = Sheets("Gestion des installations").Range("M" & i) 'date
        tab_donnees(i, 2) = Sheets("Gestion des installations").Range("N" & i) 'nombre de cameras
        tab_donnees(i, 3) = Sheets("Gestion des installations").Range("O" & i) 'type camera
        tab_donnees(i, 4) = Sheets("Gestion des installations").Range("P" & i) 'type ecran
        tab_donnees(i, 5) = Sheets("Gestion des installations").Range("Q" & i) 'type dvr
        tab_donnees(i, 6) = Sheets("Gestion des installations").Range("R" & i) 'type DD
        tab_donnees(i, 7) = Sheets("Gestion des installations").Range("S" & i) 'type alim
    
    Next



' je compte le nombre de ligne de mon tableau resultats

For i = LBound(tab_donnees, 1) To UBound(tab_donnees, 1)

If clientbox = tab_donnees(i, 0) Then

n = n + 1

End If

Next

 
' je charge mon tableau de resultats et transforme mon tableau en 3 colonnes en comblant les trous
If Not installbox.text = "" Then
Dim derligne_recup As Integer

derligne_recup = n * 5

 
ReDim tab_recup(derligne_recup, 2)

Dim client As String
Dim date_ins As Date

client_box_rec = clientbox.text
date_ins = installbox.text


k = 1
For i = LBound(tab_donnees, 1) To UBound(tab_donnees, 1)
 
    If client_box_rec = tab_donnees(i, 0) And date_ins = CDate(tab_donnees(i, 1)) Then



 
tab_recup(k, 0) = tab_donnees(i, 2) 'nb de matos
       tab_recup(k, 1) = tab_donnees(i, 3) 'matos

 
 
       If Not tab_donnees(i, 4) = "" Then
       tab_recup(k + 1, 1) = tab_donnees(i, 4)

       End If
 
       If Not tab_donnees(i, 5) = "" Then
       tab_recup(k + 2, 1) = tab_donnees(i, 5)

       End If
 
       If Not tab_donnees(i, 6) = "" Then
       tab_recup(k + 3, 1) = tab_donnees(i, 6)

       End If
 
       If Not tab_donnees(i, 7) = "" Then
       tab_recup(k + 4, 1) = tab_donnees(i, 7)

       End If

k = k + 5
End If
Next






Me.listMatos.AddItem
listMatos.List = tab_recup
End If
 

drul

Obscur pro du hardware
Staff
Superbe, bravo !
ça me semble pas loin de ce que je t'avais proposé quelques message plus haut ;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 156
Messages
6 718 499
Membres
1 586 438
Dernier membre
sentenza696
Partager cette page
Haut