Intermédiaire à une double boucle
Bonjour,
J'ai fait un code mais il est assez lourd car c'est une double boucle sur 50000 lignes de données ... Je voulais donc savoir si quelqu'un aurait une idée d'un code plus rapide qui fasse la même chose ?
Dans un tableau de la feuille "GESTIONNAIRE_ET_SERVICE" il y a une colonne Gestionnaire, une colonne service_avant et une colonne date_chmt.
Pour chaque ligne de ce tableau,
on ouvre une base de donnée de la feuille "BASE_SINISTRES", on se met dans la colonne gestionnaire, on parcours toutes les lignes et pour chaque ligne, si la cellule où on se trouve est égale à "gestionnaire" et si la cellule de la colonne "ouverture" (colonne 4) est antérieur à date_chmt alors on remplace la valeur de la cellule qui se trouve à droite de celle où on est par "service_avant".
Et on recommence pour la prochaine ligne du tableau de la feuille "GESTIONNAIRE_ET_SERVICE"...
Voici mon code :
With Worksheets("GESTIONNAIRE ET SERVICE")
ligne = .Range("J" & Rows.Count).End(xlUp).Row
End With
'nomme ligne la dernière ligne occupé de la colonne J de la feuille GESTIONNAIRE ET SERVICE
For v = 7 To ligne
Sheets("GESTIONNAIRE ET SERVICE").Select 'On ouvre la feuille "GESTIONNAIRE ET SERVICE"
gestionnaire = Cells(v, 10).Value 'On nomme gestionnaire le nom du gestionnaire qui a changé de service
date_chmt = Cells(v, 12).Value 'On nomme date_chmt la date à laquelle le changement a eu lieu
service_avant = Cells(v, 11).Value ' On nomme service_avant le service dans lequel le gestionnaire était avant le changement
Sheets("BASE_SINISTRES").Select 'On ouvre la feuille "BASE_SINISTRES"
For w = 3 To k + 1
Cells(w, 8).Select
If (Cells(w, 8).Value = gestionnaire And Cells(w, 4).Value < date_chmt) Then
Cells(w, 9).Value = service_avant
End If
Next
'On regarde toutes les cellules de la colonne "gestionnaire" et quand le gestionnaire "gestionnaire" apparait et que
'la date d'ouverture est inférieur à date_chmt alors nous changeons la cellule se trouvant sur la même ligne mais dans
'la colonne "service" par service_avant
Next
'On recommence cette opération pour les autres gestionnaires qui ont changé de serviceMerci d'avance !
bonsoir,
quelques modifications qui devraient améliorer les performances.
dim wsb as object
dim wsg as object
Application.Calculation = xlCalculationManual
application.screenupdating=false
set wsb=Worksheets("BASE_SINISTRES")
set wsg=Worksheets("GESTIONNAIRE ET SERVICE")
ligne = wsg.Range("J" & Rows.Count).End(xlUp).Row
'nomme ligne la dernière ligne occupé de la colonne J de la feuille GESTIONNAIRE ET SERVICE
For v = 7 To ligne
gestionnaire = wsg.Cells(v, 10).Value 'On nomme gestionnaire le nom du gestionnaire qui a changé de service
date_chmt = wsg.Cells(v, 12).Value 'On nomme date_chmt la date à laquelle le changement a eu lieu
service_avant = wsg.Cells(v, 11).Value ' On nomme service_avant le service dans lequel le gestionnaire était avant le changement
' VALEUR DE k ??????
For w = 3 To k + 1
If wsb.(Cells(w, 8).Value = gestionnaire And wsb.Cells(w, 4).Value < date_chmt) Then
wsb.Cells(w, 9).Value = service_avant
End If
Next
'On regarde toutes les cellules de la colonne "gestionnaire" et quand le gestionnaire "gestionnaire" apparait et que
'la date d'ouverture est inférieur à date_chmt alors nous changeons la cellule se trouvant sur la même ligne mais dans
'la colonne "service" par service_avant
Next
'On recommence cette opération pour les autres gestionnaires qui ont changé de service
set wsb=nothing
set wsg=nothing
application.screenupdate=true
Application.Calculation = xlCalculationAutomaticBonsoir,
peut-être qu'avec un fichier de test on chercherait plus facilement.
eric