Résolu Une idée pour accélérer cette macro

Mickoik

Habitué
Bonjour,

J'ai fait cette petite macro mais elle est hyper longue à fonctionner.
Je sais que le problème vient du fait que je fait une double boucle for each mais j'ai besoin que le résultat dépende de deux conditions.
En gros, je fait une rechercher avec une autre macro qui me charge une listbox.
Quand je clique sur la ligne qui contient mon résultat, je charge des textbox à partir d'un tableau excel. Le truc, c'est que pour afficher le bon résultat, il faut que la ligne choisie dans mon tableau vérifie deux conditions. Si quelqu'un à une idée ...

C++:
Private Sub Listrecherche_Change()

Dim table_siren As Range
Dim table_install As Range
Dim sirensel As Long
Dim dateinstalsel As Date

sirensel = Me.Listrecherche.Column(9)
dateinstalsel = Me.Listrecherche.Column(4)

Dim PP As Integer
PP = Sheets("Tableau Général").Range("A" & Rows.Count).End(xlUp).Row

Set table_siren = Sheets("Tableau Général").Range("c2:c" & PP)
Set table_install = Sheets("Tableau Général").Range("v2:v" & PP)

For Each macellule In table_siren
For Each macellule2 In table_install

If macellule.Value = sirensel And macellule2.Value = dateinstalsel Then

    clientbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 1).Value
    raisonbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 2).Value
    sirenbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 3).Value
    nombox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 5).Value
    signbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 6).Value
    adressebox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 7).Value
    cpbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 8).Value
    villebox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 9).Value
    telbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 10).Value
    portbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 11).Value
    mailbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 12).Value
    mensubox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 14).Value
    racbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 15).Value
    installbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 22).Value
    vendeurbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 20).Value
    leaserbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 21).Value

End If
Next
Next

End Sub


Merci à tous !
 

drul

Obscur pro du hardware
Staff
Meilleure réponse
Salut, euh en fait comment dire cela poliment ...

[:Falzar] Ta macro est totalement buggé !!! [:Falzar]

Et c'est pour cela qu'elle est extrêment lente (en plus de donner des résultats potentiellement faux)

Le gros problème vient de ta double boucle, en fait tu ne controles pas si macellule et macellule2 pointent sur la même ligne: résultat:
- Pour chaque cellule de la plage 1 ayant "sirensel" tu exécutes la copie pour chaque cellule de la plage 2 ayant la valeur "dateinstalsel" !

Essaye plutôt cela:
Code:
Private Sub Listrecherche_Change()
Dim macellule As Range
Dim table_siren As Range
Dim table_install As Range
Dim sirensel As Long
Dim dateinstalsel As Date
 
sirensel = Me.Listrecherche.Column(9)
dateinstalsel = Me.Listrecherche.Column(4)
 
Dim PP As Integer
PP = Sheets("Tableau Général").Range("A" & Rows.Count).End(xlUp).Row
 
Set table_siren = Sheets("Tableau Général").Range("c2:c" & PP)

 
For Each macellule In table_siren
    If (macellule.Value = sirensel) And (macellule.Offset(0, 19).Value = dateinstalsel) Then '19 est l'offset entre la colonne C et la colonne V
                clientbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 1).Value
                raisonbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 2).Value
                sirenbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 3).Value
                nombox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 5).Value
                signbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 6).Value
                adressebox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 7).Value
                cpbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 8).Value
                villebox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 9).Value
                telbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 10).Value
                portbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 11).Value
                mailbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 12).Value
                mensubox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 14).Value
                racbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 15).Value
                installbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 22).Value
                vendeurbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 20).Value
                leaserbox.Text = Sheets("Tableau Général").Cells(macellule2.Row, 21).Value
            Exit For
    End If
Next
 
End Sub
 

Mickoik

Habitué

Drul tu es le champion des champions
à chaque fois c'est toi qui me sauve !
j'ai même appelé un macro drul en !
 

Mickoik

Habitué


une de mes macro commence comme ça :
sub drul ()
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 156
Messages
6 718 516
Membres
1 586 439
Dernier membre
Thailounette
Partager cette page
Haut