Activecell.Value = "Une variable"

Bonjour,

J'ai un petit problème quand je veux mettre la valeur d'une variable dans mes cellules, par exemple je note :

f = "=Somme(A1;B1)", ceci est un exemple, mes formules sont variables normalement d'ou le choix de vouloir une variable.

Ensuite mon problème se pose, j'aimerais insérer ma formule dans des cellules, j'utilise donc activecell.value = f (J'ai aussi essayé avec activecell.formulalocal, et avec toute les formes de concaténation "" && ect..) et rien ne marche, je pense donc que l'erreur vient de la formule ou je ne sais quoi, si vous pourriez m'aider. :)

4 réponses

  1. Bjr,

    Avez-vous le code entier svp ?

    2 pb que j'entrevois :
    - la dimension de f : l'avez-vous déclarée ?
    - le caractère variable de f : si vous n'avez pas utilisé la fonction "Set f =..." alors f sera fixe.

    Mais encore une fois on y verra plus clair avec votre code
    0
    1.   For u = 2 To 6

      'On change la formule f qui va s'appliquer en fonction de la colonne.
      'Les valeurs que peuvent prendre f
      If u = 2 Then
      f = "=SOMMEPROD((Données!P:P)*((Données!K:K=""E"")+(Données!K:K=""V"")+(Données!K:K=""P""))*(Données!D:D=" & i - x + 1 & ")*(Données!C:C=" & annee & ")*((Données!L:L=""P"")+(Données!L:L=""E"")+(Données!L:L=""V"")))"
      End If

      If u = 3 Then
      f = "=SOMMEPROD((Données!P:P)*((Données!K:K=""E"")+(Données!K:K=""V"")+(Données!K:K=""""))*(Données!D:D=" & i - x + 1 & ")*(Données!C:C=" & annee & ")*(Données!L:L=""P""))"
      End If

      'L'endroit ou j'utilise f
      For annee = 2010 To 2015
      For i = x To x + 12
      Cells(i, u).Select
      If i < x + 12 Then
      ActiveCell.FormulaLocal = f


      Le code est un plus long mais je pense que cette partie peut suffir, sans le contexte entier, c'est compliqué.

      f est bien déclaré en string et j'arrive à remplir mon tableau avec des "f" quand je met des guillemets, sans guillemets j'obtient une erreur "objet ect..."

      Je précise que les formules marchent, déjà testé.
      0
    2. pour la partie :
          For annee = 2010 To 2015
      For i = x To x + 12
      Cells(i, u).Select
      If i < x + 12 Then
      ActiveCell.FormulaLocal = f


      A quel moment x est défini en dimension et en valeur initiale ? Avant dans une partie du code que nous n'avons pas ?

      A quelle valeur de u le code plante ? Pour le savoir mettez une "msgbox u" avant l'utilisation de f.
      0
    3. Il n'y a aucun problème avec x et u, ils sont bien déclarés avant et les msgbox m'indiquent biens ce que j'attend, f prend bien la valeur de la chaine de caractères que je lui donne, simplement sur la partie
      ActiveCell.FormulaLocal = f 


      Je suis capable d'afficher n'importe qu'elle chaine de caractère sur mes cellules que je désire : ect
      ActiveCell.FormulaLocal = "exemple" 


      mais impossible de ressortir la valeur de f.
      0
    4. Avant de résoudre le problème global il faut savoir précisément à quel niveau précis ça plante.

      Donc au moment du débogage, quelles sont les valeurs de vos variables : u, i, x et f ?
      0
    5. Au moment du débogage, u=2; i=9; x=9; f= =SOMMEPROD((Données!P:P)*((Données!K:K=""E"")+(Données!K:K=""V"")+(Données!K:K=""P""))*(Données!D:D=" & i - x + 1 & ")*(Données!C:C=" & annee & ")*((Données!L:L=""P"")+(Données!L:L=""E"")+(Données!L:L=""V"")))

      Soit colonne 2(B), ligne 9, ici pas de problème normalement, c'est le début de mon tableau.
      0
  2. Modérateur
    Bonjour,

    Attention quand on parle de variable dans du code, ça n'a rien à voir avec une formule Excel.

    La syntaxe pour insérer une formule Excel dans une cellule par une macro en vba c'est, en reprenant ton exemple :
    ActiveCell.FormulaLocal = "=SOMME(A1:B1)"

    Ou bien la variante avec Cells(x,y)

    Après, je pense que tu vas vouloir répéter ça sur plusieurs lignes. Donc dans le code que j'ai écris plus haut, il faudra remplacer les "1" par :
    " & ActiveCell.Row & "
    0
    1. Bonjour,

      Pas de problème avec Excel version française :
      Sub Test()
      Dim f As String
      f = "=Somme(A1;B1)"
      ActiveCell.FormulaLocal = f
      End Sub


      A+
      0
      1. Contributeur
        Bonjour,

        Est-ce que i et x et annee sont bien initialisés ?
            Dim u As Long, i As Long, x As Long, annee As Long, f As String
            u = 2
            i = 5
            x = 1
            annee = 2016
            If u = 2 Then
                f = "=SOMMEPROD((Données!P:P)*((Données!K:K=""E"")+(Données!K:K=""V"")+(Données!K:K=""P""))*(Données!D:D=" & i - x + 1 & ")*(Données!C:C=" & annee & ")*((Données!L:L=""P"")+(Données!L:L=""E"")+(Données!L:L=""V"")))"
            End If
        
            If u = 3 Then
                f = "=SOMMEPROD((Données!P:P)*((Données!K:K=""E"")+(Données!K:K=""V"")+(Données!K:K=""""))*(Données!D:D=" & i - x + 1 & ")*(Données!C:C=" & annee & ")*(Données!L:L=""P""))"
            End If
            [D5].FormulaLocal = f

        passe bien.
        Le .select suivi du activecell sont inutiles.
        eric

        0
        1. Contributeur
          et accessoirement si tu pouvais dire quelle erreur tu as ?
          Rien ne marche ne veut rien dire
          0
        2. Désolé, je n'avais pas vu la réponse,
          Oui oui, toute les valeurs sont bien initialisés avant,
          l'erreur qui s'affiche est l'erreur 1004 : Erreur définie par l'application ou par l'objet.
          Et comme je l'ai écrit dans une réponse plus haute, mon tableau se remplit bien si je rentre une chaine de caractère exemple : ActiveCell.FormulaLocal = "exemple" mais il ne trouve pas la valeur f, de plus avant l'affichage de l'erreur: u=2; i=9; x=9 et f est égal à la bonne chaine de caractère.
          0
        3. Ok, problème réglé, je ne sais pas trop d'ou ça venait mais bon :/
          0
        4. Contributeur
          Parfois fermer et rouvrir excel le fait repartir sur de meilleures bases et une pseudo erreur ne se produit plus.
          0