Calage d'activités

Bonjour,

Je suis chargé de caler des activités.

Pour faire ces activités je dois respecter des tolérances de dates.

En fonction de la tolérance en découle les semaines où je peux effectuer ces activités.

Exemple :

Maintenance du moteur. Tolérances : du 11 mai 2015 au 2 août 2015.

Donc les semaines où je peux effectuer la maintenance du moteur sont : Sem20 ; Sem21 ; Sem22; .... ; et Sem31.

Actuellement je fais cette recherche de semaines "manuellement" (avec un calendrier). :s

Et j'aimerais donc que ce travail soit fais automatiquement par macro...

2ème choses :

Une fois que les semaines seront proposées par la macro (si possible), il y a encore un filtre a faire.

En effet, il faut non seulement respecter les tolérances mais aussi des semaines dédiées par rapport a un calendrier calé sur 8 semaines. Nous appellerons ce calendrier le calendrier calque.

Exemple :

Calendrier calque :

Sem1 : Visite armoire électrique (correspond à la semaine 01 du calendrier)

Sem2 : Maintenance des sécurités (semaine 02 du calendrier)

Sem3 : Contrôle protection (semaine 03 du calendrier)

Sem4 : Maintenance Moteur (semaine 04 du calendrier)

Sem5 : Maintenance Pompe (semaine 05 du calendrier)

Sem6 : Réglage (semaine 06 du calendrier)

Sem7 : Recherche défaut (semaine 07 du calendrier)

Sem8 : Contrôle des départs (semaine 08 du calendrier)

"et on recommence.."

Sem1 : visite armoire électrique (semaine 09 du calendrier)

(...) (semaine 10 du calendrier)

Donc pour mon moteur (suivant la feuille 2 du fichier excel) sont sélectionnées au final les semaines : Sem20 et Sem28.

J'ai essayé de faire un début de code, mais ça marche pas trop trop... :s

Sub Macro1()
'
' Macro1 Macro
'

'
Dim tolérancedébut As Date
Dim tolérancefin As Date

    With Sheets("Feuil1")

tolérancedébut = .Range("D" & Target.Row)
tolérancefin = .Range("E" & Target.Row)

         Dim Rng As Range, c As Range, firstAddress As String, Ws As Worksheet, Trouve As Boolean
         Set Ws = Worksheets("Feuil2")
            For Each Rng In Ws.Range("A2", Ws.Range("A" & Ws.Rows.Count).End(xlUp))
                Trouve = False
                With Worksheets("Feuil2").Range("B:B")
                  Set c = .Find(Rng, LookIn:=xlValues)
                   If Not c Is Nothing Then
                     firstAddress = c.Address
                       Do
                          If (.Range("A") >= tolérancedébut) And (Range("A") <= tolérancefin) Then

                          c = .Range("F")

                          End If

                          Set c = .FindNext(c)
                    Loop While Not c Is Nothing And c.Address <> firstAddress
                    End If
                End With
            Next Rng
    End With
End Sub

Merci d'avance pour votre aide,

Tchio!

171calage.zip (16.14 Ko)

Bonsoir

Pas de solution mais une question

Dans la Feuil2 le planning est valable pour n'importe quelle année ?

Bonjour,

Dans la feuil2 colonne A, ce n'est pas un planning, ce sont des activités, liées a des tolérances. Ces activité n'ont pas les mêMe tolérances chaque annee.

Par contre le planning calque colonne C sera le même a chaque fois.

Pour la macro, je me suis servi de ce forum et aussi d'autre sujet que j'avais déja posté ici..

J'ai essayé d'adapter, mais.. Pas facil..

Merci pour votre aide,

Tchio !

Bonjour

Tchio77 a écrit :

Ces activité n'ont pas les mêMe tolérances chaque annee

Donc indiques à quelle année correspondent ces tolérances

Tchio77 a écrit :

Par contre le planning calque colonne C sera le même a chaque fois.

Cela veut dire que si je choisis une année je colle en colonne C, à partir de la semaine 1, le cycle de 8 semaines et c'est bon ?

Merci pour ton aide,

J'ai mis le fichier excel a l'indice 2, et j'ai juste rajouté l'année pour les activités en colonne A, c'est bien le calendrier pour 2015, car les tolérance commence en 2015.

Oui, pour l'année 2016 par exemple, même planning pour la colonne C, on colle les 8 semaines a partir de la semaine 1.

Merci,

53calage2.zip (17.21 Ko)

Bonjour

Si je comprends bien

Tchio77 a écrit :

Oui, pour l'année 2016 par exemple, même planning pour la colonne C, on colle les 8 semaines a partir de la semaine 1.

Pour 2014 c'est la même planning alors ?

Tchio77 a écrit :

c'est bien le calendrier pour 2015, car les tolérance commence en 2015.

Pour 2015 il y a 53 semaines !!!!!

En fin d'année on efface tout et on recommence

Exemple

Dernière semaine de l'année 2015 --->Maintenance Moteur (Calque Sem4)

Première semaine de l'année 2016 ---> Visite armoire électrique (calque Sem1)

Les opérations du calque Sem5 à Sem8 ne seront pas faites - Exact ?

Possibilité de faire de la semaine 48 (année 2015) jusqu'à la semaine 10 (année 2016) pour être vraiment sur de la liaison sur 2 années consécutives

Oula !

j'ai fais des erreurs !

Tu a mis le doigt sur quelque chose que je n'est pas vu..

Déjà oui 53 semaines pour l'année 2015.

Pour le reste, enfaite, je me suis renseigné parce que apparemment j'avais mal compris.. désolé

Alors enfaite, déjà le calendrier calque commencera la semaine 9 de 2015.

Ce calendrier calque ne s'arrête jamais.

Donc la semaine 9 de 2015 correspond avec la semaine 1 du calendrier calque,

mais en 2016 ducoup, la semaine 9 correspondra avec la semaine 6 du calendrier calque.

Encore désolé, et merci pour ton aide..

J'ai donc modifié mon fichier.

49calage3.zip (19.12 Ko)

Bonjour

Tu n'as pas répondu

Banzai64 a écrit :

Pour 2014 c'est la même planning alors ?

Comment fait-on ?

Enfaite pour 2014 il n'y a pas de calendrier calque. Celui-ci se met en place que la semaine 9 de 2015. C'est bien sa ta question ?

Bonjour

Non ce n'est pas ma question

Tu as comme période du 29-nov-14 au 20-févr-15

Où trouver les semaines du calque ?

Ah d’accord excusez-moi, c'est une particularité.

Il faut la virer ce tableau, car cette maintenance :

Maintenance Pompe 29-nov-14 20-févr-15 48 8

Elle commence en 2014 sem48 (calendrier calque pas démarré) et se termine le 20 février 2015 sem8 (mais le calendrier calque n'est pas encore démarré non plus)

Donc en gros, cette maintenance je la cale quand je veux, en respectant bien sur juste les tolérances.

C'est une des particularités, car une fois que le calendrier calque est lancé on aura plus ce problème.

Je tiens à vous préciser que tout les maintenances ne sont pas écrites, il y a au moins 2000 activités différentes, mais c'est pour le principe, si vous arrivez a m'aider pour la macro, alors je l'adapterais..

Les 2000 activités, seront répartis dans les 8 sous domaines du calendrier calque.

Par exemple en activité j'ai mis que "maintenance moteur" mais enfaite c'est "maintenance moteur 1" et il y a aussi "maintenance moteur 2"; "maintenance moteur 3"...

Ces activités de maintenance moteur on chacune leurs tolérances, mais entrerons dans le sous domaine calendrier claque "maintenance moteur"

Merci,

Tchio!

Bonjour

A tester

Je vous remercie pour votre aide,

Le premier clique, qui a lancé votre macro ma stupéfié..

Je vais essayer d'analyser cette macro pour la comprendre et pouvoir l'adapter..

cela va surement prendre un peu de temps, si besoin je n'hésiterais pas a revenir ici !

Je reviendrais pour vous donner des nouvelles une fois testé sur le vrai fichier..

Ça a l'aire vraiment pas mal du tout !!

Génial !

Merci bien !

Tchio!

Bonjour,

J'ai décrypté chaque ligne de la macro afin de pouvoir la comprendre et l'adapter à mon "vrai" fichier..

En tout cas, c'est du très jolie travail ! Et merci pour le temps que vous avez passé.

Néanmoins.. il me reste un détail à modifier, enfaite, lorsque la macro copie :

 ' Copie le cycle de 8 semaines à partir de l'année de base (AnDep)
    For Ligne = 9 To Sem - 1 Step 8
      F2.Range("B2:C9").Copy Range("B" & Ligne)
    Next Ligne

Elle copie donc de le feuille2 B2:C9 vers la nouvelle feuille qu'elle a crée.

Le problème c'est que dans les cases B2 ; B3 ; B4 ; B5 ; B6 ; B7 ; B8 et B9, se sont des

=feuil3!A51

=feuil3!B51

=feuil3!C58

=.....

Il faudrait coller avec liaison, j'ai essayé dans le bout de code de rajouter link:=True mais sans succès...

Une idée ?

Merci,

Bonjour

Le tableau sur l'année 'dans Feuil2 est inutile

Il suffit d'avoir juste le cycle de 8 semaines sans liaisons, comme sur le dernier fichier que tu as envoyé

Sinon modifies la partie de code correspondante

    ' Copie le cycle de 8 semaines à partir de l'année de base (AnDep)
    F2.Range("B2:C9").Copy
    Range("B9").PasteSpecial Paste:=xlPasteValues

    For Ligne = 9 To Sem - 1 Step 8
      Range("B9:C16").Copy Range("B" & Ligne)
    Next Ligne

Oui, c'est ce que j'avais observé, de copier le tableau avant, mais je me disais qu'il y avait peut-être mieux à faire.. mais non ^^ :p

je vous embête une dernière fois, sur la recherche d'activité où j'ai un peu de mal a comprendre ce bout de code :

Set Cel = .Columns("B").Find(what:=F1.Range("A" & Ligne), LookIn:=xlValues, lookat:=xlWhole)
          If Not Cel Is Nothing Then

Recherche activité dans F2 ("B") par rapport à la F1 ("A")

Si la cellule n'est pas vie alors

ensuite ça se complique :

              If Cel.Offset(0, -1) >= SemDeb And Cel.Offset(0, -1) <= SemFin Then
                ' On note la semaine dans l'année et l'année
                F1.Cells(Ligne, Colonne) = Cel.Offset(0, 3) & " (" & Cel.Offset(0, 2) & ")"
                Colonne = Colonne + 1
              End If
              Set Cel = .Columns("B").FindNext(Cel)
            Loop While Depart <> Cel.Address 

J'ai du mal a savoir dans quelle feuille on est, avec les offsets..

Je ne voit pas le lien entre semainedébut-semainefin et les semaines proposées.

Dernière chose, toujours pour la recherche d'activité, je pense que la macro ne trouve pas l'activité car la cellule ne s’appelle pas simplement "maintenance moteur" mais c'est un =K3&" "&L3&" "&M3 afin de rassembler plusieurs activités.

exemple moteur1moteur2moteur3 mais je pense que au lieu de lire ça, elle lit et cherche =K3&" "&L3&" "&M3

Merci pour vote aide,

Bonjour

Tchio77 a écrit :

J'ai du mal a savoir dans quelle feuille on est, avec les offsets..

Les objets (Range) se rapportant à la feuille ajoutée commence par un . (point)

On fait la recherche dans la page ajoutée donc Cel se rapporte à la page ajoutée

Sinon les autres pages sont F1 et F2

Tchio77 a écrit :

Je ne voit pas le lien entre semainedébut-semainefin et les semaines proposées.

Et si il y un lien

Si semaine proposée est la 1 (année 2016), dans l'abstrait c'est aussi la semaine 54 (SemDeb) à partir de la semaine de l'année de base (année 2015)

Pour la semaine de fin (SemFin) c'est identique

Tchio77 a écrit :

Dernière chose, toujours pour la recherche d'activité, je pense que la macro ne trouve pas l'activité

Fournis le fichier avec ce problème que je teste

Merci pour tes explications,

je te met en pièce jointe le fichier, j'ai supprimer pleins de trucs car supérieur a 300ko

Merci,

14calage-2015.zip (58.85 Ko)

Bonjour

Regardes la formule en colonne N

A tester

Waou ! magnifique !

Je pense que ce sujet peut-être flagué résolu !

Je vous remercie pour votre précieuse aide !

Bonne continuation,

Cordialement,

Rechercher des sujets similaires à "calage activites"