Bonjour à tous
J'utilise excel pour filtrer de diverses manières un
horaire d'occupation des locaux
Mais il me manque un résultat que je ne parviens pas à
construire.
Soit une feuille par jour de la semaine (Lun, Mar, Mer...)
H1 à H8 sont les 8 colonnes qui représentent les heures
Chaque ligne contient un groupe d'étudiants
A l'intersection, un local (A1, A2, .. B1, B2, ....)
Et dans une feuille DATA la liste complète de mes locaux
Comment pourrais-je faire apparaître en bas de chaque
colonne (H1...H8)le liste des locaux libres pour chacune
des heures concernées
Ainsi dans le bas de la colonne H1 le lundi je veux voir
apparaître A4, C2, D1 qui sont par exemple les 3 locaux
de ma liste qui ne sont pas réservés dans les lignes
précédentes de cette même colonne
J'espère me faire à peu près comprendre
Merci à tous ceux qui essaieront de m'aider.
WiP
Bonjour à tous
J'utilise excel pour filtrer de diverses manières un
horaire d'occupation des locaux
Mais il me manque un résultat que je ne parviens pas à
construire.
Soit une feuille par jour de la semaine (Lun, Mar, Mer...)
H1 à H8 sont les 8 colonnes qui représentent les heures
Chaque ligne contient un groupe d'étudiants
A l'intersection, un local (A1, A2, .. B1, B2, ....)
Et dans une feuille DATA la liste complète de mes locaux
Comment pourrais-je faire apparaître en bas de chaque
colonne (H1...H8)le liste des locaux libres pour chacune
des heures concernées
Ainsi dans le bas de la colonne H1 le lundi je veux voir
apparaître A4, C2, D1 qui sont par exemple les 3 locaux
de ma liste qui ne sont pas réservés dans les lignes
précédentes de cette même colonne
J'espère me faire à peu près comprendre
Merci à tous ceux qui essaieront de m'aider.
WiP
Bonjour à tous
J'utilise excel pour filtrer de diverses manières un
horaire d'occupation des locaux
Mais il me manque un résultat que je ne parviens pas à
construire.
Soit une feuille par jour de la semaine (Lun, Mar, Mer...)
H1 à H8 sont les 8 colonnes qui représentent les heures
Chaque ligne contient un groupe d'étudiants
A l'intersection, un local (A1, A2, .. B1, B2, ....)
Et dans une feuille DATA la liste complète de mes locaux
Comment pourrais-je faire apparaître en bas de chaque
colonne (H1...H8)le liste des locaux libres pour chacune
des heures concernées
Ainsi dans le bas de la colonne H1 le lundi je veux voir
apparaître A4, C2, D1 qui sont par exemple les 3 locaux
de ma liste qui ne sont pas réservés dans les lignes
précédentes de cette même colonne
J'espère me faire à peu près comprendre
Merci à tous ceux qui essaieront de m'aider.
WiP
Dans la feuille DATA, j'ai nommé la zone des salles "salles"
Dans la feuille de saisie,
colonne A, à partir de la ligne 2, les noms des groupes
ligne 1, de B1 à I1, les heures (H1 à H8)
Dans le module de chaque feuille jour :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim col As Integer, lig As Integer
Dim tableau(), trouvé
Dim i As Integer, compteur As Integer
Dim présent As Integer, posEcrire As Integer
' lig = numéro de la dernière ligne remplie
lig = Me.Range("A500").End(xlUp).Row
If Not Intersect(Target, Range("B2").Resize(lig - 1, 8)) Is Nothing
Then
col = Target.Column - 1
ReDim tableau(1 To Sheets("DATA").Range("salles").Rows.Count)
For i = 1 To lig
If Range("A1").Offset(i, col) <> "" Then
trouvé = Application.Match([A1].Offset(i, col), _
Sheets("DATA").Range("salles"), 0)
If Not IsError(trouvé) Then
compteur = compteur + 1
tableau(compteur) = Application.Match([A1].Offset(i, col), _
Sheets("DATA").Range("salles"), 0)
End If
End If
Next
tableau = Sort(tableau, False)
présent = 1
posEcrire = 1
For i = UBound(tableau) To 1 Step -1
If i = tableau(présent) Then
présent = présent + 1
Else
Me.Cells(lig + 1 + posEcrire, col + 1).Formula = i
posEcrire = posEcrire + 1
End If
Next
Me.Cells(lig + 1 + posEcrire, col + 1).ClearContents
End If
End Sub
dans un module standart :
Function Sort(ToSort As Variant, Optional SortAscending As Boolean >> True)
' Chris Rae's VBA Code Archive - http://chrisrae.com/vba
' By Chris Rae, 19/5/99. My thanks to
' Will Rickards and Roemer Lievaart for some fixes.
Dim AnyChanges As Boolean
Dim BubbleSort As Long
Dim SwapFH As Variant
Do
AnyChanges = False
For BubbleSort = LBound(ToSort) To UBound(ToSort) - 1
If (ToSort(BubbleSort) > ToSort(BubbleSort + 1) And SortAscending) _
Or (ToSort(BubbleSort) < ToSort(BubbleSort + 1) And Not SortAscending)
_
Then
' These two need to be swapped
SwapFH = ToSort(BubbleSort)
ToSort(BubbleSort) = ToSort(BubbleSort + 1)
ToSort(BubbleSort + 1) = SwapFH
AnyChanges = True
End If
Next BubbleSort
Loop Until Not AnyChanges
Sort = ToSort
End Function
La liste des salles disponibles s'actualise chaque fois que tu
déplaces ta sélection
Bonne journée
Dans la feuille DATA, j'ai nommé la zone des salles "salles"
Dans la feuille de saisie,
colonne A, à partir de la ligne 2, les noms des groupes
ligne 1, de B1 à I1, les heures (H1 à H8)
Dans le module de chaque feuille jour :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim col As Integer, lig As Integer
Dim tableau(), trouvé
Dim i As Integer, compteur As Integer
Dim présent As Integer, posEcrire As Integer
' lig = numéro de la dernière ligne remplie
lig = Me.Range("A500").End(xlUp).Row
If Not Intersect(Target, Range("B2").Resize(lig - 1, 8)) Is Nothing
Then
col = Target.Column - 1
ReDim tableau(1 To Sheets("DATA").Range("salles").Rows.Count)
For i = 1 To lig
If Range("A1").Offset(i, col) <> "" Then
trouvé = Application.Match([A1].Offset(i, col), _
Sheets("DATA").Range("salles"), 0)
If Not IsError(trouvé) Then
compteur = compteur + 1
tableau(compteur) = Application.Match([A1].Offset(i, col), _
Sheets("DATA").Range("salles"), 0)
End If
End If
Next
tableau = Sort(tableau, False)
présent = 1
posEcrire = 1
For i = UBound(tableau) To 1 Step -1
If i = tableau(présent) Then
présent = présent + 1
Else
Me.Cells(lig + 1 + posEcrire, col + 1).Formula = i
posEcrire = posEcrire + 1
End If
Next
Me.Cells(lig + 1 + posEcrire, col + 1).ClearContents
End If
End Sub
dans un module standart :
Function Sort(ToSort As Variant, Optional SortAscending As Boolean >> True)
' Chris Rae's VBA Code Archive - http://chrisrae.com/vba
' By Chris Rae, 19/5/99. My thanks to
' Will Rickards and Roemer Lievaart for some fixes.
Dim AnyChanges As Boolean
Dim BubbleSort As Long
Dim SwapFH As Variant
Do
AnyChanges = False
For BubbleSort = LBound(ToSort) To UBound(ToSort) - 1
If (ToSort(BubbleSort) > ToSort(BubbleSort + 1) And SortAscending) _
Or (ToSort(BubbleSort) < ToSort(BubbleSort + 1) And Not SortAscending)
_
Then
' These two need to be swapped
SwapFH = ToSort(BubbleSort)
ToSort(BubbleSort) = ToSort(BubbleSort + 1)
ToSort(BubbleSort + 1) = SwapFH
AnyChanges = True
End If
Next BubbleSort
Loop Until Not AnyChanges
Sort = ToSort
End Function
La liste des salles disponibles s'actualise chaque fois que tu
déplaces ta sélection
Bonne journée
Dans la feuille DATA, j'ai nommé la zone des salles "salles"
Dans la feuille de saisie,
colonne A, à partir de la ligne 2, les noms des groupes
ligne 1, de B1 à I1, les heures (H1 à H8)
Dans le module de chaque feuille jour :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim col As Integer, lig As Integer
Dim tableau(), trouvé
Dim i As Integer, compteur As Integer
Dim présent As Integer, posEcrire As Integer
' lig = numéro de la dernière ligne remplie
lig = Me.Range("A500").End(xlUp).Row
If Not Intersect(Target, Range("B2").Resize(lig - 1, 8)) Is Nothing
Then
col = Target.Column - 1
ReDim tableau(1 To Sheets("DATA").Range("salles").Rows.Count)
For i = 1 To lig
If Range("A1").Offset(i, col) <> "" Then
trouvé = Application.Match([A1].Offset(i, col), _
Sheets("DATA").Range("salles"), 0)
If Not IsError(trouvé) Then
compteur = compteur + 1
tableau(compteur) = Application.Match([A1].Offset(i, col), _
Sheets("DATA").Range("salles"), 0)
End If
End If
Next
tableau = Sort(tableau, False)
présent = 1
posEcrire = 1
For i = UBound(tableau) To 1 Step -1
If i = tableau(présent) Then
présent = présent + 1
Else
Me.Cells(lig + 1 + posEcrire, col + 1).Formula = i
posEcrire = posEcrire + 1
End If
Next
Me.Cells(lig + 1 + posEcrire, col + 1).ClearContents
End If
End Sub
dans un module standart :
Function Sort(ToSort As Variant, Optional SortAscending As Boolean >> True)
' Chris Rae's VBA Code Archive - http://chrisrae.com/vba
' By Chris Rae, 19/5/99. My thanks to
' Will Rickards and Roemer Lievaart for some fixes.
Dim AnyChanges As Boolean
Dim BubbleSort As Long
Dim SwapFH As Variant
Do
AnyChanges = False
For BubbleSort = LBound(ToSort) To UBound(ToSort) - 1
If (ToSort(BubbleSort) > ToSort(BubbleSort + 1) And SortAscending) _
Or (ToSort(BubbleSort) < ToSort(BubbleSort + 1) And Not SortAscending)
_
Then
' These two need to be swapped
SwapFH = ToSort(BubbleSort)
ToSort(BubbleSort) = ToSort(BubbleSort + 1)
ToSort(BubbleSort + 1) = SwapFH
AnyChanges = True
End If
Next BubbleSort
Loop Until Not AnyChanges
Sort = ToSort
End Function
La liste des salles disponibles s'actualise chaque fois que tu
déplaces ta sélection
Bonne journée
Bonjour *Damien Kergosien*
Superbe Damien. Même le service après-vente :)
J'ai modifié ainsi la première boucle For Next sinon l'indice dépasse la
longueur du tableau
Et la boucle finale qui écrivait en commençant par la fin
Il me reste un problème à régler. Il m'écrit toute la liste et pas seulement
les salles libres. Je cherche
WiP
Bonjour *Damien Kergosien*
Superbe Damien. Même le service après-vente :)
J'ai modifié ainsi la première boucle For Next sinon l'indice dépasse la
longueur du tableau
Et la boucle finale qui écrivait en commençant par la fin
Il me reste un problème à régler. Il m'écrit toute la liste et pas seulement
les salles libres. Je cherche
WiP
Bonjour *Damien Kergosien*
Superbe Damien. Même le service après-vente :)
J'ai modifié ainsi la première boucle For Next sinon l'indice dépasse la
longueur du tableau
Et la boucle finale qui écrivait en commençant par la fin
Il me reste un problème à régler. Il m'écrit toute la liste et pas seulement
les salles libres. Je cherche
WiP