J'utilise excel pour filtrer de diverses mani=E8res un=20
horaire d'occupation des locaux
Mais il me manque un r=E9sultat que je ne parviens pas =E0=20
construire.
Soit une feuille par jour de la semaine (Lun, Mar, Mer...)
H1 =E0 H8 sont les 8 colonnes qui repr=E9sentent les heures
Chaque ligne contient un groupe d'=E9tudiants
A l'intersection, un local (A1, A2, .. B1, B2, ....)
Et dans une feuille DATA la liste compl=E8te de mes locaux
Comment pourrais-je faire appara=EEtre en bas de chaque=20
colonne (H1...H8)le liste des locaux libres pour chacune=20
des heures concern=E9es
Ainsi dans le bas de la colonne H1 le lundi je veux voir=20
appara=EEtre A4, C2, D1 qui sont par exemple les 3 locaux=20
de ma liste qui ne sont pas r=E9serv=E9s dans les lignes=20
pr=E9c=E9dentes de cette m=EAme colonne
Ta procédure fonctionne parfaitement. Je viens de comprendre ce qui pose problème dans mes données J'utilise un même local pour 2 ou 3 groupes différents à certaines heures. Le REDIM étant exécuté sur le tableau des salles, on tombe hors RANGE Je dois pouvoir arranger ça Encore Merci pour ton travail
WiP
| Il t'écrit toute la liste car tu as modifié la boucle For Next. | Je n'ai pas réussi à faire autrement. (pas beaucoup cherché non plus). | | Le principe : les lignes de la zone saisie de la colonne où est le | curseur sont parcourues. Si elles contiennent une donnée qui se trouve | dans la liste salles, le numéro de la ligne (salle)est mémorisé dans | tableau. | En fin de boucle, le tableau est trié en ordre décroissant de façon à | avoir les données numériques en premier. | Dans la boucle For Next, on commence par la dernière ligne des salles. | Si elle est présente, on passe, sinon, on l'écrit ? | | dans l'autre sens, on devrait pouvoir le faire mais je n'ai pas eu | envie de me casser la tête. | | Damien
Bonjour *Damien Kergosien*
Ta procédure fonctionne parfaitement.
Je viens de comprendre ce qui pose problème dans mes données
J'utilise un même local pour 2 ou 3 groupes différents à certaines heures.
Le REDIM étant exécuté sur le tableau des salles, on tombe hors RANGE
Je dois pouvoir arranger ça
Encore Merci pour ton travail
WiP
| Il t'écrit toute la liste car tu as modifié la boucle For Next.
| Je n'ai pas réussi à faire autrement. (pas beaucoup cherché non plus).
|
| Le principe : les lignes de la zone saisie de la colonne où est le
| curseur sont parcourues. Si elles contiennent une donnée qui se trouve
| dans la liste salles, le numéro de la ligne (salle)est mémorisé dans
| tableau.
| En fin de boucle, le tableau est trié en ordre décroissant de façon à
| avoir les données numériques en premier.
| Dans la boucle For Next, on commence par la dernière ligne des salles.
| Si elle est présente, on passe, sinon, on l'écrit ?
|
| dans l'autre sens, on devrait pouvoir le faire mais je n'ai pas eu
| envie de me casser la tête.
|
| Damien
Ta procédure fonctionne parfaitement. Je viens de comprendre ce qui pose problème dans mes données J'utilise un même local pour 2 ou 3 groupes différents à certaines heures. Le REDIM étant exécuté sur le tableau des salles, on tombe hors RANGE Je dois pouvoir arranger ça Encore Merci pour ton travail
WiP
| Il t'écrit toute la liste car tu as modifié la boucle For Next. | Je n'ai pas réussi à faire autrement. (pas beaucoup cherché non plus). | | Le principe : les lignes de la zone saisie de la colonne où est le | curseur sont parcourues. Si elles contiennent une donnée qui se trouve | dans la liste salles, le numéro de la ligne (salle)est mémorisé dans | tableau. | En fin de boucle, le tableau est trié en ordre décroissant de façon à | avoir les données numériques en premier. | Dans la boucle For Next, on commence par la dernière ligne des salles. | Si elle est présente, on passe, sinon, on l'écrit ? | | dans l'autre sens, on devrait pouvoir le faire mais je n'ai pas eu | envie de me casser la tête. | | Damien
WiP
Bonjour *Jean-Claude*
Impeccable. Rien à redire Et ça règle du même coup mon problème de local utilisé par 2 ou 3 groupes en même temps et de colonnes non contigües Un tout grand merci à toi
WiP
| Salut, | En remplissant les tableux indice après indice ça marche | A toi de voir | A+ | | Public Function LocauxVides(LocauxUtilisés As Range) | Dim i As Integer | Dim j As Integer | Dim tabLocauxPossibles() As Variant | Dim tabLocauxUtilisés() As Variant | | ReDim tabLocauxPossibles(Range("DATA!LocauxPossibles").Rows.Count) | For i = LBound(tabLocauxPossibles) To UBound(tabLocauxPossibles) - 1 | tabLocauxPossibles(i) | Sheets("DATA").Cells(Range("LocauxPossibles").Row, | Range("LocauxPossibles").Column).Offset(i) | Next i | | ReDim tabLocauxUtilisés(Range(LocauxUtilisés.Address).Rows.Count) | For i = LBound(tabLocauxUtilisés) To UBound(tabLocauxUtilisés) - 1 | tabLocauxUtilisés(i) = Cells(Range(LocauxUtilisés.Address).Row, | Range(LocauxUtilisés.Address).Column).Offset(i) | Next i | | For i = LBound(tabLocauxPossibles) To UBound(tabLocauxPossibles) | For j = LBound(tabLocauxUtilisés) To UBound(tabLocauxUtilisés) | If tabLocauxPossibles(i) = tabLocauxUtilisés(j) Then | tabLocauxPossibles(i) = "": Exit For | Next j | Next i | | For i = LBound(tabLocauxPossibles) To UBound(tabLocauxPossibles) | If tabLocauxPossibles(i) <> "" Then | If tmp = "" Then | tmp = tabLocauxPossibles(i) | Else | tmp = tmp & " - " & tabLocauxPossibles(i) | End If | End If | Next i | LocauxVides = tmp | End Function
Bonjour *Jean-Claude*
Impeccable. Rien à redire
Et ça règle du même coup mon problème de local utilisé par 2 ou 3 groupes en même temps et de colonnes non contigües
Un tout grand merci à toi
WiP
| Salut,
| En remplissant les tableux indice après indice ça marche
| A toi de voir
| A+
|
| Public Function LocauxVides(LocauxUtilisés As Range)
| Dim i As Integer
| Dim j As Integer
| Dim tabLocauxPossibles() As Variant
| Dim tabLocauxUtilisés() As Variant
|
| ReDim tabLocauxPossibles(Range("DATA!LocauxPossibles").Rows.Count)
| For i = LBound(tabLocauxPossibles) To UBound(tabLocauxPossibles) - 1
| tabLocauxPossibles(i) | Sheets("DATA").Cells(Range("LocauxPossibles").Row,
| Range("LocauxPossibles").Column).Offset(i)
| Next i
|
| ReDim tabLocauxUtilisés(Range(LocauxUtilisés.Address).Rows.Count)
| For i = LBound(tabLocauxUtilisés) To UBound(tabLocauxUtilisés) - 1
| tabLocauxUtilisés(i) = Cells(Range(LocauxUtilisés.Address).Row,
| Range(LocauxUtilisés.Address).Column).Offset(i)
| Next i
|
| For i = LBound(tabLocauxPossibles) To UBound(tabLocauxPossibles)
| For j = LBound(tabLocauxUtilisés) To UBound(tabLocauxUtilisés)
| If tabLocauxPossibles(i) = tabLocauxUtilisés(j) Then
| tabLocauxPossibles(i) = "": Exit For
| Next j
| Next i
|
| For i = LBound(tabLocauxPossibles) To UBound(tabLocauxPossibles)
| If tabLocauxPossibles(i) <> "" Then
| If tmp = "" Then
| tmp = tabLocauxPossibles(i)
| Else
| tmp = tmp & " - " & tabLocauxPossibles(i)
| End If
| End If
| Next i
| LocauxVides = tmp
| End Function
Impeccable. Rien à redire Et ça règle du même coup mon problème de local utilisé par 2 ou 3 groupes en même temps et de colonnes non contigües Un tout grand merci à toi
WiP
| Salut, | En remplissant les tableux indice après indice ça marche | A toi de voir | A+ | | Public Function LocauxVides(LocauxUtilisés As Range) | Dim i As Integer | Dim j As Integer | Dim tabLocauxPossibles() As Variant | Dim tabLocauxUtilisés() As Variant | | ReDim tabLocauxPossibles(Range("DATA!LocauxPossibles").Rows.Count) | For i = LBound(tabLocauxPossibles) To UBound(tabLocauxPossibles) - 1 | tabLocauxPossibles(i) | Sheets("DATA").Cells(Range("LocauxPossibles").Row, | Range("LocauxPossibles").Column).Offset(i) | Next i | | ReDim tabLocauxUtilisés(Range(LocauxUtilisés.Address).Rows.Count) | For i = LBound(tabLocauxUtilisés) To UBound(tabLocauxUtilisés) - 1 | tabLocauxUtilisés(i) = Cells(Range(LocauxUtilisés.Address).Row, | Range(LocauxUtilisés.Address).Column).Offset(i) | Next i | | For i = LBound(tabLocauxPossibles) To UBound(tabLocauxPossibles) | For j = LBound(tabLocauxUtilisés) To UBound(tabLocauxUtilisés) | If tabLocauxPossibles(i) = tabLocauxUtilisés(j) Then | tabLocauxPossibles(i) = "": Exit For | Next j | Next i | | For i = LBound(tabLocauxPossibles) To UBound(tabLocauxPossibles) | If tabLocauxPossibles(i) <> "" Then | If tmp = "" Then | tmp = tabLocauxPossibles(i) | Else | tmp = tmp & " - " & tabLocauxPossibles(i) | End If | End If | Next i | LocauxVides = tmp | End Function