Demande d'aide sur un programme VBA

Signaler
Messages postés
10
Date d'inscription
lundi 7 juin 2021
Statut
Membre
Dernière intervention
14 juin 2021
-
Messages postés
16017
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 juin 2021
-
Bonjour, qui peut m'aider sur ce script ?

Au fait la variable ne prend que la valeur "t=3" et s'arrête.
De plus, la recherchev doit se faire sur presque 300000 lignes, ce qui rend la macro lente.
Qui pourrait me proposer une optimisation du code sachant que j'ai utilisé ceci avant le début du programme :

Sub TurnOffStuff()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
End Sub

Sub TurnOnStuff()
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub




Sub recherchev3()
Dim i As Double, t As Double
Dim wb As Workbook, fl As Worksheet
Set wb = Workbooks("SGPCSIN.xlsx")
Set fl = wb.Sheets("LSENEGAL_SGPCSIN")
Set maplage = fl.Range("B:AJ")
i = 2
t = 3
Call TurnOffStuff
While t <= 35
Do While Workbooks("Sinistres_par_actes_052021.xlsm").Sheets("LSENEGAL_SGPCPSI").Cells(i, 1) <> ""
Cells(i, 21 + t) = Application.VLookup(Cells(i, 2).Value, maplage, t, False)
i = i + 1
Loop
t = t + 1
Wend
Call TurnOnStuff
End Sub


Merci cordialement !
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

5 réponses

Messages postés
2610
Date d'inscription
jeudi 2 juillet 2015
Statut
Membre
Dernière intervention
14 juin 2021
1 550
Bonjour,

Je pense que ca vient du fait que vous ne faites jamais un reset de i.

Du coup, Tout fonctionne pour t = 3, mais lorsque t passe a 4, i a encore sa valeur de fin, et donc ignore le do While qui lui correspond.

Vous devriez peut-être initier votre i juste après le while t<=35.
Messages postés
10
Date d'inscription
lundi 7 juin 2021
Statut
Membre
Dernière intervention
14 juin 2021

Merci beaucoup @diablo13800, je pense que ca devrait marcher.
J'essaie de vérifier en compilant mais ca prend trop de temps pour s'exécuter.
Qui peut m'aider à réduire le temps d'exécution en regardant mon programme ?
Messages postés
2610
Date d'inscription
jeudi 2 juillet 2015
Statut
Membre
Dernière intervention
14 juin 2021
1 550 >
Messages postés
10
Date d'inscription
lundi 7 juin 2021
Statut
Membre
Dernière intervention
14 juin 2021

Malheureusement, sur plus de 300000 ligne et une trentaine de colonnes il est difficile d'avoir des macros rapides
Messages postés
10
Date d'inscription
lundi 7 juin 2021
Statut
Membre
Dernière intervention
14 juin 2021

C'est vraiment dommage car j'ai une "base de données" qui vit et de ce fait le nombre de lignes augmente au fil du temps; je croyais que les macros étaient une alternative.
Messages postés
2610
Date d'inscription
jeudi 2 juillet 2015
Statut
Membre
Dernière intervention
14 juin 2021
1 550
Les macro sont des alternatives, mais pour le coup votre tableau est vraiment gros...

Votre formule semble être de retranscrire que certaines colonnes colonne de votre tableau initial, est-ce bien ca?
Messages postés
10
Date d'inscription
lundi 7 juin 2021
Statut
Membre
Dernière intervention
14 juin 2021

Voila @diablo13800 c'est vraiment ca !
Messages postés
2610
Date d'inscription
jeudi 2 juillet 2015
Statut
Membre
Dernière intervention
14 juin 2021
1 550
Peut-être qu'un TCD pourrait éventuellement vous aider, essayez de vous renseigné dessus
Messages postés
10
Date d'inscription
lundi 7 juin 2021
Statut
Membre
Dernière intervention
14 juin 2021

Merci vraiment @diablo13800 j'ai essayé pour 300000 lignes pour 2 colonnes ca vient, mais pour les 35 colonnes en total c'est lent.
Messages postés
16017
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 juin 2021
867
bonjour,
il serait préférable que tu expliques le résultat attendu.