OVH Cloud OVH Cloud

copie longue macro

5 réponses
Avatar
guy
De: "guy" <fa299540@skynet.be>
Objet: Re: Tableau de garde
Date: lundi 27 octobre 2003 9:44

Hello AV et TOUS,
Je suis toujours en admiration devant toutes vos réponses et CONNAISSANCES.
Une chose m'intrigue depuis toujours : est-t-il possible de copier, où l'on
veut, cette très longue formule sans devoir l'écrire.
J'aimerais, svp, si quelqu'un à la patience et le temps, une réponse très
simple car je suis un vieil apprenti.
Un tout grand merci.
Guy
AV" <alain.vallon@wanadoo.fr> a écrit dans le message de
news:ume1VPGnDHA.372@TK2MSFTNGP11.phx.gbl...
> A tester dans un classeur vierge puis adapter à ton usage (Noms de
feuille,
> plage de départ....)
> Pour le test, le classeur doit contenir une feuille nommée "Feuil1"
>
> Sub Gardes()
> varAn = InputBox("Saisir un millésime", "Calendrier Gardes", Year(Date))
> If varAn = "" Then Exit Sub
> Application.ScreenUpdating = False
>
> 'création feuille et plage jours féries
> On Error Resume Next
> Application.DisplayAlerts = False
> Sheets("Fériés").Delete
> Application.DisplayAlerts = True
> Sheets.Add.Name = "Fériés"
> '1° janvier
> [A1] = Evaluate("date(" & varAn & ",1,1)")
> 'Lundi de Pâques
> [A2] = Evaluate("ROUND(DATE(" & varAn & ",4,MOD(234-11*MOD(" & varAn &
> ",19),30))/7,)*7-5")
> '1° Mai
> [A3] = Evaluate("date(" & varAn & ",5,1)")
> '8 Mai
> [A4] = Evaluate("date(" & varAn & ",5,8)")
> 'Jeudi de l'Ascension
> [A5] = [A2] + 38
> 'Lundi de Pentecôte
> [A6] = [A2] + 49
> '14 Juillet
> [A7] = Evaluate("date(" & varAn & ",7,14)")
> '15 Aôut
> [A8] = Evaluate("date(" & varAn & ",8,15)")
> '1° Novembre
> [A9] = Evaluate("date(" & varAn & ",11,1)")
> '11 Novembre
> [A10] = Evaluate("date(" & varAn & ",11,11)")
> 'Noël
> [A11] = Evaluate("date(" & varAn & ",12,25)")
>
> 'définit le nom "JFrs"
> ActiveWorkbook.Names.Add Name:="JFrs", RefersTo:="=Fériés!$A$1:$A$11"
>
> 'écrit série jours An
> Sheets("Feuil1").Select
> [A:E] = ""
> With [A1]
> .Value = DateSerial(varAn, 1, 1)
> .DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
> xlDay, Step:=1, Stop:=DateSerial(varAn, 12, 31), Trend:=False
> End With
>
> 'Ecrit Jours et heures de gardes
> For z = DateSerial(varAn, 12, 31) - DateSerial(varAn, 1, 1) + 1 To 1
Step -1
> Dim x1 As Range
> Set x1 = Cells(z, 1)
> x2 = x1.Value
> testJFrs = IsError(Application.Match(x1, [JFrs], 0))
> If Weekday(x1, 2) < 6 And testJFrs <> 0 Then
> x1.Offset(0, 1) = 20 / 24
> x1.Offset(0, 2) = x2 + 1
> x1.Offset(0, 3) = 8 / 24
> ElseIf Weekday(x1, 2) > 5 Or testJFrs = 0 Then
> x1.Offset(0, 1) = 8 / 24
> x1.Offset(0, 2) = x2
> x1.Offset(0, 3) = 20 / 24
> x1.Offset(1, 0).Range("A1:E1").Insert
> 'x1.Offset(1, 0) = x2 'Optionnel
> x1.Offset(1, 1) = 20 / 24
> x1.Offset(1, 2) = x2 + 1
> x1.Offset(1, 3) = 8 / 24
> End If
> Next
> End Sub
>
> AV
>
>

5 réponses

Avatar
jps
bonjour guy
je suis le 37ème secrétaire de AV, actuellement en déplacement et les 36
autres étant à la traite des limousines que notre MVP mène de front avec
excel....
bien sûr que tu peux faire un copier puis un coller de cette très longue
formule (en effet, parfois mon patron délaie et en fait un peu trop mais
peut-on lui en vouloir?...) mais encore faut-il ne pas te tromper d'endroit
pour la coller...
via Alt + F11 tu vas, ton classeur étant ouvert, pouvoir ouvrir VBE (Visual
Basic Editor) ; dans l'arborescence à gauche tu vas voir le nom de ton
classeur, tu le sélectionneras, tu iras dans la barre d'outils et cliqueras
Insérer, puis Module et tu verras qu'à gauche se sera ajouter ledit module
après les feuilles de ton classeur ; à droite se sera ouverte une fenêtre
Module 1 ; tu n'auras plusq qu'à coller la formule de AV là-dedans, tu
retournes à ton classeur, tu l'enregistres et ainsi tu disposeras de cette
macro chaque fois que tu seras dans ton classeur et ce via Outils Macros ;
tu verras le nom de la macro dans la liste, tu la sélectionneras, tu
cliqueras le bouton Exécuter, tu fermeras les yeux tout en croisant tes
petits doigts en les ayant au préalable (les yeux et les doigts) retirer du
clavier et si tu ne vois pas apparaître une fenêtre parlant d'erreur
trucmuche, eh bien, tu auras vaincu le monstre excel...
au fait, était-ce bien cela ta question? si non, n'en parle pas à AV : il me
licenciera sur le champ...
jps


"guy" a écrit dans le message de
news:%

De: "guy"
Objet: Re: Tableau de garde
Date: lundi 27 octobre 2003 9:44

Hello AV et TOUS,
Je suis toujours en admiration devant toutes vos réponses et
CONNAISSANCES.

Une chose m'intrigue depuis toujours : est-t-il possible de copier, où
l'on

veut, cette très longue formule sans devoir l'écrire.
J'aimerais, svp, si quelqu'un à la patience et le temps, une réponse très
simple car je suis un vieil apprenti.
Un tout grand merci.
Guy
AV" a écrit dans le message de
news:
A tester dans un classeur vierge puis adapter à ton usage (Noms de
feuille,

plage de départ....)
Pour le test, le classeur doit contenir une feuille nommée "Feuil1"

Sub Gardes()
varAn = InputBox("Saisir un millésime", "Calendrier Gardes", Year(Date))
If varAn = "" Then Exit Sub
Application.ScreenUpdating = False

'création feuille et plage jours féries
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Fériés").Delete
Application.DisplayAlerts = True
Sheets.Add.Name = "Fériés"
'1° janvier
[A1] = Evaluate("date(" & varAn & ",1,1)")
'Lundi de Pâques
[A2] = Evaluate("ROUND(DATE(" & varAn & ",4,MOD(234-11*MOD(" & varAn
&


",19),30))/7,)*7-5")
'1° Mai
[A3] = Evaluate("date(" & varAn & ",5,1)")
'8 Mai
[A4] = Evaluate("date(" & varAn & ",5,8)")
'Jeudi de l'Ascension
[A5] = [A2] + 38
'Lundi de Pentecôte
[A6] = [A2] + 49
'14 Juillet
[A7] = Evaluate("date(" & varAn & ",7,14)")
'15 Aôut
[A8] = Evaluate("date(" & varAn & ",8,15)")
'1° Novembre
[A9] = Evaluate("date(" & varAn & ",11,1)")
'11 Novembre
[A10] = Evaluate("date(" & varAn & ",11,11)")
'Noël
[A11] = Evaluate("date(" & varAn & ",12,25)")

'définit le nom "JFrs"
ActiveWorkbook.Names.Add Name:="JFrs",
RefersTo:="=Fériés!$A$1:$A$11"



'écrit série jours An
Sheets("Feuil1").Select
[A:E] = ""
With [A1]
.Value = DateSerial(varAn, 1, 1)
.DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
xlDay, Step:=1, Stop:ÚteSerial(varAn, 12, 31), Trend:úlse
End With

'Ecrit Jours et heures de gardes
For z = DateSerial(varAn, 12, 31) - DateSerial(varAn, 1, 1) + 1 To 1
Step -1

Dim x1 As Range
Set x1 = Cells(z, 1)
x2 = x1.Value
testJFrs = IsError(Application.Match(x1, [JFrs], 0))
If Weekday(x1, 2) < 6 And testJFrs <> 0 Then
x1.Offset(0, 1) = 20 / 24
x1.Offset(0, 2) = x2 + 1
x1.Offset(0, 3) = 8 / 24
ElseIf Weekday(x1, 2) > 5 Or testJFrs = 0 Then
x1.Offset(0, 1) = 8 / 24
x1.Offset(0, 2) = x2
x1.Offset(0, 3) = 20 / 24
x1.Offset(1, 0).Range("A1:E1").Insert
'x1.Offset(1, 0) = x2 'Optionnel
x1.Offset(1, 1) = 20 / 24
x1.Offset(1, 2) = x2 + 1
x1.Offset(1, 3) = 8 / 24
End If
Next
End Sub

AV









Avatar
J
Bonjour JPS
je ne sais pas si c'était la question, mais c'est une superbe réponse!
presqu'aussi belle que celle que tu me fis sur le Mot da passe étoilé
lors de mon squat sauvage de la ficelle (in english string ;-)) de Caroline;
hélas cette brillante réponse me laissa "pends toi", car il m'est
toujours impossible de trouver :
"> tout en haut du code du userform, ... Const MotDePasse = "1234" "

Aurais-tu une autre salvatrice explication du même tonneau, de
Beajolais, à mon encontre??

Et merci à guy pour son bienveillant accueil.
:-))
@+
J@@


bonjour guy
je suis le 37ème secrétaire de AV, actuellement en déplacement et les 36
autres étant à la traite des limousines que notre MVP mène de front avec
excel....


Avatar
jps
allo, deniiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis
tu voudrais pas, steplé, esseupliquer au tahitien du lagon non débouché ce
qu'il doit faire pour trouver la fameuse Const MotDePasse = "1234" dans la
proc que tu as pondue pour caroline : moi, je capitule..
jps

"J@@" a écrit dans le message de
news:%
Bonjour JPS
je ne sais pas si c'était la question, mais c'est une superbe réponse!
presqu'aussi belle que celle que tu me fis sur le Mot da passe étoilé
lors de mon squat sauvage de la ficelle (in english string ;-)) de
Caroline;

hélas cette brillante réponse me laissa "pends toi", car il m'est
toujours impossible de trouver :
"> tout en haut du code du userform, ... Const MotDePasse = "1234" "

Aurais-tu une autre salvatrice explication du même tonneau, de
Beajolais, à mon encontre??

Et merci à guy pour son bienveillant accueil.
:-))
@+
J@@


bonjour guy
je suis le 37ème secrétaire de AV, actuellement en déplacement et les 36
autres étant à la traite des limousines que notre MVP mène de front avec
excel....




Avatar
J
désolé, désolé, désolé, désolé, désolé, désolé, désolé, désolé, désolé,
désolé, désolé, désolé, désolé, désolé, désolé, désolé, désolé, désolé,
désolé,
de t'avoir troublé avec cette réponse faite un peu avant de trouver la
solution (cf plus haut ;-))
Re -merci à toi
J@@ :-)
"jps" <
tu voudrais pas, steplé, esseupliquer au tahitien du lagon non débouché ce
qu'il doit faire pour trouver la fameuse Const MotDePasse = "1234" dans la
proc que tu as pondue pour caroline : moi, je capitule..
jps


Avatar
MichDenis
Une autre histoire qui finit bien !

;-)


Salutations!


"J@@" a écrit dans le message de news:
désolé, désolé, désolé, désolé, désolé, désolé, désolé, désolé, désolé,
désolé, désolé, désolé, désolé, désolé, désolé, désolé, désolé, désolé,
désolé,
de t'avoir troublé avec cette réponse faite un peu avant de trouver la
solution (cf plus haut ;-))
Re -merci à toi
J@@ :-)
"jps" <
tu voudrais pas, steplé, esseupliquer au tahitien du lagon non débouché ce
qu'il doit faire pour trouver la fameuse Const MotDePasse = "1234" dans la
proc que tu as pondue pour caroline : moi, je capitule..
jps