Aide pour macro

dirmon

XLDnaute Junior
Bonjour à tous,

J'ai besoin de changer une macro sur le fichier Planning SSiad que j'ai modifié pour mes besoins perso.

Etant novice en la matière je fais appel à vous.

Je m'explique :
Sur la feuille roulement j'ai plusieurs boutons "Roulement" qui commandent la copie d'une ligne (la première) sur une autre ligne d'une autre feuille via un calendrier.

Je souhaite que chaque bouton puisse désormais copier non pas la première mais les quatres premières en même temps suivant la date demandé.

Merci par avance pour votre aide précieuse

Dirmon

Ci-joint fichier

Cijoint.fr - Service gratuit de dépôt de fichiers
 

job75

XLDnaute Barbatruc
Re : Aide pour macro

Bonjour dirmon,

En regardant un peu le fichier et les macros, on comprend pourquoi il fait près de 13 Mo. L'auteur est un vrai stakhanoviste d'Excel, tous mes compliments.

Par contre pour trouver où et comment se fait la copie de la ligne comme vous le dites, il faut s'accrocher aux branches. J'ai abandonné.

A+
 

dirmon

XLDnaute Junior
Re : Aide pour macro

Bonjour Job75 et merci de t'être interessé à mon problème

En scrutant les macros de mon fichier je remarquer les choses suivantes :

les boutons "roulement"sont commandés par une ligne de commande qui se situe dans la feuille Roulement

Sub CbtRoulementsal1_Click()
UfChoixDate.TxbLigneRoulements = 5
UfChoixDate.Show
End Sub


qui renvoit sur la procedure suivante

Sub CopieRoulement(Ligne)

Jrladate = Weekday(TxbChoixDate.Value)
If Jrladate <> 2 Then
MsgBox ("La date Choisie n'est pas un lundi, recommencez !")
UfChoixDate.TxbChoixDate.SetFocus
UfChoixDate.TxbChoixDate.SelStart = 0
UfChoixDate.TxbChoixDate.SelLength = Len(TxbChoixDate)
GoTo fin
End If

Mladate = Month(TxbChoixDate.Value) 'N° du mois
Dladate = Day(TxbChoixDate.Value) 'N° du jour
Jladate = Dladate + 3 'Le jour sur la feuille du mois
indexfeuille = Mladate + 4
CellColRoul = 4
Numladate = Sheets(indexfeuille).Cells(3, Jladate)
Finladate = Decembre.Range("AH3")
NbrJours = Finladate - Numladate + 1
For I = 1 To NbrJours
Sheets(indexfeuille).Cells(Ligne, Jladate) = Roulements.Cells(Ligne, CellColRoul)

'Sheets(indexfeuille).Cells(Ligne, Jladate).Select
Sheets(indexfeuille).Select
Cells(Ligne, Jladate).Select
'Sheets(indexfeuille).Cells(Ligne, Jladate).Interior.ColorIndex = Cells(Ligne, CellColRoul).Interior.ColorIndex
If Mladate = 1 Then 'Janvier
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 2 Then 'Février
If Day(Worksheets("Février").Range("AF3")) = 29 Then 'Vérifie si février à 29 jours
If Jladate = 32 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
Else
If Jladate = 31 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
End If
ElseIf Mladate = 3 Then 'Mars
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 4 Then 'Avril
If Jladate = 33 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 5 Then 'Mai
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 6 Then 'Juin
If Jladate = 33 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 7 Then 'Juillet
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 8 Then 'Aout
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 9 Then 'Septembre
If Jladate = 33 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 10 Then 'Octobre
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 11 Then 'Novembre
If Jladate = 33 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If

End If
If CellColRoul = 31 Then
CellColRoul = 3
End If
Jladate = Jladate + 1
CellColRoul = CellColRoul + 1
Next I
UfChoixDate.Hide
fin:
End Sub


Je vous renvoie le fichier modifié car je me suis aperçu qu'il me manquait des lignes entre ma feuille Roulement et mes feuilles Mois.

Je remercie les gens qui passent du temps sur ce problème car je patauge pour trouver une solution

Cijoint.fr - Service gratuit de dépôt de fichiers


Dirmon
 

skoobi

XLDnaute Barbatruc
Re : Aide pour macro

Bonjour dirmon, salur job75:),

Je pense que tu veux ceci (bouton valider de l'usf "UfChoixDate").
Sacré travail comme le dis job75!!!

Code:
Sub CbtValidChoix_Click()
For Ligne = UfChoixDate.TxbLigneRoulements.Value To UfChoixDate.TxbLigneRoulements.Value + 3
  Call CopieRoulement(Ligne)
Next
'UfChoixDate.Hide
End Sub
 

dirmon

XLDnaute Junior
Re : Aide pour macro

Bonjour Skoobi,

Désolé de ne pas avoir repondu plutot,j'ai pris queleques vacances.

Ta procédure est nickel et cela fonctionne parfaitement

Je te remercie beaucoup pour le coup de main et ferais certainement appel à toi pour d'autres modifs futures.

A plus
 

dirmon

XLDnaute Junior
Re : Aide pour macro

Bonjour,

Je reviens vers vous pour une modification importante sur l'onglet Roulement de mon planning

Comme je l'expliquai plus haut, chaque bouton vert "Roulement" commande l'ouverture d'un calendrier sur lequel on indique la date "lundi obligatoire" à partir de laquelle on lance le roulement.

Ce dernier se termine systématiquement sur le dernier jour de décembre.

Je souhaiterais pouvoir définir une date de fin qui serait par défaut sur la date du 31.12

L'Userform et la macro sont à modifier mais je ne s'est pas par quel bout le prendre.

L'userform s'appelle Ufchoixdate
Le macro est la suivante :

Sub CopieRoulement(Ligne)

Jrladate = Weekday(TxbChoixDate.Value)
If Jrladate <> 2 Then
MsgBox ("La date Choisie n'est pas un lundi, recommencez !")
UfChoixDate.TxbChoixDate.SetFocus
UfChoixDate.TxbChoixDate.SelStart = 0
UfChoixDate.TxbChoixDate.SelLength = Len(TxbChoixDate)
GoTo fin
End If

Mladate = Month(TxbChoixDate.Value) 'N° du mois
Dladate = Day(TxbChoixDate.Value) 'N° du jour
Jladate = Dladate + 3 'Le jour sur la feuille du mois
indexfeuille = Mladate + 4
CellColRoul = 4
Numladate = Sheets(indexfeuille).Cells(3, Jladate)
Finladate = Decembre.Range("AH3")
NbrJours = Finladate - Numladate + 1
For I = 1 To NbrJours
Sheets(indexfeuille).Cells(Ligne, Jladate) = Roulements.Cells(Ligne, CellColRoul)

'Sheets(indexfeuille).Cells(Ligne, Jladate).Select
Sheets(indexfeuille).Select
Cells(Ligne, Jladate).Select
'Sheets(indexfeuille).Cells(Ligne, Jladate).Interior.ColorIndex = Cells(Ligne, CellColRoul).Interior.ColorIndex
If Mladate = 1 Then 'Janvier
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 2 Then 'Février
If Day(Worksheets("Février").Range("AF3")) = 29 Then 'Vérifie si février à 29 jours
If Jladate = 32 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
Else
If Jladate = 31 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
End If
ElseIf Mladate = 3 Then 'Mars
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 4 Then 'Avril
If Jladate = 33 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 5 Then 'Mai
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 6 Then 'Juin
If Jladate = 33 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 7 Then 'Juillet
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 8 Then 'Aout
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 9 Then 'Septembre
If Jladate = 33 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 10 Then 'Octobre
If Jladate = 34 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If
ElseIf Mladate = 11 Then 'Novembre
If Jladate = 33 Then
indexfeuille = indexfeuille + 1
Jladate = 3
Mladate = Mladate + 1
End If

End If
If CellColRoul = 31 Then
CellColRoul = 3
End If
Jladate = Jladate + 1
CellColRoul = CellColRoul + 1
Next I
UfChoixDate.Hide
fin:
End Sub

Je vous transmets le dernier fichier pour m'aider à faire les modifs

Merci par avance

Dirmon

Cijoint.fr - Service gratuit de dépôt de fichiers
 

Paritec

XLDnaute Barbatruc
Re : Aide pour macro

Bonjour dirmon, le forum,
Tu sais moi j'ai ouvert ton fichier, et tu n'as mis aucune explications dedans,
de ce que tu as et de ce que tu veux obtenir.
alors quand il faut jongler a essayer de comprendre ce qu'il y a dans ton fichier et repartir sur le forum pour lire le post et le comprendre!!!
Alors les autres font comme moi ils ouvrent ne comprennent pas bien et ferme et surtout passent leur chemin.
sur ce forum si tu n'as pas de réponses c'est que tu ne fais pas ce qu'il faut pour en avoir c'est sur.
a+
Papou :rolleyes:
 

Discussions similaires

Réponses
7
Affichages
301
Réponses
3
Affichages
432

Statistiques des forums

Discussions
312 333
Messages
2 087 370
Membres
103 528
dernier inscrit
maro