calendrier excel

Laetitia L

XLDnaute Junior
Bonjour à tous,
Je travaille toujours sur un calendrier automatisé sur Excel.
Ma question est assez complexe, j'espère que quelqu'un pourra m'aider
Sur l'onglet calendrier, un calendrier automatisé renvoi aux dates de l'onglet "instructions" avec une liste de lieux sur chaque dates.
Je souhaiterai que si on renseigne un nombre de jours dans les colonnes D du calendrier, ce nombre apparaisse sur la bonne cellule de l'onglet instruction en fonction du lieux et de la date. Ce qui permettrait alors de décaler automatiquement le lieux dans le calendrier.
D'autre part, certains lieux ne peuvent être fixés que sur certains jours de la semaine. Il faudrait alors que ce décalage ne puisse se faire que sur les jours indiqués. Et certains lieux n'ont pas de particularité, je peux les décaler du nombre de jours que je souhaite.

J'espère que je ne vous ai pas perdu avec mes explications
Le fichier est en PJ
 

Pièces jointes

  • PROGRAMMATION-MAJ 2 - Copie.xlsx
    4.3 MB · Affichages: 107

vgendron

XLDnaute Barbatruc
Hello

1) Je ne comprends pas à quoi correspond le chiffre en B20
faut chercher un minimum quand meme... suffit de regarder l'aide de la fonction "jour.sem"...
ca te donne le numéro du jour de la semaine...Lundi = 1, mardi = 2...dimanche =7
l'option ;2 permet de dire que la semaine commence au Lundi.et pas au dimanche comme le font les Américans.

2) Il y a toujours un problème avec le nombre de P dans la feuille calendrier qui donne le nom du lieux alors qu'il faut un chiffre, lié à l'onglet TableP.
problème de formule.. mois().. doit etre remplacé par mois()+1
sinon. décalage dans le résultat.. ==> tu aurais du remarquer que là où il y a des chiffres.. ce n'est pas bon non plus, puisque ca donnait le résultat du mois précédent..


3) Dans la feuille "calendrier", la colonne R "instructions 1ere collecte", certaines collectes que j'ai mis en fond bleu, ne prennent pas en compte le jour dit en colonne H
dans ta colonne H, les jours "Lundi, mardi..." des cellules à problème sont écrits avec un espace à la fin...
il faut les enlever..

Dans ta feuille "Calendrier"
à quoi servent les tableaux d'en bas (avec lignes de 7 à 15) ?
la formule me semble pas bonne..? un copier coller avec des références absolues dans la formule (absolues = avec des $) (je n'ai corrigé QUE le 31 décembre: B93:B102

du coup.. quel intérêt de recopier - Recalculer les meme infos..?
 

Pièces jointes

  • PROGRAMMATION-MAJ 5.xlsm
    4.3 MB · Affichages: 24

vgendron

XLDnaute Barbatruc
J'en profite pour te signaler quelques incohérences.. peut etre est ce normal..
Feuille "Dates" Colonne G:
parfois il y a une formule, parfois c'est une date saisie à la main..? de ce que je vois, c'est pour une "1ere date en colonne F"
je te propose une formule en colnone H == qui donne quelques écarts (colonne I) ==à voir si il y a des erreurs de saisie dans la colonne G..?
idem.. colonne F: il y avait des espaces à la fin de chaque ligne..
j'en ai aussi profité pour réduire la taille des images
 

Pièces jointes

  • PROGRAMMATION-MAJ 5.xlsm
    1.8 MB · Affichages: 34

Laetitia L

XLDnaute Junior
Bonjour,
Je reviens vers vous car j'ai mis à jour l'onglet "instruction", j'ai du rajouter des dates, il y a donc plus de colonnes.
Cependant, je n'arrive pas à changer la formule du calendrier pour rajouter les colonnes. J'ai pourtant nommé les collectes de 8 à 14 qui n'existaient pas avant mais en les rajoutant dans la formule, ça ne fonctionne plus.
Je pense qu'il faudra ensuite changer la macro.
Pourriez-vous m'expliquer ce qui va changer pour que je puisse le faire si jamais il y a encore des modifications.
Je vous remercie par avance
(le fichier est en pj)
 

Pièces jointes

  • PROGRAMMATION-MAJ 7.xlsm
    1.3 MB · Affichages: 24

vgendron

XLDnaute Barbatruc
Hello

Alors.. honnetement. je ne sais plus ou on en était dans la discussion..
quand je reprend le dernier fichier que j'ai posté. ca bug...??..

si tu as ajouté des colonnes dans la feuille Instruction, je pense qu'il faut modifier la zone "TabInst" pour qu'elle englobe toutes les colonnes
 

Laetitia L

XLDnaute Junior
Très bien, j'ai fait le changement.
La macro me pose un réel problème. Pourriez vous me l'expliquer ? ou y aurait-il un autre moyen d'arriver au même résultat avec une formule ?
(fichier en PJ)
 

Pièces jointes

  • PROGRAMMATION-MAJ 7.xlsm
    1.3 MB · Affichages: 34

vgendron

XLDnaute Barbatruc
avec plus de commentaires
VB:
Sub DécalageToInstructions()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

With Sheets("Calendrier")
    nbcol = .Range("TabCalend").Columns.Count 'nb de colonnes dans la zone TabCalend
    nblig = .Range("TabCalend").Rows.Count 'Nb de lignes à parcourir dans la zone TabCalend
    For i = 1 To nbcol Step 4 'on parcourt les dates de la zone "TabCalend" qui sont une colonne sur 4
        For j = 1 To nblig 'pour chaque ligne
            ville = .Range("TabCalend").Item(j + 1, i) 'on récupère la ville
            IndJour = (Int(j / 9) Mod 9) * 9 'numéro de ligne de la date à prendre en compte
            Jour = .Range("TabCalend").Item(IndJour + 1, i) 'la date
            decalage = .Range("TabCalend").Item(j + 1, i + 1) 'on récupère le décalage
             If ville <> "" And decalage <> "" Then 'si il y a une ville ET un décalage
                With Sheets("instructions") 'dans la feuille Instructions
                    Set ici = .Range("TabInst").Find(ville, lookat:=xlWhole) 'on cherche le nom EXACT de la ville
                    If Not ici Is Nothing Then 'si on l'a trouvée
                        .Range("P" & ici.Row) = decalage 'on met le décalage dans la colonne P de la meme ligne
                    End If
                End With
                .Range("TabCalend").Item(j + 1, i + 1).ClearContents 'on efface le décalage de la feuille Calendrier
            End If
        Next j
    Next i
End With

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub
 

Laetitia L

XLDnaute Junior
Hello
Dans l'onglet "calendrier" pour les formules dans les lieux de collectes, la formule :
--> =SIERREUR(INDEX(lieux_collectes;PETITE.VALEUR(SI((ESTNUM(CHERCHE(Calendrier!B$38;ENT(Premiere_collecte:Deuxieme_collecte:Troisieme_collecte:Quatrieme_collecte:Cinquieme_collecte:Sixieme_collecte:Septieme_collecte))))*(NB.SI(B$38:B38;lieux_collectes)=0);LIGNE(lieux_collectes)-1);1));"")
ne prend en compte que les collectes jusqu'à la 7eme, j'en ai rajouté d'autres, il faut donc aller jusqu'à la 14ème collecte, je les ai nommé pour pouvoir les intégrer dans cette formule, mais ça ne fonctionne pas
 

vgendron

XLDnaute Barbatruc
Dans la version ci jointe (Rev8)
j'ai repris mon dernier fichier qui fonctionnait avec les macros modifiées
et j'ai ajouté UNE collecte (j'ai modifié les noms. Collecte_xx) et changé leur définittion. plus simple à recopier

j'ai donc aussi modifié la formule pour le 31 décembre 2018
et j'ai toujours le meme (bon?) résultat..
il faut juste penser à faire F9 pour recalculer la feuille.. ton fichier était passé en mode calcul manuel..
 

Pièces jointes

  • PROGRAMMATION-MAJ Rev8.xlsm
    4.3 MB · Affichages: 29

Laetitia L

XLDnaute Junior
Merci, j'ai remodifié la formule pour qu'il puisse prendre toutes les colonnes des collectes.
Mais la macro décalage ne fonctionne pas. Pouvez vous faire quelque chose ? (utiliser le fichier en pj)
 

Pièces jointes

  • PROGRAMMATION-MAJ 7.xlsm
    1.3 MB · Affichages: 26

vgendron

XLDnaute Barbatruc
Ci jointe LA macro
VB:
Sub DécalageToInstructions()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

With Sheets("Calendrier")
    nbcol = .Range("TabCalend").Columns.Count 'nb de colonnes dans la zone TabCalend
    nblig = .Range("TabCalend").Rows.Count 'Nb de lignes à parcourir dans la zone TabCalend
    For i = 1 To nbcol Step 4 'on parcourt les dates de la zone "TabCalend" qui sont une colonne sur 4
        For j = 1 To nblig 'pour chaque ligne
            ville = .Range("TabCalend").Item(j + 1, i) 'on récupère la ville
            IndJour = (Int(j / 9) Mod 9) * 9 'numéro de ligne de la date à prendre en compte
            Jour = .Range("TabCalend").Item(IndJour + 1, i) 'la date
            decalage = .Range("TabCalend").Item(j + 1, i + 1) 'on récupère le décalage
             If ville <> "" And decalage <> "" Then 'si il y a une ville ET un décalage
                With Sheets("instructions") 'dans la feuille Instructions
                    Set ici = .Range("TabInst").Find(ville, lookat:=xlWhole) 'on cherche le nom EXACT de la ville
                    If Not ici Is Nothing Then 'si on l'a trouvée
                        .Range("P" & ici.Row) = decalage 'on met le décalage dans la colonne P de la meme ligne
                    End If
                End With
                .Range("TabCalend").Item(j + 1, i + 1).ClearContents 'on efface le décalage de la feuille Calendrier
            End If
        Next j
    Next i
End With

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub


et evidemment.. si tu ajoutes des colonnes (Q entre les dates et le Decalage) sans prévenir.. ca va pas bien fonctionner..
et je ne m'amuse pas à comparer ligne à ligne et colonne à colonne toutes les versions de fichier qui sont envoyées...donc.. si la structure du fichier change.. je ne le vois pas...
 

Discussions similaires

Statistiques des forums

Discussions
312 047
Messages
2 084 864
Membres
102 690
dernier inscrit
souleymaane