Formule avec condition
Ok merci je teste ça.
Petite question : j'aimerais créer un QR code pour que le personnel puisse avoir accès à ce fichier. Donc je me demande est-ce qu'il faut que je mette sur un drive le fichier? Où est-ce que il faut que je remplace la feuille formulaire par un Microsoft form qui serait en ligne? Qu'est-ce que vous en pensez?
non cela ne marche pas.
je ne peux pas supprimer un ligne maintenant. j'ai la demande de mot de passe qui revient
Bonsoir,
Espérons que celui-ci fonctionne mieux:
Pour la question précédente, je n'ai pas d'idée bien précise, mais il me semble que le fichier sur le drive est une solution qui doit marcher, le mieux c'est quand même de faire des essais.
Cdlt
Merci, cela semble nikel.
petit soucis :
impossible de modifier quelque chose dans la feuille "liste déroulante". je dois modifier la liste du personnel. je dois le faire également dans la feuille tableau
oui j'y arrive maintenant.
- lorsque je met le mot de passe cela déverrouille la feuille juste pour une action, après je dois re taper le mot de passe.
- lorsque j'ouvre le fichier il me demande d'entré un mdp.
- dans la feuille liste déroulante, je rajoute un nom. dans "tableau" je rajoute le même nom. Quand je vais dans la feuille formulaire pour ajouter un manoeuvre il me met un message d'erreur (voir photo).
La gestion des mots de passe est assez pénible parce qu'une fois, il faut le mettre et, une autre fois, il faut l'enlever, ça devient vite compliquer à gérer. Si vous êtes obligé de mettre des mots de passe, c'est sûr qu'il y aura des contraintes pour le bon déroulement de l'application, c'est le principe même de la protection.
- lorsque je met le mot de passe cela déverrouille la feuille juste pour une action, après je dois re taper le mot de passe., pour la feuille "Liste déroulante", le mot de passe est demandé uniquement lorsque on ouvre cette feuille, une fois qu'elle est ouverte avec le mot de passe, ce dernier n'est plus demandé, sauf si vous passez sur une autre feuille et puis que vous revenez sur celle-là.
-lorsque j'ouvre le fichier il me demande d'entré un mdp. Ben, c'est le but de départ, quiconque ouvre le fichier ne pourra accéder au modifications que si le mot de passe a été saisi.
- dans la feuille liste déroulante, je rajoute un nom. dans "tableau" je rajoute le même nom. Quand je vais dans la feuille formulaire pour ajouter un manoeuvre il me met un message d'erreur (voir photo). Pourquoi mettez-vous le même nom?
ok pour le mot de passe
je rajoute même nom pour qu'il y est une concordance entre les deux feuilles.
dans liste déroulante je rajoute "martin", dans tableau je rajoute "Martin" puis j'ai l'erreur qui s'affiche quand j'ajoute une manœuvre avec martin
J'ai modifié le fichier de telle manière que celui qui l'ouvre avec le code "ADM" pourra tout faire, alors que celui qui l'ouvre sans ce code (ou code erroné) ne pourra remplir que le formulaire et le valider.
parfait c'est exactement ce que je voulais.
par contre je ne peux plus supprimer une ligne de manœuvre avec le bouton
Si ça marche, mais il y a eu un copié/collé malheureux qui fait qu'il ne trouve pas la feuille à sélectionner. Voici le correctif:
je n'y arrive toujours pas
Vous n'êtes sûrement pas connecté avec le code "ADM" demandé à l'ouverture du fichier. Pour le vérifier, sur la feuille "Formulaire", sélectionnez la cellule A1 et regardez dans la barre de formule, il faut qu'il y ait le signe "$" , c'est lui qui donne l'autorisation ou pas de modifier les feuilles.
sinon, ça marche bien, la preuve en vidéo:
bonjour,
j'ai mit en place le fichier excel . cela fonctionne très bien.
mais en le mettant en place je m'aperçois qu'ils font des erreurs.
est il possible de rajouter un code (écriture), dans la feuille formulaire pour pas qu'il y est deux noms similaire. exemple : en fait en "nom du responsable" il marque "martin N" puis en participant il marque aussi "martin N". faire apparaitre un message d'erreur comme quoi il y a deux fois le même nom.
est ce que vous voulez le fichier? ou je mettrais l'écriture?
Bonsoir,
Veuillez effacer tout le code du module 1 et le remplacer par celui-ci:
Option Explicit
Option Compare Text
'Déclaration des variables
Public f1 As Worksheet, f2 As Worksheet, f3 As Worksheet
Public Lig_f2 As Long, Col_f2 As Long, Lig As Long
Public DerLig_f2 As Long, DerLig_f3 As Long, i As Long, Position As Long, j As Long, Nb_Doublon As Long
Public Duree As Date
Public Theme As String, AutreTheme As String, Init_Theme As String, Init_AutreTheme As String, Nom As Variant
Public DeuxPoints_Theme As Long
Public Non_Conforme As Boolean
Sub Ajouter_manoeuvre()
Application.ScreenUpdating = False 'Empêche les rafraichissements de l'écran lors de l'exécution du code, et augmente la vitesse d'éxcution
Set f1 = Sheets("Formulaire") 'attribution de la variable f1 )à la feuille "Formulaire"
Set f2 = Sheets("liste manoeuvres") 'attribution de la variable f2 à la feuille "liste manoeuvres"
Set f3 = Sheets("Tableau")
f3.Unprotect Password:="ADM"
f2.Unprotect Password:="ADM"
If f2.Range("B2").Value = "" Then 'si cellule B2 de f2 est vide, alors:
Lig_f2 = 2 'Première ligne vide de f2
Else 'sinon
f2.Cells(2, 1).ListObject.ListRows.Add AlwaysInsert:=False 'Ajout d'une ligne dans le Tableau 1 de f2
Lig_f2 = f2.ListObjects("Tableau1").DataBodyRange.Rows.Count + 1 'recherche la première ligne vide de f2
End If
Controle_conformité:
If f1.Range("D16").Value = "" And f1.Range("D19").Value = "" Or f1.Range("D16").Value <> "" And f1.Range("D19").Value <> "" Then
MsgBox "Une seule plage ""Thème"" ou ""Autre thème"" doit être remplie " 'contrôle la présence de thème ou d'autre thème
GoTo Protection 'si absence des 2 ou présence des 2, alors on sort du programme
ElseIf f1.Cells(9, "D") = "" And f1.Cells(11, "D") Then 'contrôle de la présence des horaires de début et de fin
MsgBox "Les horaires de début et de fin ne sont pas remplis sont vides"
GoTo Protection 'si absence des 2, alors on sort du programme
ElseIf f1.Cells(5, "F") = "" Then ' contrôle la présence du premier participant
MsgBox "il n'y a pas de participants"
GoTo Protection 'si absence du premier participant, alors on sort du programme
End If
Contrôle_présence_de_doublons:
For i = 5 To 15 Step 2
For j = 6 To 10 Step 2
If f1.Cells(i, j) <> "" Then
Nom = Cells(i, j)
Nb_Doublon = Application.WorksheetFunction.CountIf(f1.Range("F5:J15"), Nom)
If Nb_Doublon > 1 Then
MsgBox "Le Nom " & Nom & " est déjà présent, veuillez sélectionner un autre nom"
Exit Sub
End If
End If
Next j
Next i
'remplissage de la f2
'f2.Cells(Lig_f2, "A") = f1.Range("D5").Value 'copie de "Valider Webact ""
f2.Cells(Lig_f2, "B") = f1.Range("D5").Value 'copie de "Horodatage"
f2.Cells(Lig_f2, "C") = f1.Range("D7").Value 'copie de "Date"
f2.Cells(Lig_f2, "D") = f1.Range("D9").Value 'copie de "Heure début"
f2.Cells(Lig_f2, "E") = f1.Range("D11").Value 'copie de "Heure fin"
f2.Cells(Lig_f2, "F") = f1.Range("D13").Value 'copie de "Durée"
f2.Cells(Lig_f2, "G") = f1.Range("D16").Value 'copie de "Thème"
f2.Cells(Lig_f2, "H") = f1.Range("D19").Value 'copie de "Autre Thème"
f2.Cells(Lig_f2, "I") = f1.Range("D20").Value 'copie de "Observation"
f2.Cells(Lig_f2, "J") = f1.Range("F5").Value 'copie de "Responsable"
f2.Cells(Lig_f2, "K") = f1.Range("F7").Value 'copie de "Participant 1"
f2.Cells(Lig_f2, "L") = f1.Range("F9").Value 'copie de "Participant 2"
f2.Cells(Lig_f2, "M") = f1.Range("F11").Value 'copie de "Participant 3"
f2.Cells(Lig_f2, "N") = f1.Range("F13").Value 'copie de "Participant 4"
f2.Cells(Lig_f2, "P") = f1.Range("H5").Value 'copie de "Participant 5"
f2.Cells(Lig_f2, "Q") = f1.Range("H7").Value 'copie de "Participant 6"
f2.Cells(Lig_f2, "R") = f1.Range("H9").Value 'copie de "Participant 7"
f2.Cells(Lig_f2, "S") = f1.Range("H11").Value 'copie de "Participant 8"
f2.Cells(Lig_f2, "T") = f1.Range("H13").Value 'copie de "Participant 9"
f2.Cells(Lig_f2, "U") = f1.Range("J5").Value 'copie de "Participant 10"
f2.Cells(Lig_f2, "V") = f1.Range("J7").Value 'copie de "Participant 11"
f2.Cells(Lig_f2, "W") = f1.Range("J9").Value 'copie de "Participant 12"
f2.Cells(Lig_f2, "X") = f1.Range("J11").Value 'copie de "Participant 13"
f2.Cells(Lig_f2, "Y") = f1.Range("J13").Value 'copie de "Participant 14"
f2.Cells(Lig_f2, "Y") = f1.Range("J15").Value 'copie de "Participant 15"
'Quadrillage
f2.Range("A2:Y" & Lig_f2).Borders().Weight = xlThin
'Appel à la macro "Comptage" pour remplissage feuille "Tableau"
Comptage
If Non_Conforme = True Then GoTo Protection
'Effacement du formlaire
f1.Range("D7,D9,D11,D16,D19,D20,F13,F11,F9,F7,F5,H5,H7,H9,H11,H13,J15,J13,J11,J9,J7,J5").Value = ""
Protection:
f2.Protect Password:="ADM", DrawingObjects:=True, Contents:=True, Scenarios:=True
f3.Protect Password:="ADM", DrawingObjects:=False, Contents:=True, Scenarios:=False
f1.Select
'Libération de la mémoire
Set f1 = Nothing
Set f2 = Nothing
Set f3 = Nothing
End Sub
Sub Comptage()
'déclaration des variables uniquement pour cette macro
Non_Conforme = False
Application.ScreenUpdating = False 'Empêche les rafraichissements de l'écran lors de l'exécution du code, et augmente la vitesse d'éxcution
DerLig_f3 = f3.Range("B" & Rows.Count).End(xlUp).Row 'recherche la dernière ligne de f3
Duree = f1.Cells(13, "D") 'on récupère la valeur de la durée
Theme = f1.Cells(16, "D") 'on récupère la valeur du thème
'si "Theme" est vide alors on va lire "Autre theme"
If Theme = "" Then GoTo Autre_Theme
DeuxPoints_Theme = InStr(1, Theme, " :", 1) 'on recherche la position des ":" dans le nom de "Theme"
Init_Theme = Left(Theme, DeuxPoints_Theme - 1) 'on ne conserve que la partie gauche de theme (tout ce qui est avant les 2 points ":")
Autre_Theme:
AutreTheme = Trim(f1.Cells(19, "D")) 'on récupère la valeur de l'autre thème
'si "Theme" est vide alors on va lire "Controle_Présence_Themes"
Init_AutreTheme = Trim(AutreTheme) 'on supprime les espaces inutiles dans AutreTheme
Controle_conformité:
If Theme = "" And AutreTheme = "" Or Theme <> "" And AutreTheme <> "" Then
MsgBox "Une seule plage ""Thème"" ou ""Autre thème"" doit être remplie " 'contrôle la présence de thème ou d'autre thème
Non_Conforme = True
Exit Sub 'si absence des 2 ou présence des 2, alors on sort du programme
ElseIf f1.Cells(9, "D") = "" And f1.Cells(11, "D") Then 'contrôle de la présence des horaires de début et de fin
MsgBox "Les horaires de début et de fin ne sont pas remplis sont vides"
Exit Sub 'si absence des 2, alors on sort du programme
ElseIf f1.Cells(5, "F") = "" Then ' contrôle la présence du premier participant
MsgBox "il n'y a pas de participants"
Exit Sub 'si absence du premier participant, alors on sort du programme
End If
For i = 5 To 13 Step 2 'de la ligne 5 à 13 en sautant 1 ligne sur 2
For j = 6 To 10 Step 2 'de la colonne 6 à 10 en sautant 1 colonne sur 2
If f1.Cells(i, j) <> "" Then 'si la cellule traitée n'est pas vide, alors:
Lig = Application.Match(f1.Cells(i, j), f3.Range("B1:B" & DerLig_f3), 0) 'on recherche le nom du participant en cours de lecture dans f2, on récupère son N° de ligne
Select Case Init_Theme 'selon la valeur du "Theme" (uniquement la partie gauche avant les 2 points)
Case Is = "ETEX" 'si c'est ETEX,
f3.Cells(Lig, "C") = f3.Cells(Lig, "C") + Duree 'dans f3, dans la colonne correspondant à ETEX en "FMPA2024", on ajoute la durée on contenu de la cellule
Case Is = "SMS"
f3.Cells(Lig, "E") = f3.Cells(Lig, "E") + Duree
Case Is = "EMV"
f3.Cells(Lig, "G") = f3.Cells(Lig, "G") + Duree
Case Is = "PPBE"
f3.Cells(Lig, "I") = f3.Cells(Lig, "I") + Duree
Case Is = "SR"
f3.Cells(Lig, "K") = f3.Cells(Lig, "K") + Duree
Case Is = "MEA"
f3.Cells(Lig, "M") = f3.Cells(Lig, "M") + Duree
Case Is = "FDFEN"
f3.Cells(Lig, "O") = f3.Cells(Lig, "O") + Duree
End Select
Select Case Init_AutreTheme 'selon la valeur de "AutreTheme"
Case Is = "ETEX" 'si c'est ETEX,
f3.Cells(Lig, "D") = f3.Cells(Lig, "D") + Duree 'dans f3, dans la colonne correspondant à ETEX dans "Autre", on ajoute la durée on contenu de la cellule
Case Is = "SMS"
f3.Cells(Lig, "F") = f3.Cells(Lig, "F") + Duree
Case Is = "EMV"
f3.Cells(Lig, "H") = f3.Cells(Lig, "H") + Duree
Case Is = "PPBE"
f3.Cells(Lig, "J") = f3.Cells(Lig, "J") + Duree
Case Is = "SR"
f3.Cells(Lig, "L") = f3.Cells(Lig, "L") + Duree
Case Is = "MEA"
f3.Cells(Lig, "N") = f3.Cells(Lig, "N") + Duree
Case Is = "FDFEN"
f3.Cells(Lig, "P") = f3.Cells(Lig, "P") + Duree
End Select
End If
Next j
Next i
f1.Select 'on sélectionne la feuille f3
End SubCdlt
merci.
je viens d'essayer cela ne fonctionne pas
Bonjour,
Pourriez-vous remettre le fichier à disposition avec la dernière modification (sans données confidentielles) afin que je puisse constater moi-même, car j'ai moi ça marche très bien.
Cdlt
