Activecell.Value = "Une variable"

makks Messages postés 18 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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. Theo.R Messages postés 585 Statut Membre 31
     
    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. makks Messages postés 18 Statut Membre 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. Theo.R Messages postés 585 Statut Membre 31
       
      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. makks Messages postés 18 Statut Membre 1
       
      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. Theo.R Messages postés 585 Statut Membre 31
       
      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. makks Messages postés 18 Statut Membre 1
       
      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. Arkana0 Messages postés 1980 Date d'inscription   Statut Modérateur Dernière intervention   183
     
    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
  3. Gyrus Messages postés 3360 Statut Membre 526
     
    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
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      et accessoirement si tu pouvais dire quelle erreur tu as ?
      Rien ne marche ne veut rien dire
      0
    2. makks Messages postés 18 Statut Membre 1
       
      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. makks Messages postés 18 Statut Membre 1
       
      Ok, problème réglé, je ne sais pas trop d'ou ça venait mais bon :/
      0
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Parfois fermer et rouvrir excel le fait repartir sur de meilleures bases et une pseudo erreur ne se produit plus.
      0