Compare
Je suis en train de gerer un Planning, et j'aimerai qu'il n'y ait pas 2 fois le même nom dans la même ligne
"Un medecin ne peut pas prendre 2 RDV à la même heure"
Dim nomMedecin As String, iteration As Integer, chaineCellule As String, ligneCellule As Integer
' nomMedecin = Split(ActiveCell, vbLf)(o) 'ca ca marche
ligneCellule = ActiveCell.Row
nomMedecin = ComboBox1.Value
'chaineCellule = Split(Cells(ligneCellule, 4), vbLf)(0)
'MsgBox chaineCellule
'Select Case ActiveCell.Column
'Case Is = 3
'If Split(Cells(ligneCellule, 4), vbLf)(0) = nomMedecin Then
' MsgBox "Le médecin a déjà un rendez-vous à ce créneau horaire"
'Exit Sub
'End If
'If Split(Cells(ligneCellule, 5), vbLf)(0) = nomMedecin Then
' MsgBox "Le médecin a déjà un rendez-vous à ce créneau horaire"
' Exit Sub
'End If
'Case Is = 4
'If Split(Cells(ligneCellule, 3), vbLf)(0) = nomMedecin Then
' MsgBox "Le médecin a déjà un rendez-vous à ce créneau horaire"
' Exit Sub
'End If
'If Split(Cells(ligneCellule, 5), vbLf)(0) = nomMedecin Then
' MsgBox "Le médecin a déjà un rendez-vous à ce créneau horaire"
' Exit Sub
'End If
'Case Is = 5
'If Split(Cells(ligneCellule, 3), vbLf)(0) = nomMedecin Then
' MsgBox "Le médecin a déjà un rendez-vous à ce créneau horaire"
' Exit Sub
'End If
'If Split(Cells(ligneCellule, 4), vbLf)(0) = nomMedecin Then
' MsgBox "Le médecin a déjà un rendez-vous à ce créneau horaire"
' Exit Sub
'End If
'End SelectJe vous joins mon fichier pour que vous compreniez mieux
Bonjour
Une autre méthode (pas trop testé - je dois partir)
Remplaces ta macro
Private Sub Valider_Click()
Dim Ligne As Long
Dim PlageMedecin As Range
Ligne = ActiveCell.Row
If Range("C" & Ligne).Resize(1, 3).Find(what:=Me.ComboBox1, LookIn:=xlValues, lookat:=xlPart) Is Nothing Then
'A l'aide de .Find, on cherche la valeur du Medecin de la plage où sont écrits nos médecins
Set PlageMedecin = Sheets("Medecins").Range("A3:A20").Find(what:=Me.ComboBox1, LookIn:=xlValues, lookat:=xlWhole)
'On affecte dans la Cellule Active, le Medecin et le Patient Le petit mot clé vbCrLf nous permet en fait de passer à la ligne dans la meme cellule
With ActiveCell
.Value = ComboBox1.Value & vbCrLf & TextBox1.Value
.Interior.Color = PlageMedecin.Interior.Color
End With
With Sheets("rendezvous")
Ligne = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & Ligne) = Me.ComboBox1
.Range("B" & Ligne) = Me.TextBox1
.Range("C" & Ligne) = CDate(Range("A1"))
.Range("D" & Ligne) = CDate(Range("B" & ActiveCell.Row))
.Range("E" & Ligne) = "Salle " & ActiveCell.Column - 2
End With
Else
MsgBox "Un rendez-vous est déjà pris avec ce médecin à la même heure"
Exit Sub
End If
Unload Me
End SubMerci Beaucoup Bonzai !!!
Grâce à toi, nous avons presque terminé !
Cependant, une obscurité existe dans ce code,
Range("C" & Ligne).Resize(1, 3).Find(what:=Me.ComboBox1, LookIn:=xlValues, lookat:=xlPart)
Resize ça redimensionne les cellules, et on cherche la valeur du ComboBox1, c'est bien ça ? Par ailleurs, quelle difference entre LookIn et LookAt, que signifie xlPart et pourquoi avez vous rapjouté un Me.ComboBox1, le Me c'est une histoire de réferences, non ?
Bonsoir
Beaucoup de questions
Pour trouver certaines réponses tu regardes l'aide de Find
Resize(nombre de ligne, nombre de colonne) sert à redimensionner une plage
J'airais pu marquer
Range("C" & Ligne & ":E" & Ligne).Find.......Me Me indique l'object dans lequel on est : Dans ce cas c'est l'userform
En plus en tapant Me. tu as une liste des propriétés, des méthodes, des objets rattachés à cet objet