MON CODE NE FONCTIONNE PAS

chich

XLDnaute Occasionnel
Bonjour a la communauté
j’essaye de me débrouillé avec l'enregistreur de macro mais la je but un cou de main serais le bien venu
merci d’avance
Private Sub ToggleButton3_Click()
Application.ScreenUpdating = False
Selection.Validation
ActiveCell.EntireRow.Delete
Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertWarning, Operator _
:=xlBetween, Formula1:="=MOD(M11>Q11;1)>=0,5"
ActiveCell.FormulaR1C1 = " : "
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=RC[-1]>TIME(12,00,0)"
ActiveCell.Offset(0, -4).Select
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "Amplitude"
.InputMessage = ""
.ErrorMessage = _
" ATTENTION " & Chr(10) & "Veuillez respecter les amplitudes horaires" & Chr(10) & ""
.ShowInput = True
.ShowError = True
ActiveCell.FormulaR1C1 = "10:00"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=RC[-1]+TIME(7,00,0)"
ActiveCell.Offset(0, 4).Select
Load UserForm2
End Sub
 

job75

XLDnaute Barbatruc
Re, salut Philippe,

Une solution sans VBA dans le fichier joint.

Avec des listes de validation en B11 G11 L11 Q11 V11 AA11 AF11.

Formule de validation très simple en B11 =$AL$2:$AL$12

Formule de validation en G11, à copier sur L11 Q11 V11 AA11 AF11 :

Code:
=SI(B11=0;$AL$2:$AL$12;DECALER($AL$1;EQUIV(MOD(B11+19/24;1)+"1E-6";$AL$2:$AL$12);;12-EQUIV(MOD(B11+19/24;1)+"1E-6";$AL$2:$AL$12)))
La liste ne comporte que les heures autorisées pour un décalage d'au moins 19 heures avec B11.

Edit : formule en C11 =SI(ESTNUM(B11);B11+"7:0";"")

A+
 

Pièces jointes

  • demo sans VBA(1).xlsm
    19.2 KB · Affichages: 24
Dernière édition:

chich

XLDnaute Occasionnel
Re, salut Philippe,

Une solution sans VBA dans le fichier joint.

Avec des listes de validation en B11 G11 L11 Q11 V11 AA11 AF11.

Formule de validation très simple en B11 =$AL$2:$AL$12

Formule de validation en G11, à copier sur L11 Q11 V11 AA11 AF11 :

Code:
=SI(B11=0;$AL$2:$AL$12;DECALER($AL$1;EQUIV(MOD(B11+19/24;1)+"1E-6";$AL$2:$AL$12);;12-EQUIV(MOD(B11+19/24;1)+"1E-6";$AL$2:$AL$12)))
La liste ne comporte que les heures autorisées pour un décalage d'au moins 19 heures avec B11.

A+
merci pour ton interet et le temps accorde ta proposition mais elle n'est pas adapte pour mon projet je privilegie une solution vba
 

job75

XLDnaute Barbatruc
Re,

Pour le poids du fichier il faut voir ce que ça donne, ça ne devrait pas être un problème.

Le VBA est cependant nécessaire sur un point.

Si par exemple après avoir renseigné G11 L11 etc on s'amuse à modifie B11, il faut effacer G11 et toutes les données suivantes.

A+
 

chich

XLDnaute Occasionnel
Re,

Pour le poids du fichier il faut voir ce que ça donne, ça ne devrait pas être un problème.

Le VBA est cependant nécessaire sur un point.

Si par exemple après avoir renseigné G11 L11 etc on s'amuse à modifie B11, il faut effacer G11 et toutes les données suivantes.

A+
j'e suis bien lourd 2,18 mo donc le plus possible de code le plus propre possible
 

job75

XLDnaute Barbatruc
Bonjour chich, cathodique, Philippe, le forum,

Quand on a B11 <> 0 il ne faut pas de 00:00 dans la liste en G11, je modifie donc la formule :
Code:
=SI(B11=0;$AL$2:$AL$12;DECALER($AL$1;MAX(2;EQUIV(MOD(B11+19/24;1)+"1E-6";$AL$2:$AL$12));;12-MAX(2;EQUIV(MOD(B11+19/24;1)+"1E-6";$AL$2:$AL$12))))
Fichier (2) avec les 52 semaines créées pour 2017, le fichier ne pèse que 63 ko.

PS : attention, vous aviez plein de petits objets dans votre fichier... Je les ai bien sûr supprimés.

Bonne journée.
 

Pièces jointes

  • demo sans VBA(2).xlsm
    63.3 KB · Affichages: 27

chich

XLDnaute Occasionnel
Bonjour chich, cathodique, Philippe, le forum,

Quand on a B11 <> 0 il ne faut pas de 00:00 dans la liste en G11, je modifie donc la formule :
Code:
=SI(B11=0;$AL$2:$AL$12;DECALER($AL$1;MAX(2;EQUIV(MOD(B11+19/24;1)+"1E-6";$AL$2:$AL$12));;12-MAX(2;EQUIV(MOD(B11+19/24;1)+"1E-6";$AL$2:$AL$12))))
Fichier (2) avec les 52 semaines créées pour 2017, le fichier ne pèse que 63 ko.

PS : attention, vous aviez plein de petits objets dans votre fichier... Je les ai bien sûr supprimés.

Bonne journée.

Bonjour a tous
merci pour votre implication dans la realisation de mon projet
ont s' en approche j'ai modifier
votre formule car l'amplitude dois se compare entre fin de poste C11 et prise de poste en G11
Mais j souhait avoir la formule en code avec un message d'attention pour avoir la liberte de pouvoir modifie manuellement les prises et fin de poste en fonction du temps reellement travailler

=SI(C11=0;$AL$2:$AL$12;DECALER($AL$1;MAX(2;EQUIV(MOD(C11+12/24;1)+"1E-6";$AL$2:$AL$12));;12-MAX(2;EQUIV(MOD(C11+12/24;1)+"1E-6";$AL$2:$AL$12))))
 

job75

XLDnaute Barbatruc
Re,
l'amplitude dois se compare entre fin de poste C11 et prise de poste en G11
Puisque l'écart entre B11 et C11 est toujours 7 heures on peut utiliser B11 aussi bien que C11.
Mais j souhait avoir la formule en code avec un message d'attention pour avoir la liberte de pouvoir modifie manuellement les prises et fin de poste en fonction du temps reellement travailler
Vous êtes têtu... En l'occurrence quand la liste de validation est créée il suffit de décocher la case "Quand des données non valides sont tapées".

Vous avez ainsi le droit d'entrer ce que vous voulez, à mon avis il est inutile de prévoir un message.

Fichier (3).

A+
 

Pièces jointes

  • demo sans VBA(3).xlsm
    65.7 KB · Affichages: 29

job75

XLDnaute Barbatruc
Re,

Dans ce fichier (4) :

- la liste des heures va de 00:00 à 23:00

- la formule de validation en G11 a été revue :
Code:
=SI(B11-"1E-6"+19/24<1;$AL$2:$AL$25;DECALER($AL$1;SIGNE(MINUTE(B11))+EQUIV(MOD(B11+19/24;1)+"1E-6";$AL$2:$AL$25);;25-SIGNE(MINUTE(B11))-EQUIV(MOD(B11+19/24;1)+"1E-6";$AL$2:$AL$25)))
Elle tient compte du fait que maintenant on peut entrer des minutes.

A+
 

Pièces jointes

  • demo sans VBA(4).xlsm
    66.1 KB · Affichages: 33

job75

XLDnaute Barbatruc
Re,

Au lieu des EQUIV on peut utiliser des SOMMEPROD, la formule est un peu plus légère :
Code:
=SI(B11-"1E-6"+19/24<1;$AL$2:$AL$25;DECALER($AL$1;SOMMEPROD(N($AL$2:$AL$25<MOD(B11+19/24;1)-"1E-6"))+1;;SOMMEPROD(N($AL$2:$AL$25>MOD(B11+19/24;1)-"1E-6"))))
Notez qu'on peut supprimer les cellules qu'on veut dans la plage AL2:AL25.

Fichier (4 bis).

A+
 

Pièces jointes

  • demo sans VBA(4 bis).xlsm
    66 KB · Affichages: 30

chich

XLDnaute Occasionnel
Re,

Au lieu des EQUIV on peut utiliser des SOMMEPROD, la formule est un peu plus légère :
Code:
=SI(B11-"1E-6"+19/24<1;$AL$2:$AL$25;DECALER($AL$1;SOMMEPROD(N($AL$2:$AL$25<MOD(B11+19/24;1)-"1E-6"))+1;;SOMMEPROD(N($AL$2:$AL$25>MOD(B11+19/24;1)-"1E-6"))))
Notez qu'on peut supprimer les cellules qu'on veut dans la plage AL2:AL25.

Fichier (4 bis).

A+

Re
j' ai retoucher votre formule car l'amplitude ne dois pas etre inferieure a 12 heures et elle dois se comparer en la fin de poste et la prise de poste le jours suivant
j’avoue que privilegie le vba je ne suis pas convaincu par le choix du menu deroulant
je souhait taux d'automatisation le plus eleve possible
 

Pièces jointes

  • DEMO SANS VBA.GIF
    DEMO SANS VBA.GIF
    12.8 KB · Affichages: 22

job75

XLDnaute Barbatruc
Re,
Re
j' ai retoucher votre formule car l'amplitude ne dois pas etre inferieure a 12 heures et elle dois se comparer en la fin de poste et la prise de poste le jours suivant
Ma formule va très bien, elle n'affiche que les heures qui donnent au moins l'amplitude de 12 heures.

Mais vous n'avez pas compris ceci : il ne faut pas comparer G11 à C11 car en C11 il y a une formule qui peut renvoyer le texte vide "", c'est pourquoi je compare G11 à B11.

Pour terminer, si l'on veut mettre en évidence les amplitudes non respectées, utiliser cette MFC en G11 :
Code:
=ESTNUM(G11)*(1+G11<B11-"1E-6"+19/24)
Fichier (5).

A+
 

Pièces jointes

  • demo sans VBA(5).xlsm
    66.8 KB · Affichages: 25
Dernière édition:

Si...

XLDnaute Barbatruc
Bonsoir

Re,
... on s'amuse à modifie B11, il faut effacer G11 et toutes les données suivantes.
C'est ce que j'ai fait ici Job ;).

Un exemple, en utilisant le VBA, de ballade de jour en jour avec des horaires de 15 en 15 minutes (à adapter). En plus, on a la possibilité d’effacer les lignes une par une ou toutes d’un coup.

On peut aussi restreindre les plages de saisie mais c’est une autre histoire.
 

Pièces jointes

  • Saisies Horaires avec VBA.xlsm
    71.2 KB · Affichages: 32

chich

XLDnaute Occasionnel
Bonsoir


C'est ce que j'ai fait ici Job ;).

Un exemple, en utilisant le VBA, de ballade de jour en jour avec des horaires de 15 en 15 minutes (à adapter). En plus, on a la possibilité d’effacer les lignes une par une ou toutes d’un coup.

On peut aussi restreindre les plages de saisie mais c’est une autre histoire.

Bonsoir merci de votre interet pour mon projet
super votre fichier j'aime beaucoup je vais m'en inspire pour pourriez vous svp optimise mon bout de code sur le quel je n'arrive plus a avance
 

Pièces jointes

  • AMPLITUDE VBA.GIF
    AMPLITUDE VBA.GIF
    50.7 KB · Affichages: 40
  • AMPLITUDE VBA2.GIF
    AMPLITUDE VBA2.GIF
    19.7 KB · Affichages: 35
  • amplitude vba3.GIF
    amplitude vba3.GIF
    147.3 KB · Affichages: 32

Discussions similaires

Statistiques des forums

Discussions
312 386
Messages
2 087 848
Membres
103 668
dernier inscrit
Aekhassen