VBA - Courbe de production

Bonjour,

Je coince sur un mise en oeuvre de macro, certainement par une mauvaise formulation de question qui me mènerait à la réponse.

J'aurais aimé savoir de quel façon vous verrez le problème et quel serait les lignes à suivrent.

Problème: Je cherche à mettre à jour une table qui stock les points effectué et les points prévitionnels à faire pour créer un courbe de production.

J'aimerais que ce tableau soit aliment au quotidient via des extracts afin de mettre celle-ci à jour automatiquement.

Donc dans mon tableau d'archive qui est "Historique", je dois dans un premier temps chercher la date du jour pour commencer à appliquer ma formule et ainsi éviter d'écraser les données précédentes.

En deux, je dois appliquer ma formule à partir de cette date et en cas de valeur non trouver sur cette date reporter le chiffre précédent.

Euh, un peu compliquer à visualiser je pense, je vous mets un exemple détaillé qui sera plus parlant je pense...

Merci d'avance pour vos lumières,

Bruno

25courbe.xlsx (19.12 Ko)

bonjour

voir les calculs dans les cellules en jaune

pas de VBA

22courbe.xlsx (19.68 Ko)

Bonjour jmd,

Merci pour tes lumières, j'ai suivi ta logique mais je bloque un peu, j'ai tout mis en VBA mais j'ai du mal à sortir la valeur.

voici le code utilisé et le fichier mis à jour:

Sub Test()

Dim T As Range
Dim suite As Range
Dim ligne As Range
Dim plage As Range
Dim Colonne1 As Range

Set T = Sheets("Historic").Range("F1")
Set Colonne1 = Sheets("Base").Range(("A2"), Sheets("Base").Range("A2").End(xlDown))

    With Sheets("Historic").Columns("A:A")

    Set suite = .Find(T, LookIn:=xlValues) 'Rercherche la date du jour dans la colonne A

    Set ligne = suite.Offset(-1, 0) 'Selectionne la cellule au dessus de la cellule ayant la date du jour
    Set plage = suite.Offset(-1, 2) 'selectionne la valeur au dessus de la cellule jour de la colonne forecast
    suite.Offset(1, 2).Formula = "=IF(ISERROR(VLOOKUP(" & ligne.Address & ",'" & Colonne1.Parent.Name & "'!" & Colonne1.Resize(, 2).Address & ",2,FALSE))," & plage.Address & "," & plage.Address & "-(VLOOKUP(" & suite.Address & ",'" & Colonne1.Parent.Name & "'!" & Colonne1.Resize(, 2).Address & ",2,FALSE)))"

    End With

End Sub
12courbe.xlsm (22.54 Ko)

En fait si, j'ai pas respecté la formule que tu avais donné jmd, voici le code changé, manque plus qu'a trouver une solution pour étendre la formule a partir de la cellule écrite jusqu'à la fin par rapport à la colonne A.

[/Sub Test()

Dim T As Range
Dim suite As Range
Dim ligne As Range
Dim plage As Range
Dim Colonne1 As Range

Set T = Sheets("Historic").Range("F1")
Set Colonne1 = Sheets("Base").Range(("A2"), Sheets("Base").Range("A2").End(xlDown))

    With Sheets("Historic").Columns("A:A")

    Set suite = .Find(T, LookIn:=xlValues) 'Rercherche la date du jour dans la colonne A

    Set ligne = suite.Offset(0, 0) 'Selectionne la cellule au dessus de la cellule ayant la date du jour
    Set plage = suite.Offset(0 2) 'selectionne la valeur au dessus de la cellule jour de la colonne forecast

    suite.Offset(1, 2).Formula = "=IF(ISERROR(VLOOKUP(" & ligne.Address & ",'" & Colonne1.Parent.Name & "'!" & Colonne1.Resize(, 2).Address & ",2,FALSE))," & plage.Address & "," & plage.Address & "-(VLOOKUP(" & suite.Address & ",'" & Colonne1.Parent.Name & "'!" & Colonne1.Resize(, 2).Address & ",2,FALSE)))"

    End With

End Sub

Update:

J'ai réussi à faire ce que je voulais, bon peut être que c'est pas l'une des meilleurs méthode mais ça marche.

Voici le code utilisé:

Sub Test()

Dim T As Range
Dim suite As Range
Dim Lrow As Long

Set T = Sheets("Historic").Range("F1") '------ Rercherche la cellule contenant la date du jour
'------------------------------------------------------ Recherche la date du jour et efface la cellule
    With Sheets("Historic").Columns("A:A")
        Set suite = .Find(T, LookIn:=xlValues)
        suite.Offset(1, 2).Value = ""
    End With
'------------------------------------------------------ extension de l'effacement à partir de la cellule trouvé avant remplissage
Lrow = Range("A" & Rows.Count).End(xlUp).Row
 With suite.Offset(1, 2)
 .AutoFill Destination:=Range(Cells(.Row, .Column), Cells(Lrow, .Column))
 End With

'------------- Recherche la date du jour et applique la formule à partir de cette date
    With Sheets("Historic").Columns("A:A")
    Set suite = .Find(T, LookIn:=xlValues) 'Rercherche la date du jour dans la colonne A
    suite.Offset(1, 2).Formula = "=IF(ISERROR(VLOOKUP(Historic!R[-1]C[-2],Base!C[-2]:C[-1],2,FALSE)),Historic!R[-1]C[0],Historic!R[-1]C[0]-(VLOOKUP(Historic!R[-1]C[-2],Base!C[-2]:C[-1],2,FALSE)))"
    End With
'------------------------------------------------------ Extension de la formule jusqu'à la fin de la feuille par rapport à la colonne A
Lrow = Range("A" & Rows.Count).End(xlUp).Row
 With suite.Offset(1, 2)
 .AutoFill Destination:=Range(Cells(.Row, .Column), Cells(Lrow, .Column))
 End With

End Sub
25courbe.xlsm (21.38 Ko)

re

pourquoi avoir du VBA alors qu'on peut s'en passer avec des formules à base de SI ?

Parce qu'en réalité j'ai plus de 100 lignes à mettre à jour et que la mise à jour se fait quotidiennement.

Merci en tout cas pour ton aide sa ma permis d'avoir une bonne démarche à suivre et comment penser.

Rechercher des sujets similaires à "vba courbe production"