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 Select

Je vous joins mon fichier pour que vous compreniez mieux

17vba.xlsm (37.61 Ko)

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 Sub

Merci 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

Rechercher des sujets similaires à "compare"