de l'agressivité?? ou ca??
maintenant.. relis bien ton post et imagine toi à notre place..
J'ai un problème dans la gestion de mon fichier "vacances".===> il existe donc un fichier.. quelque part....
Le problème est un problème de lenteur de calcul dû à des boucles dans mon VBA qui contraignent le tout. ==> il y a donc un code.. quelque part.. avec des boucles. (for ? while, loop..????)
Je n'arrive pas à penser à une autre solution donc je fais appel à votre génie ;-)===> tu devrais plutot aller sur un site de voyance
Je ne peux pas partager mon fichier donc je vais essayer d'être assez clair dans mes explications.==> bah moi. j'ai bien des fichiers qui traitent ce genre de problème.. mais la.. du coup. je peux pas non plus..
J'ai une liste de 50 employés qui ont droit à 6 semaines de vacances.==> ils en ont de la chance.. 6 semaines au lieu de 5....
Désolé de l'incompréhension.... Le sérieusement m'a paru agressif.
Et oui je ne peux pas transmettre mon fichier comme ça et cela était plus simple pour moi d'expliquer plutôt que de recréer un fichier diffusable.
Et pour les vacances, c'est même 7 mais j'ai simplifié ma demande.
Belle annalogie mais ce n'est pas la même granularité.
Et sinon j'utilisais que des bouscles While défini par le nombre de ligne et de colonne concerné.
Merci de vos réponses et bonne journée.
Ci dessous le code similaire que j'utilise pour le même genre de tâche mais pour 2 semaines sans questions de priorité.
Sub TransferCures()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'On efface les données du tableau existant
Set JUMBO = Worksheets("Jumbo")
Set VACANCES = Worksheets("Holidays")
JUMBO.Range(Cure).ClearContents
JUMBO.Range(Cure).ClearComments
JUMBO.Range(Cure).Interior.Color = xlNone
JUMBO.Range(Cure).Borders(xlDiagonalUp).LineStyle = xlNone
JUMBO.Range(Cure).Borders(xlDiagonalDown).LineStyle = xlNone
'Activation de la page Vacances
VACANCES.Activate
'On défini l'année en cours
Année = Year(JUMBO.Cells(2, 2))
'Definition des différents numéro de colonne.
Col_Initiale = Application.Match("Initiales", Range(Titre), 0)
Col_Cure = Application.Match("Cure", Range(Titre), 0)
Col_SPVR_Start = Application.Match("SPVR Start Date", Range(Titre), 0)
Col_SPVR_End = Application.Match("SPVR End Date", Range(Titre), 0)
Col_CDQ_Start = Application.Match("CDQ Start Date", Range(Titre), 0)
Col_CDQ_End = Application.Match("CDQ End Date", Range(Titre), 0)
'Compte le nombre de nom d'ATCO dans la colonne "Initiales"
'Definition du début des lignes à tranférer sur la base de 140 ATCOS
Ligne_Debut = 4 'Ligne correspondant au 1er nom ATCO
Nombre_ATCO = WorksheetFunction.CountA(Range(Cells(Ligne_Debut, Col_Initiale), Cells(141, Col_Initiale)))
Ligne_Fin = Ligne_Debut + Nombre_ATCO - 1 '-1 car on commence à la Ligne_Debut
'Definition du début et de la fin du tableau sur l'onglet "JUMBO"
Col_Annuel_Vacances = 2 'Colonne "Semaine N°"
Col_Annuel_Debut = 3 'Colonne "Semaine 1" de l'année
Col_Cure_Debut = Col_Annuel_Debut
Col_Annuel_Fin = Col_Annuel_Debut + 53 '52+1 semaines dont la 1ere colonne donc 52
Col_Num_Semaine = Col_Annuel_Debut 'Semaine 1 commence à Col_Annuel_Debut
'Initialisation des variables d'incrément pour chaque boucle
Col_Annuel_Increment = Col_Annuel_Debut
Col_Cure_Increment = Col_Cure_Debut
While Col_Annuel_Increment <= Col_Annuel_Fin
'Définition de la 1ère ligne à sélectionner dans onglet "Vacances"
Ligne_Increment = Ligne_Debut
'Définition de la couleur de vacances sélectionnées
Col_Couleur = Col_Cure
While Ligne_Increment <= Ligne_Fin
i = 0
If Cells(Ligne_Increment, Col_Couleur + i) = 0 Then
ElseIf Cells(Ligne_Increment, Col_Couleur + i) = JUMBO.Cells(Ligne_Annuel_Vacances, Col_Annuel_Increment) Then
While i <= Nb_Cure
'On regarde si CURES posées = numéro de semaine
Initiale = Cells(Ligne_Increment, Col_Initiale)
Col_Num_Semaine = Application.Match(VACANCES.Cells(Ligne_Increment, Col_Couleur + i), JUMBO.Range(NumSem), 0) + (Col_Annuel_Debut - 1) 'Car on commence à Col_Annuel_Debut dans le tableau "Annuel"
Ligne_Cure_Increment = Ligne_Cure_Debut
Couleur_Vac_Pas_Compte = VACANCES.Cells(Ligne_Increment, Col_Couleur + i).Interior.Color
While Ligne_Cure_Increment >= Ligne_Cure_Fin
If JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine) = 0 Then
JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine) = Initiale
JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine).Interior.Color = Cells(Ligne_Debut - 1, Col_Couleur).Interior.Color
If VACANCES.Cells(Ligne_Increment, Col_SPVR_Start) = 0 Or Year(VACANCES.Cells(Ligne_Increment, Col_SPVR_End)) < Année Then
JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine).Font.ColorIndex = 0 'Pas SPVR
ElseIf Year(VACANCES.Cells(Ligne_Increment, Col_SPVR_End)) >= Année Then
JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine).Font.ColorIndex = 2 'SPVR/CDQ en cours
End If
If Couleur_Vac_Pas_Compte <> RGB(255, 255, 255) Then
JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine).Borders(xlDiagonalUp).LineStyle = xlContinuous
JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine).Borders(xlDiagonalUp).Weight = xlThin
JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine).Borders(xlDiagonalUp).ColorIndex = 1
JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine).Borders(xlDiagonalDown).LineStyle = xlContinuous
JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine).Borders(xlDiagonalDown).Weight = xlThin
JUMBO.Cells(Ligne_Cure_Increment, Col_Num_Semaine).Borders(xlDiagonalDown).ColorIndex = 1
End If
Ligne_Cure_Increment = 0
Else
'On passe à la ligne d'avant
Ligne_Cure_Increment = Ligne_Cure_Increment - 1
End If
Wend
'On passe à la colonne d'après
i = i + 1
If VACANCES.Cells(Ligne_Increment, Col_Couleur + i) = 0 And i <= Nb_Cure Then
i = Nb_Cure + 1
End If
Wend
End If
'On passe à la ligne d'après
Ligne_Increment = Ligne_Increment + 1
Wend
Col_Annuel_Increment = Col_Annuel_Increment + 1
Wend
End Sub