Excel VBA - Conditions multiples

  • Auteur de la discussion Guillaume831
  • Date de début

Guillaume831

Nouveau membre
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!

Code:
Sub Dispo()
Dim Lg%, i%, F%, j%
Dim Jh%, Cpt%
'donne les dispos des profs
        Application.ScreenUpdating = False
        Lg = Range("S65536").End(xlUp).Row
        Range("S6").ClearContents 'S6 est la cellule où s'affiche le nom des profs dispos
        For F = 6 To Worksheets.Count 'onglets des profs
            With Worksheets(F)
            'T3 est la cellule qui indique l'heure de début de la disponibilité
            'U3 est la cellule qui indique l'heure de fin de la disponibilité
                    j = Application.Match(Cells(3, "S"), .Rows(3), 0) 'S3 est la cellule qui indique le jour qui m'intéresse
                For Jh = 4 To 31 'lignes dans les onglets profs, qui représentent les horaires ,soit de 7h à 20h30
                    If .Cells(Jh, "B") >= Cells(3, "T") And _
                        .Cells(Jh, "B") <= Cells(3, "U") And _
                        .Cells(Jh, j) = "" And _
                        .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.
                            Cpt = 0
                            Exit For
                    Else
                        Cpt = Cpt + 1
                    End If
                Next Jh
                    If Cpt = 0 Then Cells(6, "S") = Cells(6, "S") & .Range("E1") & ";"
            End With
        Next F

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

Merci encore!
 

zeb

Modérateur
Code:
Dim Lg%, i%, F%, j% ' // <-- Old fashion :^D
Dim Jh%, Cpt%

'donne les dispos des profs
Application.ScreenUpdating = False ' // <-- Où est la remise à True ?
Lg = Range("S65536" ).End(xlUp).Row
Range("S6" ).ClearContents 'S6 est la cellule où s'affiche le nom des profs dispos
For F = 6 To Worksheets.Count 'onglets des profs
	With Worksheets(F)
		'T3 est la cellule qui indique l'heure de début de la disponibilité
		'U3 est la cellule qui indique l'heure de fin de la disponibilité
		j = Application.Match(Cells(3, "S" ), .Rows(3), 0) 'S3 est la cellule qui indique le jour qui m'intéresse 
		
		' // Cells(3, "S" ) c'est Range("S3"), quoi !... :^D
		' // Attention, elle appartient non pas à Worksheets(F) mais à la feuille courante puisqu'il n'y a pas de point devant
		
		For Jh = 4 To 31 'lignes dans les onglets profs, qui représentent les horaires ,soit de 7h à 20h30
			If .Cells(Jh, "B" ) >= Cells(3, "T" ) And _
			   .Cells(Jh, "B" ) <= Cells(3, "U" ) And _
			   .Cells(Jh, j) = "" And _
			   .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.
				Cpt = 0
				Exit For
			Else
				Cpt = Cpt + 1
			End If
		Next Jh '// <-- Very old fashion. Retire ce truc. C'est l'indentation qui doit te repérer
		If Cpt = 0 Then Cells(6, "S" ) = Cells(6, "S" ) & .Range("E1" ) & ";"
	End With
Next F
Quelques commentaires dans le code.

Je pense qu'une séquence de débogage s'impose. Lis ce si tu ne maîtrises pas trop cette phase de la programmation.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 160
Messages
6 718 530
Membres
1 586 446
Dernier membre
c.bac
Partager cette page
Haut