VBA Gestion Hopital

Signaler
Messages postés
1
Date d'inscription
samedi 25 avril 2009
Statut
Membre
Dernière intervention
25 avril 2009
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour, je sais qu'il existe déjà plusieurs questions à ce sujet, mais je n'ai pas trouvé de réponse à ma question. Je dois gérer une liste d'attente en fonction de l'urgence des blessures. Le degré de blessure 1 étant le plus urgent, les gens ayant ce type de blessures passent en premier, mais toujours dans leur ordre d'arrivée. J'ai tenté quelquechose, mais ca ne fonctionne pas:

Private Type Patient
NumArrive As Integer
Nom As String
Prenom As String
NumSS As Integer
Degre As Integer
End Type



Const TMAX = 50
Private Type TFile
liste(TMAX) As Patient
top As Integer
End Type




Private Function estPleine(f As TFile) As Boolean
If f.top = TMAX Then
estPleine = True
Else
estPleine = False
End If
End Function




Private Function estVide(f As TFile) As Boolean
If f.top = 0 Then
estVide = True
Else
estVide = False
End If
End Function




Private Sub enfiler(e As Patient, f As TFile)
If (Not estPleine(f)) Then
f.top = f.top + 1
f.liste(f.top) = e
End If
End Sub




Private Function tete(f As TFile) As Patient
If (Not estVide(f)) Then
tete = f.liste(1)
End If
End Function




Private Sub init(f As TFile)
f.top = 0
End Sub




Private Sub defiler(f As TFile)
If (Not estVide(f)) Then
For i = 1 To f.top - 1
f.liste(i) = f.liste(i + 1)
Next
f.top = f.top - 1
End If
End Sub




Sub GestionUrgences2()
Dim f1 As TFile
Dim f2 As TFile
Dim f3 As TFile
Dim i As Integer
Dim j As Integer
Dim h As Integer
Dim p As Patient
Call init(f1)
Call init(f2)
Call init(f3)
i = 1
While (Feuil1.Cells(i, 1) <> Empty)
p.NumArrive = Feuil1.Cells(i, 1)
p.Nom = Feuil1.Cells(i, 2)
p.Prenom = Feuil1.Cells(i, 3)
p.NumSS = Feuil1.Cells(i, 4)
p.Degre = Feuil1.Cells(i, 5)
If (Feuil1.Cells(i, 5) = 1) Then
Call enfiler(p, f1)
ElseIf (Feuil1.Cells(i, 5) = 2) Then
Call enfiler(p, f2)
ElseIf (Feuil1.Cells(i, 5) = 3) Then
Call enfiler(p, f3)
End If
i = i + 1
Wend




While (Not estVide(f1)) And (Not estVide(f2)) And (Not estVide(f3))
For i = 1 To f1.top
Feuil2.Cells(i, 1) = tete(f1).NumArrive
Feuil2.Cells(i, 2) = tete(f1).Nom
Feuil2.Cells(i, 3) = tete(f1).Prenom
Feuil2.Cells(i, 4) = tete(f1).NumSS
Feuil2.Cells(i, 5) = tete(f1).Degre
Call defiler(f1)
Next i
For j = f1.top + 1 To f1.top + f2.top
Feuil2.Cells(j, 1) = tete(f2).NumArrive
Feuil2.Cells(j, 2) = tete(f2).Nom
Feuil2.Cells(j, 3) = tete(f2).Prenom
Feuil2.Cells(j, 4) = tete(f2).NumSS
Feuil2.Cells(j, 5) = tete(f2).Degre
Call defiler(f2)
Next j
For h = f1.top + f2.top + 1 To f1.top + f2.top + f3.top
Feuil2.Cells(h, 1) = tete(f3).NumArrive
Feuil2.Cells(h, 2) = tete(f3).Nom
Feuil2.Cells(h, 3) = tete(f3).Prenom
Feuil2.Cells(h, 4) = tete(f3).NumSS
Feuil2.Cells(h, 5) = tete(f3).Degre
Call defiler(f3)
Next h
Wend
End Sub
 

J'espère que quelqu'un pourra m'aider!

Merci

1 réponse

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Première réaction : je vais éviter les urgences de Bordeau ! (blague)

Quel est le rapport entre le code fourni et ta question ?
On ne connait pas la signification de tes cellules, alors difficile de l'analyser.

Si tes "patients" sont listés sur une des feuilles (1 ligne par patient), le plus simple serait peut-être de demander à Excel de trier les données par ordre d'urgence (inverse) puis de la date en second critère de tri :
- Sélectionne toutes les cellules de tes patients
- Menu "Données" + "Trier" et définis tes critères

Si tu as besoin de le faire par code, enregistre une macro pendant que tu fais la manip à la main, tu auras le code.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)