Problème de syntaxe et d'expérience

Bonjour à tous,

J'utilise Excel depuis deux ou trois ans mais je n'ai découvert la grande utilité des macro il y a seulement une semaine ce qui vous donne une idée de mon niveau. J'ai néanmoins déjà programmé en python mais certaines choses n'ont rien à voir. C'est pour cela que j'ai besoin de votre aide pour essaye de me corriger au niveau de la syntaxe et de mes méthodes. J'ai fais quelques fonction pour pouvoir les utiliser dans une macro mais le problème c'est qu'il y a de multiples erreur et des que j'en corrige une une autre apparait. problème de définition de variable problème d'objet ...

j’espère que vous pourrez m'aider comme vous pouvez le voir les fonctions sont semblable en m'expliquant pour une d'entre elle je devrai me débrouiller pour modifier les autres j’apprends vite.

Function PREDICTION_QUOTIDIENNE(Cell)

    Dim c As Integer, X_connus As Range, Y_connus As Range, l As Integer, x As Date
    c = 3
    Colonne = Cell.Column
    Ligne = Cell.Row
    x = Range(Cells(3, Colonne))

    While Not Cells(2, c) = ""
        If Sheets("ventes 2015").Cells(2, c) = Sheets("prévisions 2015").Range(Cell) Then
            X_connus = Union(X_connus, Sheets("ventes 2015").Cells(3, c))
            Y_connus = Union(Y_connus, Sheets("ventes 2015").Cells(Ligne, c))
        End If
        MsgBox ("X_connus =" & X_connus & " et Y_connus =" & "Y_connus.")
        c = c + 1
    Wend

    PREDICTION_QUOTIDIENNE(Cell) = Application.WorksheetFunction.Forecast(x, Y_connus, X_connus)

End Function

Function PREDICTION_BILAN(Cell)

    Dim c As Integer, X_connus As Range, Y_connus As Range, l As Integer, x As Date
    Colonne = Cell.Column
    Ligne = Cell.Row
    x = Cells(3, Colonne)
    c = 3

    While Not Sheets("ventes 2015").Cells(2, c) = ""
        X_connus = Union(X_connus, Sheets("ventes 2015").Cells(3, c))
        Y_connus = Union(Y_connus, Sheets("ventes 2015").Cells(Ligne, c))
        MsgBox ("X_connus =" & X_connus & " et Y_connus =" & "Y_connus.")
        c = c + 1
    Wend

    PREDICTION_BILAN(Cell) = Application.WorksheetFunction.Forecast(x, Y_connus, X_connus)

End Function

Function MOYENNE_QUOTIDIENNE(Cell)

    Dim c As Integer, Plage_Moyenne_Quotidienne As Range, l As Integer
    Ligne = Cell.Row
    c = 3

    While Not Sheets("ventes 2015").Cells(2, c) = ""
        If Sheets("ventes 2015").Cells(2, c) = Sheets("prévisions 2015").Range(Cell) Then
            Plage_Moyenne_Quotidienne = Union(Plage_Moyenne_Quotidienne, Sheets("ventes 2015").Range(Cells(Ligne, c)))
        End If
        MsgBox ("Plage_Moyenne_Quotidienne = " & Plage_Moyenne_Quotidienne & ".")
        c = c + 1
    Wend

    MOYENNE_QUOTIDIENNE(Cell) = Application.WorksheetFunction.Average(Plage_Moyenne_Quotidienne)

End Function
Function MOYENNE_BILAN(Cell)

    Dim c As Integer, Plage_Moyenne_Bilan As Range, Ligne As Integer
    c = 3
    Ligne = Cell.Row

    While Not Sheets("ventes 2015").Cells(2, c) = ""
            Plage_Moyenne_Bilan = Union(Plage_Moyenne_Bilan, Sheets("ventes 2015").Range(Cells(Ligne, c)))
            MsgBox ("Plage_Moyenne_Bilan = " & Plage_Moyenne_Bilan & ".")
            c = c + 1
    Wend

    MOYENNE_BILAN(Cell) = Application.WorksheetFunction.Average(Plage_Moyenne_Bilan)

End Function
Function CALCUL_PREVISION(Cell)

    CALCUL_PREVISION(Cell) = Application.WorksheetFunction.Average(MOYENNE_BILAN(Cell), MOYENNE_QUOTIDIENNE(Cell), PREDICTION_BILAN(Cell), PREDICTION_QUOTIDIENNE(Cell))

End Function
Sub CALCUL_PREVISIONS()

    For i = 6 To 26
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

    For i = 29 To 52
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

    For i = 55 To 67
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

    For i = 69 To 77
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

End Sub

pour l'instant il m'affiche Erreur définie par l'application ou par l'objet pour cette partie

While Not Sheets("ventes 2015").Cells(2, c) = ""
            Plage_Moyenne_Bilan = Union(Plage_Moyenne_Bilan, Sheets("ventes 2015").Range(Cells(Ligne, c)))
            MsgBox ("Plage_Moyenne_Bilan = " & Plage_Moyenne_Bilan & ".")
            c = c + 1
    Wend

au niveau de Plage_Moyenne_Bilan = Union(Plage_Moyenne_Bilan, Sheets("ventes 2015").Range(Cells(Ligne, c))).

Bonsoir et bienvenu(e)

Je n'ai pas tout regardé mais quelques précisons sur Union

Pour réunir plusieurs plages il faut que toutes les plages soient déjà initialisées

La première fois que le code est exécuté, la plage Plage_Moyenne_Bilan n'est pas initialisée

Plage_Moyenne_Bilan = Union(Plage_Moyenne_Bilan, Sheets("ventes 2015").Range(Cells(Ligne, c)))

Donc il faut tester cette initialisation

  While Not Sheets("ventes 2015").Cells(2, c) = ""
    If Plage_Moyenne_Bilan Is Nothing Then
      [surligner=#FFFFBF]Set Plage_Moyenne_Bilan = Sheets("ventes 2015").Cells(Ligne, c)
    Else
      [surligner=#FFFFBF]Set Plage_Moyenne_Bilan = Union(Plage_Moyenne_Bilan, Sheets("ventes 2015").Cells(Ligne, c))
    End If
    MsgBox ("Plage_Moyenne_Bilan = " & Plage_Moyenne_Bilan.[surligner=#80FFFF]Address & ".")
    c = c + 1
  Wend

Pour les objets de type Worksheet, Range ... leur initialisation passe par l'instruction Set

Enfin Range(Cells(Ligne,c)) n'existe pas c'est soit Range soit Cells (des fois il y a un mélange des 2, utilisé pour définir une plage )

Address est la propriété de l'objet Range pour connaitre son étendue

Merci pour votre réponse mais comment je peux faire si je pars d'une plage vide alors pour ensuite y mettre toutes les cellules qui correspondent à la condition que j'ai mis en place je ne savais pas comment faire?

De plus je n'ai pas très bien compris l'utilisation du set à chaque fois il m'affiche des erreurs.

Bonsoir

La macro que je t'ai fourni fonctionne bien

Il faut penser à corriger toutes tes macros dans le même style

Sinon fournis ton fichier

Merci je vais essayer d'apporter les corrections moi même cela me permettra de mieux comprendre et d'apprendre cela sera plus bénéfique pour moi mais merci en tout cas.

voilà j'ai effectué les modification malheureusement la macro va dans la fonction:

-CALCUL_PREVISION(Cell)

puis

-MOYENNE_BILAN(Cell)

mais ensuite elle n'en sort plus. J'avais cherché sur les forum comment utiliser un return pour que la fonction renvoie une valeur mais ils disent partout qu'il faut mettre le nom de la fonction = la valeur qu'on veut retourner mais la une fois qu'il sort de la boucle dans la fonction MOYENNE_BILAN(Cell) il va sur la ligne MOYENNE_BILAN(Cell) = Application.WorksheetFunction.Average(Plage_Moyenne_Bilan)

et il repars indéfiniment.

Function PREDICTION_QUOTIDIENNE(Cell)

    Dim c As Integer, X_connus As Range, Y_connus As Range, l As Integer, x As Date
    c = 3
    Colonne = Cell.Column
    Ligne = Cell.Row
    x = Cells(3, Colonne)

    While Not Cells(2, c) = ""
        If Sheets("ventes 2015").Cells(2, c) = Sheets("prévisions 2015").Range(Cell) Then
            If X_connus Is Nothing Then
                Set X_connus = Sheets("ventes 2015").Cells(3, c)
                Set Y_connus = Sheets("ventes 2015").Cells(Ligne, c)
            Else
                Set X_connus = Union(X_connus, Sheets("ventes 2015").Cells(3, c))
                Set Y_connus = Union(Y_connus, Sheets("ventes 2015").Cells(Ligne, c))
            End If
        End If
        MsgBox ("X_connus =" & X_connus & " et Y_connus =" & "Y_connus.")
        c = c + 1
    Wend

    PREDICTION_QUOTIDIENNE(Cell) = Application.WorksheetFunction.Forecast(x, Y_connus, X_connus)

End Function

Function PREDICTION_BILAN(Cell)

    Dim c As Integer, X_connus As Range, Y_connus As Range, l As Integer, x As Date
    Colonne = Cell.Column
    Ligne = Cell.Row
    x = Cells(3, Colonne)
    c = 3

    While Not Sheets("ventes 2015").Cells(2, c) = ""
            If X_connus Is Nothing Then
                Set X_connus = Sheets("ventes 2015").Cells(3, c)
                Set Y_connus = Sheets("ventes 2015").Cells(Ligne, c)
            Else
                Set X_connus = Union(X_connus, Sheets("ventes 2015").Cells(3, c))
                Set Y_connus = Union(Y_connus, Sheets("ventes 2015").Cells(Ligne, c))
            End If
        MsgBox ("X_connus =" & X_connus & " et Y_connus =" & "Y_connus.")
        c = c + 1
    Wend

    PREDICTION_BILAN(Cell) = Application.WorksheetFunction.Forecast(x, Y_connus, X_connus)

End Function

Function MOYENNE_QUOTIDIENNE(Cell)

    Dim c As Integer, Plage_Moyenne_Quotidienne As Range, l As Integer
    Ligne = Cell.Row
    c = 3

    While Not Sheets("ventes 2015").Cells(2, c) = ""
        If Sheets("ventes 2015").Cells(2, c) = Sheets("prévisions 2015").Range(Cell) Then
            If Plage_Moyenne_Bilan Is Nothing Then
                Set Plage_Moyenne_Quotidienne = Sheets("ventes 2015").Cells(Ligne, c)
            Else
                Set Plage_Moyenne_Quotidienne = Union(Plage_Moyenne_Quotidienne, Sheets("ventes 2015").Cells(Ligne, c))
             End If
        End If
        MsgBox ("Plage_Moyenne_Quotidienne = " & Plage_Moyenne_Quotidienne & ".")
        c = c + 1
    Wend

    MOYENNE_QUOTIDIENNE(Cell) = Application.WorksheetFunction.Average(Plage_Moyenne_Quotidienne)

End Function
Function MOYENNE_BILAN(Cell)

    Dim c As Integer, Plage_Moyenne_Bilan As Range, Ligne As Integer
    c = 3
    Ligne = Cell.Row

    While Not Sheets("ventes 2015").Cells(2, c) = ""
        If Plage_Moyenne_Bilan Is Nothing Then
          Set Plage_Moyenne_Bilan = Sheets("ventes 2015").Cells(Ligne, c)
        Else
          Set Plage_Moyenne_Bilan = Union(Plage_Moyenne_Bilan, Sheets("ventes 2015").Cells(Ligne, c))
        End If
        MsgBox ("Plage_Moyenne_Bilan = " & Plage_Moyenne_Bilan.Address & ".")
        c = c + 1
      Wend

    MOYENNE_BILAN(Cell) = Application.WorksheetFunction.Average(Plage_Moyenne_Bilan)

End Function
Function CALCUL_PREVISION(Cell)

    CALCUL_PREVISION(Cell) = Application.WorksheetFunction.Average(MOYENNE_BILAN(Cell), MOYENNE_QUOTIDIENNE(Cell), PREDICTION_BILAN(Cell), PREDICTION_QUOTIDIENNE(Cell))

End Function
Sub CALCUL_PREVISIONS()

    For i = 6 To 26
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

    For i = 29 To 52
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

    For i = 55 To 67
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

    For i = 69 To 77
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

End Sub

Encore merci de prendre le temps de répondre mais je m'en occuperai demain car je me lève a 5h

Bonsoir

Il faut affecter le résultat au nom de la fonction

Exemple

PREDICTION_QUOTIDIENNE= Application.WorksheetFunction.Forecast(x, Y_connus, X_connus)

Ne mets pas le paramètre (Cell)

C'est bon j'ai modifié et grâce à cela les fonctions prennent bien les valeur demandé cependant il ne donne pas ce que je voulais alors j'ai effectué un pas à pas et il ne m'a pas affiché d'erreur et j'ai remarqué qu'en laissant le pointeur sur des variable on pouvait voir les valeurs auxquelles elles correspondent et c'est la que j'ai vu qu'il y avait une erreur 2015 sur cette parti. En résumé la seule fonction qui fonctionne c'est la fonction moyenne bilan.Mais je lâche rien même si ça fait 1 heure que je cherche la solution parce que j'ai aussi supprimé les WorksheetFunction il me mettait des erreurs et ça à résolu le problème

Function PREDICTION_QUOTIDIENNE(Cell)

    Dim c As Integer, X_connus As Range, Y_connus As Range, Ligne As Integer, Colonne As Integer, x As Date
    c = 3
    Colonne = Cell.Column
    Ligne = Cell.Row
    x = Cells(3, Colonne)

    While Not Cells(2, c) = ""
        If Sheets("ventes 2015").Cells(2, c) = Sheets("prévisions 2015").Cells(2, Colonne) Then
            If X_connus Is Nothing Then
                Set X_connus = Sheets("ventes 2015").Cells(3, c)
                Set Y_connus = Sheets("ventes 2015").Cells(Ligne, c)
            Else
                Set X_connus = Union(X_connus, Sheets("ventes 2015").Cells(3, c))
                Set Y_connus = Union(Y_connus, Sheets("ventes 2015").Cells(Ligne, c))
            End If
        End If

        c = c + 1
    Wend

    PREDICTION_QUOTIDIENNE = Application.Forecast(x, Y_connus, X_connus)

End Function

Function PREDICTION_BILAN(Cell)

    Dim c As Integer, X_connus As Range, Y_connus As Range, Ligne As Integer, Colonne As Integer, x As Date
    c = 3
    Colonne = Cell.Column
    Ligne = Cell.Row
    x = Cells(3, Colonne)

    While Not Sheets("ventes 2015").Cells(2, c) = ""
            If X_connus Is Nothing Then
                Set X_connus = Sheets("ventes 2015").Cells(3, c)
                Set Y_connus = Sheets("ventes 2015").Cells(Ligne, c)
            Else
                Set X_connus = Union(X_connus, Sheets("ventes 2015").Cells(3, c))
                Set Y_connus = Union(Y_connus, Sheets("ventes 2015").Cells(Ligne, c))
            End If

        c = c + 1
    Wend

    PREDICTION_BILAN = Application.Forecast(x, Y_connus, X_connus)

End Function

Function MOYENNE_QUOTIDIENNE(Cell)

    Dim c As Integer, Plage_Moyenne_Quotidienne As Range, Ligne As Integer, Colonne As Integer
    Ligne = Cell.Row
    Colonne = Cell.Column
    c = 3

    While Not Sheets("ventes 2015").Cells(2, c) = ""
        If Sheets("ventes 2015").Cells(2, c) = Sheets("prévisions 2015").Cells(2, Colonne) Then
            If Plage_Moyenne_Quotidienne Is Nothing Then
                Set Plage_Moyenne_Quotidienne = Sheets("ventes 2015").Cells(Ligne, c)
            Else
                Set Plage_Moyenne_Quotidienne = Union(Plage_Moyenne_Quotidienne, Sheets("ventes 2015").Cells(Ligne, c))
            End If
        End If

        c = c + 1
    Wend

    [color=#0080FF]MOYENNE_QUOTIDIENNE = Application.Average(Plage_Moyenne_Quotidienne)[/color]

End Function
Function MOYENNE_BILAN(Cell)

    Dim c As Integer, Plage_Moyenne_Bilan As Range, Ligne As Integer
    c = 3
    Ligne = Cell.Row

    While Not Sheets("ventes 2015").Cells(2, c) = ""
        If Plage_Moyenne_Bilan Is Nothing Then
          Set Plage_Moyenne_Bilan = Sheets("ventes 2015").Cells(Ligne, c)
        Else
          Set Plage_Moyenne_Bilan = Union(Plage_Moyenne_Bilan, Sheets("ventes 2015").Cells(Ligne, c))
        End If
        c = c + 1
      Wend

    MOYENNE_BILAN = Application.Average(Plage_Moyenne_Bilan)

End Function
Function CALCUL_PREVISION(Cell)

    CALCUL_PREVISION = Application.Average(MOYENNE_BILAN(Cell), MOYENNE_QUOTIDIENNE(Cell), PREDICTION_BILAN(Cell), PREDICTION_QUOTIDIENNE(Cell))

End Function
Sub CALCUL_PREVISIONS()

    For i = 6 To 26
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

    For i = 29 To 52
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

    For i = 55 To 67
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

    For i = 69 To 77
        For k = 3 To 9
            Cells(i, k) = CALCUL_PREVISION(Cells(i, k))
        Next
    Next

End Sub
5gestion-pvp.xlsm (273.00 Ko)

Bonjour

Voici ce que j'obtiens quand je veux ouvrir ton fichier, et comme je n'ai pas envie de faire ce qui est marqué je ne peux pas voir le fichier

acces restreint
4gestion-pvp.xlsm (213.00 Ko)

voila j'ai enlevé les restrictions

Rechercher des sujets similaires à "probleme syntaxe experience"