Bonjour,
Alors voila j'ai une première macro qui ressemble à ça:
Elle permet de comparer les dates et les heures dans deux colonnes et empêche la saisie si une date et une heure qui ont déjà été choisies sont rechoisies,cela permet d'éviter de planifier deux formations au même moment par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Private Sub Worksheet_Change(ByVal Target As Range) Dim nbValeurs&, NbOccG&, NbOccH nbValeurs = Application.WorksheetFunction.CountA(Range(Cells(Target.Row, 7), Cells(Target.Row, 8))) If nbValeurs = 2 Then NbOccG = Application.WorksheetFunction.CountIf(Columns("G"), Cells(Target.Row, 7)) NbOccH = Application.WorksheetFunction.CountIf(Columns("H"), Cells(Target.Row, 8)) If NbOccG > 1 And NbOccH > 1 Then MsgBox "La plage à laquelle vous souhaitez planifier votre formation est déjà prise" Target.Clear End If End If End Sub
On m'a demandé quelque chose de différent: deux types de formations dans deux onglets différents avec bien sur des dates et des heures pour ces deux types de formations.
Il faudrait donc que ma macro compare les dates et les heures non pas que dans un seul onglet mais dans les deux.
Le top se serait dans premier temps une comparaison dans les deux colonnes de dates afin de vérifier si la date saisie est déjà prise, si oui alors msgbox d'alerte avec un msg x , sinon rien, puis comparer date et horaires associés afin de voir si il y a une correpondance dans les deux onglets ou non. Si, oui alors msg d'erreur prévenant l'utilisateur et empêchant la saisie sinon rien.
Bref je ne sais pas si je me suis expliquer correctement...j'espère seulement que c'est possible.
Merci d'avance pour votre lecture et vos éventuelles réponses!!!!!
Bonjour,
J'ai essayer ceci:
Néanmoins ca ne marche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Private Sub Worksheet_Change(ByVal Target As Range) Dim nbValeurs&, NbOccG&, NbOccH nbValeurs = Application.WorksheetFunction.CountA(Range(Cells(Target.Row, 7), Cells(Target.Row, 8))) ligne = Target.Row If nbValeurs = 2 Then NbOccG = Application.WorksheetFunction.CountIf(Columns("G"), Cells(ligne, 7)) 'Compte la première feuille colonne G NbOccG2 = Application.WorksheetFunction.CountIf(Sheets("Feuil2").Columns("G"), Sheets("Feuil2").Cells(ligne, 7)) 'compte la deuxième colonne G NbOccH = Application.WorksheetFunction.CountIf(Columns("H"), Cells(ligne, 8)) 'Compte la première feuille colonne H NbOccH2 = Application.WorksheetFunction.CountIf(Sheets("feuil2").Columns("H"), Sheets("feuil2").Cells(ligne, 8)) MsgBox (nbValeurs & NbOccG & NbOccG2 & NbOccH & NbOccH2) 'compte la deuxième colonne H If NbOccG + NbOccG2 > 1 And NbOccH + NbOccH2 > 1 Then 'compare le nombre d'occurence MsgBox "La plage à laquelle vous souhaitez planifier votre formation est déjà prise par un autre référent." Target.Clear End If End If End Subquelqu'un aurait une idée?
Partager