Tableau prévisionnel

Bonjour à tous,

je suis en train de mettre en place un tableau prévisionnel et j'aimerai qu'il puisse se modifier suivant la date de prévision.

pas facile à expliquer, je met donc le tableau à télécharger.

Je me demande s'il faudrait pas faire du TCD ou du VBA, ce qui est loin d'être mon fort.

Merci d'avance pour vos réponses

Bonjour nico12,

Une solution par formule pour le mois de juillet dans le fichier suivant :

Bonjour,

Un essai en pièce jointe en VBA

121nico12.xlsm (58.32 Ko)

Bonne Journée

c'est super, exactement ce qu'il me fallait

un grand merci

juste une petite question : si je modifie la date dans le mois (après le dispatching), ça ne le prend pas en compte sur le global. je sais pas si c'est possible.

cordialement,

Re le fil

J'ai cogité pas mal sur ta problématique et il doit y avoir une solution mais je bute sur un petit problème

1/ Changement d'un mois sur l'autre : OK

2/ Suppression de la feuille Active: OK

3/ Mise en place de la ligne par rapport au mois sélectionné dans le feuille du mois sélectionné: OK

4/ Changement du mois dans la feuille "GLOBAL" par rapport au changement de la feuille active : PAS OK

Si des VBAÎstes passent par là, une aide serait bienvenue ... Bref...dites moi pourquoi cela ne fonctionne pas sur mon fichier

Dans le Module ThisWorkBook

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim DerLig As Long, C As Range
If ActiveSheet.Name = "GLOBAL" Then Exit Sub
On Error Resume Next
If Target.Count > 1 Then Exit Sub
With Sheets("GLOBAL")
Set C = .Columns("A").Find(What:=Target.Offset(, -3))
    C.Offset(, 3).Text = Target.Value
End With
DerLig = Sheets(UCase(Target)).Cells(Rows.Count, 1).End(xlUp).Row + 1
If Not Intersect(Target, Range("D5:D100")) Is Nothing Then
    If UCase(Target) <> ActiveSheet.Name Then Target.EntireRow.Cut Destination:=Sheets(CStr(Target)).Range("A" & DerLig)
End If
End Sub

Merci pour Nico12

Bonne Journée

43nico12.zip (52.33 Ko)
39nico12.zip (52.33 Ko)

Utilise la propriété Value plutôt que Text.

C.Offset(, 3).Value = Target.Value

et pas

C.Offset(, 3).[barrer]Text[/barrer] = Target.Value

De plus changer ceci n'est pas suffisant car à chaque fois que la ligne C.Offset(, 3).Value = Target.Value est exécutée, tu relances la procédure évènementielle indéfiniment.

Une solution serait de désactiver les procédures évènementielles avec l'instruction Application.EnableEvents mais ça peut être problématique si ton code bug.

Une autre solution pour pallier ce problème avec le code suivant :

Dim temoin As Boolean

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim DerLig As Long, C As Range
If temoin Then Exit Sub
If ActiveSheet.Name = "GLOBAL" Then Exit Sub
On Error Resume Next
If Target.Count > 1 Then Exit Sub
temoin = True
With Sheets("GLOBAL")
Set C = .Columns("A").Find(What:=Target.Offset(, -3))
    C.Offset(, 3).Value = Target.Value
End With
DerLig = Sheets(UCase(Target)).Cells(Rows.Count, 1).End(xlUp).Row + 1
If Not Intersect(Target, Range("D5:D100")) Is Nothing Then
    If UCase(Target) <> ActiveSheet.Name Then Target.EntireRow.Cut Destination:=Sheets(CStr(Target)).Range("A" & DerLig)
End If
temoin = False
End Sub

Bonjour,

Merci vba-new tu penses bien que j'avais déjà essayé avec .Value à la place de .Text mais Excel plantait régulièrement

Et c'est vrai avec un Boolean (j'y pense pas assez ) je comprend un peu mieux mon erreur

En espérant que cela convienne à nico12

Bonne Journée

Bonjour,

En espérant que cela convienne à nico12

juste au cas où tu ne l'aurais pas remarqué mais en suivant ce fil dans lequel je voulais répondre, nicol12 a cloturé le fil Mer Oct 05, 2011 10:58 am.

Amicalement

Rechercher des sujets similaires à "tableau previsionnel"