Optimiser un bloc Find

  • Initiateur de la discussion Initiateur de la discussion cibleo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cibleo

XLDnaute Impliqué
Bonsoir le forum,
Dans la boucle For i = 1 To n, la variable z reçoit successivement la date du vendredi de chaque feuille nouvellement créée.

Dans la feuille "Garagistes", figurent les tours de services de garagistes commençant un vendredi et se terminant le vendredi suivant.

J'ai créé 6 variables Garage1 à Garage6 puisque 6 noms de garagistes doivent apparaitre
à chaque création de feuilles hebdomadaires.

Ci-dessous la succession de find définit bien ces 6 variables que je récupère successivement de C12 à C17

VB:
z = tablo1(i, 5)
Set c = Sheets("Garagistes").Range("B3:B" & Sheets("Garagistes").Range("B65536").End(xlUp).Row).Find(z)
If Not c Is Nothing Then
Garage1 = c.Offset(0, 1)
Sheets(Sheets.Count).[C12] = "du " & Format(Sheets(Sheets.Count).Range("B4"), "dddd dd mmmm") & " au " & Format(Sheets(Sheets.Count).Range("B8"), "dddd dd mmmm") & " à 17h30" & " : " & Garage1
End If
Set c = Sheets("Garagistes").Range("A3:A" & Sheets("Garagistes").Range("A65536").End(xlUp).Row).Find(z)
If Not c Is Nothing Then
Garage2 = c.Offset(0, 2)
Sheets(Sheets.Count).[C13] = "du " & Format(Sheets(Sheets.Count).Range("B8"), "dddd dd mmmm") & " à 17h30" & " au " & Format(Sheets(Sheets.Count).Range("B10"), "dddd dd mmmm") & " : " & Garage2
End If
Set c = Sheets("Garagistes").Range("B3:B" & Sheets("Garagistes").Range("B65536").End(xlUp).Row).Find(z)
If Not c Is Nothing Then
Garage3 = c.Offset(0, 2)
Sheets(Sheets.Count).[C14] = "du " & Format(Sheets(Sheets.Count).Range("B4"), "dddd dd mmmm") & " au " & Format(Sheets(Sheets.Count).Range("B8"), "dddd dd mmmm") & " à 17h30" & " : " & Garage3
End If
Set c = Sheets("Garagistes").Range("A3:A" & Sheets("Garagistes").Range("A65536").End(xlUp).Row).Find(z)
If Not c Is Nothing Then
Garage4 = c.Offset(0, 3)
Sheets(Sheets.Count).[C15] = "du " & Format(Sheets(Sheets.Count).Range("B8"), "dddd dd mmmm") & " à 17h30" & " au " & Format(Sheets(Sheets.Count).Range("B10"), "dddd dd mmmm") & " : " & Garage4
End If
Set c = Sheets("Garagistes").Range("B3:B" & Sheets("Garagistes").Range("B65536").End(xlUp).Row).Find(z)
If Not c Is Nothing Then
Garage5 = c.Offset(0, 3)
Sheets(Sheets.Count).[C16] = "du " & Format(Sheets(Sheets.Count).Range("B4"), "dddd dd mmmm") & " au " & Format(Sheets(Sheets.Count).Range("B8"), "dddd dd mmmm") & " à 17h30" & " : " & Garage5
End If
Set c = Sheets("Garagistes").Range("A3:A" & Sheets("Garagistes").Range("A65536").End(xlUp).Row).Find(z)
If Not c Is Nothing Then
Garage6 = c.Offset(0, 4)
Sheets(Sheets.Count).[C17] = "du " & Format(Sheets(Sheets.Count).Range("B8"), "dddd dd mmmm") & " à 17h30" & " au " & Format(Sheets(Sheets.Count).Range("B10"), "dddd dd mmmm") & " : " & Garage6
End If

Le résultat est obtenu mais peut-on optimiser ce bloc ?

Merci de votre aide Cibleo
 

Pièces jointes

Re : Optimiser un bloc Find

Salut Cibleo 😉

Toujours dans tes fameux tableaux !?

Tu trouveras ci-joint ton fichier en V1 avec le code optimisé sans utilisation de tableaux
Test pour voir la rapidité d'éxécution de la création de tes feuilles .... tu vas voir 😉

A+
 

Pièces jointes

Re : Optimiser un bloc Find

Bonjour à tous 🙂
Salut Bruno 🙂

Effectivement, c'est beaucoup plus limpide.
La boucle For VDate = DebDate To FinDate Step 7 fallait y penser.

Cela va m'ouvrir d'autres perspectives : réaliser des tableaux sur 2, 3 voire 4 semaines avec comme date de départ n'importe quel jour de la semaine, voilà une idée qu'elle est lumineuse.
Personnellement, je n'ai jamais trouvé d'exemples de création de feuilles basé sur cette idée.
On en revient toujours à la création de plannings hebdomadaires (du lundi au dimanche) ou des plannings mensuels (du 1er au 31)

T'es vraiment génial Bruno 😉, je garde cet exemple bien au chaud.

Merci aussi pour le bouton joliment dessiné et la fonction personnalisée définissant le N° de semaine.
Je vais reprendre ton fichier pour y colorier les périodes vacances scolaires zone B et zone C comme demandé dans mon précédent fil.
Si problème, je reviens.

Au plaisir Bruno
Cibleo
 
Re : Optimiser un bloc Find

Bonsoir le forum,
Bonsoir Bruno,

J'aimerais revenir sur le bloc If...ElseIf...End If

VB:
If VSemDeb >= ShtG.Range("A" & LigG) And VSemDeb < ShtG.Range("B" & LigG) Then
Sheets(Nom).Range("C12") = "du " & Format(VSemDeb, "dddd dd mmmm") & " au " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " : " & ShtG.Range("C" & LigG)
Sheets(Nom).Range("C13") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & ShtG.Range("C" & LigG + 1)
Sheets(Nom).Range("C14") = "du " & Format(VSemDeb, "dddd dd mmmm") & " au " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " : " & ShtG.Range("D" & LigG)
Sheets(Nom).Range("C15") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & ShtG.Range("D" & LigG + 1)
Sheets(Nom).Range("C16") = "du " & Format(VSemDeb, "dddd dd mmmm") & " au " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " : " & ShtG.Range("E" & LigG)
Sheets(Nom).Range("C17") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & ShtG.Range("E" & LigG + 1)
LigG = LigG + 1
ElseIf VSemFin < ShtG.Range("B" & LigG) Then
Sheets(Nom).Range("C13") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & ShtG.Range("C" & LigG)
Sheets(Nom).Range("C15") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & ShtG.Range("D" & LigG)
Sheets(Nom).Range("C17") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & ShtG.Range("E" & LigG)
End If

Je l'ai légèrement modifié dans le fichier joint, mais seule la feuille "Semaine 23 mai 11 - 29 mai 11 affiche le résultat souhaité dans la plage C12:C17
A partir de la feuille "Semaine 30 mai 11 - 05 juin 11, rien n'est mentionné dans cette plage, puisque les garages de garde ne sont plus définis à partir de cette date dans la feuille "Garagistes".

Néanmoins, j'aimerais faire figurer la mention "non définie" dans C12:C17
exemple : du Lundi 30 mai au vendredi 03 juin à 17h30 : non définie

Pouvez-vous m'aider une nouvelle fois, je suis en train de criser sur le If...ElseIf...End If 🙁

Bonne soirée Cibleo
 

Pièces jointes

Dernière édition:
Re : Optimiser un bloc Find

Bonjour,

pas tout suivi, mais peut être un simple "else" si n'a répondu à aucun des critères précédants :
Code:
If condition1 Then
    action1
    ElseIf condition2 Then action2
Else
    action3
End If

bonne journée
@+
 
Re : Optimiser un bloc Find

Bonsoir Pierrot 🙂

Tout simplement, je ferais mieux de réviser mes classiques 🙄

Merci Pierrot

VB:
ElseIf VSemFin < ShtG.Range("B" & LigG) Then
Sheets(Nom).Range("C13") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & ShtG.Range("C" & LigG)
Sheets(Nom).Range("C15") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & ShtG.Range("D" & LigG)
Sheets(Nom).Range("C17") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & ShtG.Range("E" & LigG)
Else
Sheets(Nom).Range("C12") = "du " & Format(VSemDeb, "dddd dd mmmm") & " au " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " : " & "Non définie"
Sheets(Nom).Range("C13") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & "Non définie"
Sheets(Nom).Range("C14") = "du " & Format(VSemDeb, "dddd dd mmmm") & " au " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " : " & "Non définie"
Sheets(Nom).Range("C15") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & "Non définie"
Sheets(Nom).Range("C16") = "du " & Format(VSemDeb, "dddd dd mmmm") & " au " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " : " & "Non définie"
Sheets(Nom).Range("C17") = "du " & Format(VSemFin - 2, "dddd dd mmmm") & " à 17h30" & " au " & Format(VSemFin, "dddd dd mmmm") & " : " & "Non définie"
End If
End If
Cibleo
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
359
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
247
Réponses
10
Affichages
477
Retour