Ameliorer ma macro pour alimenter mon planning

cpeens

XLDnaute Occasionnel
Bonjour à tous

Je viens profité de votre expérience pour m'aider à compresser un peu ma macro qui est compliquer et artisanal.

j'ai des onglets qui vont de Janvier à décembre

Chaque onglet en ligne 6 ont retrouvent la meme chose c'est à dire les dates du jour 01/01/2013 02/01/2013 ....

et pour chaque jour un heure de debut et de Fin vacation.

ma macro dans mon USF me permet alimenter la plage horaire suivant la date que j'utilise si le nom et prénom existe pas il me l'ajoute plus la disponibilité si il existe uniquement la disponibilité.

au fond tous fonctionne mais la macro est immence y aurais t'il une technique pour amelioré tous cela svp merci.


[CODEPrivate Sub AJOUT1_Click()

'On déclare les variables
Dim NL, l As Integer
Dim doublon As Boolean
Dim cel As Range

'On initialise la variable doublon comme False
doublon = False

'Sur la feuille "Feuil1"
With Sheets(G2.Text)
'Ça vous savez
NL = .Range("A101").End(xlUp).Row + 1
If NL = 101 Then NL = 100

'Pour toutes les cellules entre A2 et la dernière cellule de la colonne A
For Each cel In .Range(.Cells(7, 1), .Cells(NL, 1))
'Si nom ET prénom pareils alors
If cel.Value = M1.Value And cel.Offset(0, 1).Value = M2.Value Then
'Passer doublon en True
doublon = True
'Sort de la boucle
Exit For
'Fin de la condition
End If
'Fin de la boucle
Next cel
'Pour les condition de doublon
Select Case doublon
'Si vrai
Case True
'Message
MsgBox "''" & M1.Value & "'' est déjà dans la liste." _
& Chr(13) & "Les disponibilités vont etre ajouter !"
'On reprend la boucle d'avant
For Each cel In .Range(.Cells(7, 1), .Cells(NL, 1))
'Si nom ET prénom pareils alors
If cel.Value = M1.Value And cel.Offset(0, 1).Value = M2.Value Then
'Modification uniquement de la spécialité du doublon (de la ligne concernée)
If G1 = 1 Then
cel.Offset(0, 5).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 6).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If

If G1 = 2 Then
cel.Offset(0, 7).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 8).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If

If G1 = 3 Then
cel.Offset(0, 9).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 10).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 4 Then
cel.Offset(0, 11).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 12).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 5 Then
cel.Offset(0, 13).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 14).Value = Format(CDate(M4.Value), "hh:nn:ss")
' cel.Offset(0, 67).Value = M5
End If
If G1 = 6 Then
cel.Offset(0, 15).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 16).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 7 Then
cel.Offset(0, 17).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 18).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 8 Then
cel.Offset(0, 19).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 20).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 9 Then
cel.Offset(0, 21).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 22).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 10 Then
cel.Offset(0, 23).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 24).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 11 Then
cel.Offset(0, 25).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 26).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 12 Then
cel.Offset(0, 27).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 28).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 13 Then
cel.Offset(0, 29).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 30).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 14 Then
cel.Offset(0, 31).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 32).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 15 Then
cel.Offset(0, 33).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 34).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 16 Then
cel.Offset(0, 35).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 36).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 17 Then
cel.Offset(0, 37).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 38).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 18 Then
cel.Offset(0, 39).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 40).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 19 Then
cel.Offset(0, 41).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 42).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 20 Then
cel.Offset(0, 43).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 44).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 21 Then
cel.Offset(0, 45).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 46).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 22 Then
cel.Offset(0, 47).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 48).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 23 Then
cel.Offset(0, 49).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 50).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 24 Then
cel.Offset(0, 51).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 52).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 25 Then
cel.Offset(0, 53).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 54).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 26 Then
cel.Offset(0, 55).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 56).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 27 Then
cel.Offset(0, 57).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 58).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 28 Then
cel.Offset(0, 59).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 60).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 29 Then
cel.Offset(0, 61).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 62).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 30 Then
cel.Offset(0, 63).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 64).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If
If G1 = 31 Then
cel.Offset(0, 65).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 66).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If

End If
'Fin de la boucle
Next cel
'Si faux
Case False
'Ajout des données à la ligne suivante
'.Cells(NL, 1).Value = M1
' .Cells(NL, 2).Value = M2










valide2
gestion_nom.copie_nom

If G1 = 1 Then
.Cells(NL, 6).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 7).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If

If G1 = 2 Then
.Cells(NL, 8).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 9).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If

If G1 = 3 Then
.Cells(NL, 10).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 11).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 4 Then
.Cells(NL, 12).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 13).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 5 Then
.Cells(NL, 14).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 15).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 6 Then
.Cells(NL, 16).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 17).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 7 Then
.Cells(NL, 18).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 19).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 8 Then
.Cells(NL, 20).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 21).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 9 Then
.Cells(NL, 22).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 23).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 10 Then
.Cells(NL, 24).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 25).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 11 Then
.Cells(NL, 26).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 27).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 12 Then
.Cells(NL, 28).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 29).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 13 Then
.Cells(NL, 30).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 31).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 14 Then
.Cells(NL, 32).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 33).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 15 Then
.Cells(NL, 34).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 35).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 16 Then
.Cells(NL, 36).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 37).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 17 Then
.Cells(NL, 38).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 39).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 18 Then
.Cells(NL, 40).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 41).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 19 Then
.Cells(NL, 42).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 43).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 20 Then
.Cells(NL, 44).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 45).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 21 Then
.Cells(NL, 46).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 47).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 22 Then
.Cells(NL, 48).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 49).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 23 Then
.Cells(NL, 50).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 51).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 24 Then
.Cells(NL, 52).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 53).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 25 Then
.Cells(NL, 54).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 55).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 26 Then
.Cells(NL, 56).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 57).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 27 Then
.Cells(NL, 58).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 59).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 28 Then
.Cells(NL, 60).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 61).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 29 Then
.Cells(NL, 62).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 63).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
If G1 = 30 Then
.Cells(NL, 64).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 65).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If

If G1 = 31 Then
.Cells(NL, 66).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 67).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If
'Fin de Select
End Select
'Fin du With
End With


L1.ListItems.Clear
charge_G1
charge_G2
End Sub][/CODE]
 

Pièces jointes

  • Essais1.xls
    515 KB · Affichages: 57
  • Essais1.xls
    515 KB · Affichages: 67
  • Essais1.xls
    515 KB · Affichages: 61

néné06

XLDnaute Accro
Re : Ameliorer ma macro pour alimenter mon planning

Bonsoir Cpeens,

Essayes ces quelques modifications pour raccourcir ton code .

'Modification uniquement de la spécialité du doublon (de la ligne concernée)
If G1 > 0 and G1 < 32 Then
cel.Offset(0, 3+(G1*2)).Value = Format(CDate(M3.Value), "hh:nn:ss")
cel.Offset(0, 4+(G1*2)).Value = Format(CDate(M4.Value), "hh:nn:ss")
cel.Offset(0, 67).Value = M5
End If

valide2
gestion_nom.copie_nom

If G1 > 0 and G1 < 32 Then
.Cells(NL, 4+(G1*2)).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 5+(G1*2)).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If

'Fin de Select
End Select
'Fin du With
End With


A+

René
 
Dernière édition:

cpeens

XLDnaute Occasionnel
Re : Ameliorer ma macro pour alimenter mon planning

Bonjour néné06 merci pour l'aide que tu veut bien m'apporter.

J'ai tester donc ta solution et il semble qui y a un beug reference incorect ou non qualifier es ce que chez toi tu à la meme erreur svp merci.
 

Pièces jointes

  • Essais2.xls
    497.5 KB · Affichages: 59
  • Essais2.xls
    497.5 KB · Affichages: 55
  • Essais2.xls
    497.5 KB · Affichages: 55

néné06

XLDnaute Accro
Re : Ameliorer ma macro pour alimenter mon planning

Re,

J'ai simplement reduit une partie de ton code mais je n'ai pas regardé le code entier.

La partie ou cela plante est incomplète en code, Tu as un end With et il manque déja le WITH ?
Tu as un End Select et je ne vois pas de Select Case ?

valide2
gestion_nom.copie_nom

If G1 > 0 and G1 < 32 Then
.Cells(NL, 4+(G1*2)).Value = Format(CDate(M3.Value), "hh:nn:ss")
.Cells(NL, 5+(G1*2)).Value = Format(CDate(M4.Value), "hh:nn:ss")
.Cells(NL, 68).Value = M5
End If

'Fin de Select
End Select
'Fin du With
End With

A+

rené
 

néné06

XLDnaute Accro
Re : Ameliorer ma macro pour alimenter mon planning

Re,

Pour mieux comprendre ton code, il serait souhaitable que tu nous fasses parvenir ton classeur original qui fonctionnait et là, il sera facile de le renvoyer modifié et testé.

A+

René
 

néné06

XLDnaute Accro
Re : Ameliorer ma macro pour alimenter mon planning

Re,

Voici ton programme reduit, mais ton original plante deja.

J'ai simplement reduit le code sans corriger tes erreurs.
J'ai placé ton code en "Balises" pour qu'il soit mieux lisible.

Regardes et rectifie tes erreurs.

A+

René
 

Pièces jointes

  • Copie de Essais1-1.xls
    236 KB · Affichages: 55

Daes

XLDnaute Nouveau
Re : Ameliorer ma macro pour alimenter mon planning

Bonjour,

Je viens de lire votre message mais n'ayant quasi aucune notion en programmation j'ai un peu de mal à tout saisir.
Je me permets de poster suite à votre poste car je pense que mon problème est intimement lié au votre et je pense que vous pouvez m'aider à voir plus clair.

J'ai un tableau très simple de planning avec :
- en ligne les noms des formateurs (formateur1...)
- en colonne les jours (lundi, mardi...)
- et feuilles/onglets les semaines (c'est un fichier qui correspond au trimestre) donc environ 12 onglets pour 12 semaines différentes.
- dans les cellules je marque où ils sont affectés

J'ai donc une feuille pour une semaine récapitulant l'ensemble du planning de mes formateurs.

Mon objectif est de pouvoir extraire les données de toutes les feuilles concernant un seul formateur.
Par exemple ca serait de pouvoir extraire sur une nouvelle feuille (idéalement sur un nouveau classeur) l'emploi du temps du "formateur 3" pour chaque semaine. Comment faire pour avoir un résumé du planning d'une seule personne ? L'idéale serait de pouvoir lire la feuille récap comme ca : en ligne sem1, sem2, sem3... et en colonne lundi, mardi,mercredi... et ainsi voir en une seule feuille la totalité de son emploi du temps du trimestre afin de lui envoyer sans qu'il voit le planning des autres.

Si je n'ai pas été assez clair merci de me le préciser.

Merci de votre soutien et j'écoute toutes idées afin de réaliser ce processus.

Je me permets de link un exemple du dit tableau : (c) CJoint.com, 2012
 

Statistiques des forums

Discussions
314 486
Messages
2 110 107
Membres
110 666
dernier inscrit
Yaya123