Se connecter avec
S'enregistrer | Connectez-vous

Excel VBA - Conditions multiples

Dernière réponse : dans Programmation

Bonjour à tous,

Je vous présente mon problème.
Je suis sur la création d'un emploi du temps complexe. Le fichier Excel se compose en deux parties : la première composée d'onglets administratifs et de réglages, dont un qui s'appelle "Cours". Cet onglet présente un tableau, dont chaque ligne représente un cours avec tous les facteurs qui lui sont liés (jours, heures de fin et de début et nom du professeur).
Les onglets postérieurs représentent les professeurs, chaque prof ayant son propre onglet.

Mon problème réside en la création d'une macro "Qui est disponible?". En appuyant sur le bouton de l'onglet "Cours", après avoir défini le jour et la plage horaire, la macro me trouve les professeurs disponibles selon les critères précédemment définis.

Voici la partie de mon code qui je pense est la source du problème. Ca ne marche pas tout le temps, si vous pouviez m'aider... Merci!

  1. Sub Dispo()
  2. Dim Lg%, i%, F%, j%
  3. Dim Jh%, Cpt%
  4. 'donne les dispos des profs
  5. Application.ScreenUpdating = False
  6. Lg = Range("S65536").End(xlUp).Row
  7. Range("S6").ClearContents 'S6 est la cellule où s'affiche le nom des profs dispos
  8. For F = 6 To Worksheets.Count 'onglets des profs
  9. With Worksheets(F)
  10. 'T3 est la cellule qui indique l'heure de début de la disponibilité
  11. 'U3 est la cellule qui indique l'heure de fin de la disponibilité
  12. j = Application.Match(Cells(3, "S"), .Rows(3), 0) 'S3 est la cellule qui indique le jour qui m'intéresse
  13. For Jh = 4 To 31 'lignes dans les onglets profs, qui représentent les horaires ,soit de 7h à 20h30
  14. If .Cells(Jh, "B") >= Cells(3, "T") And _
  15. .Cells(Jh, "B") <= Cells(3, "U") And _
  16. .Cells(Jh, j) = "" And _
  17. .Cells(Jh, j).Interior.ColorIndex = xlNone Then 'les deux dernières conditions éliminent du résultat attendu les profs qui sont occupés sur la plage horaire choisie - soit les cellules correspondantes contiennent du texte ou sont coloriées.
  18. Cpt = 0
  19. Exit For
  20. Else
  21. Cpt = Cpt + 1
  22. End If
  23. Next Jh
  24. If Cpt = 0 Then Cells(6, "S") = Cells(6, "S") & .Range("E1") & ";"
  25. End With
  26. Next F


Si mes explications ne vous paraissent pas nettes, informez m'en!

Merci encore!

Autres pages sur : excel vba conditions multiples

Lassé par la pub ? Créez un compte
Expert Programmation

  1. Dim Lg%, i%, F%, j% ' // <-- Old fashion :^D
  2. Dim Jh%, Cpt%
  3.  
  4. 'donne les dispos des profs
  5. Application.ScreenUpdating = False ' // <-- Où est la remise à True ?
  6. Lg = Range("S65536" ).End(xlUp).Row
  7. Range("S6" ).ClearContents 'S6 est la cellule où s'affiche le nom des profs dispos
  8. For F = 6 To Worksheets.Count 'onglets des profs
  9. With Worksheets(F)
  10. 'T3 est la cellule qui indique l'heure de début de la disponibilité
  11. 'U3 est la cellule qui indique l'heure de fin de la disponibilité
  12. j = Application.Match(Cells(3, "S" ), .Rows(3), 0) 'S3 est la cellule qui indique le jour qui m'intéresse
  13.  
  14. ' // Cells(3, "S" ) c'est Range("S3"), quoi !... :^D
  15. ' // Attention, elle appartient non pas à Worksheets(F) mais à la feuille courante puisqu'il n'y a pas de point devant
  16.  
  17. For Jh = 4 To 31 'lignes dans les onglets profs, qui représentent les horaires ,soit de 7h à 20h30
  18. If .Cells(Jh, "B" ) >= Cells(3, "T" ) And _
  19. .Cells(Jh, "B" ) <= Cells(3, "U" ) And _
  20. .Cells(Jh, j) = "" And _
  21. .Cells(Jh, j).Interior.ColorIndex = xlNone Then 'les deux dernières conditions éliminent du résultat attendu les profs qui sont occupés sur la plage horaire choisie - soit les cellules correspondantes contiennent du texte ou sont coloriées.
  22. Cpt = 0
  23. Exit For
  24. Else
  25. Cpt = Cpt + 1
  26. End If
  27. Next Jh '// <-- Very old fashion. Retire ce truc. C'est l'indentation qui doit te repérer
  28. If Cpt = 0 Then Cells(6, "S" ) = Cells(6, "S" ) & .Range("E1" ) & ";"
  29. End With
  30. Next F
Quelques commentaires dans le code.

Je pense qu'une séquence de débogage s'impose. Lis ce topic si tu ne maîtrises pas trop cette phase de la programmation.
Lassé par la pub ? Créez un compte