IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Traduction de formule d'Excel vers VBA


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Traduction de formule d'Excel vers VBA
    Bonjour,
    je tente d inserer des formules dans une feuille Excel a l aide d une macro mais je n y arrive pas. Je n arrive pas a traduire en VBA.
    Je dois en fait mettre 128 formules differentes dans 128 colonnes de la ligne 7 avec pour chaque colonne une formule differente sachant par ailleurs que les 128 colonnes à remplir ne sont pas cote à cote. Ci dessous le problème avec en rouge les colonnes à remplir:

    G H I J K L ... GN GO GP

    J ai ecrit ce code qui remplit les cellules comme je le souhaite mais dont visiblement la formule ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim j As Integer
     
    For j = 1 To 64
    Cells(7, 3 * j + 7 - 2).Value = "=TAN(RADIANS(Columns(3*j+7-3)))*$C$6+(Cells(4,3*j+7-2)-32)*0.625/COS(RADIAN(Columns(3*j+7-3)))"
    Cells(7, 3 * j + 7 - 1).Value = "=TAN(RADIANS(Columns(3*j+7-3)))*$C$6+(Cells(4,3*j+7-1)-32)*0.625/COS(RADIAN(Columns(3*j+7-3)))"
     
     
    Next j
    End Sub
    Pouvez vous me dire ce qui ne va pas s il vous plait?
    Merci d avance

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    B'jour,

    Remplace le .Value par .Formula

    Par contre, je ne peux pas t'affirmer que la formule est correcte.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 104
    Points : 124
    Points
    124
    Par défaut
    Bonjour,
    Et attention, à ce moment là, la formule va essayer de comprendre "Columns(3*j+7-3)", "Cells(4,3*j+7-2)" et "Columns(3*j+7-3)" et je pense qu'elle n'aimera pas...
    si tu veux remplacer par des valeurs, sort les des guillemets, mais je crois que tu veux plutôt des références de cellules...
    Le plus simple sera alors de passer en référence R1C1 et donc d'utiliser formulaR1C1 au lieu de Formula.
    R1C1 = Row n°1, Columun n°1 = $A$1 (notation absolue)
    RC[-1] = ROW idem, Column précédente (notation relative)

    Si tu veux voir ce que ça donne, saisis ta formule dans le tableau en enregistrant une macro : tu auras même la bonne surprise de constater que tes formules sont en fait identiques !

    Reste quand même que j'ai un doute sur les "Columns" qui représentent des colonnes entières ...

    Autre solution, à mon avis meilleures puisque c'est comme ça que je fais en général :

    Dans un coin du classeur, disons un onglet "Modèles", je mets un prototype du bout de feuille que je veux générer. Déjà à ce stade, la mise au point, le test et la maintenance de la formule se fait "naturellement" sous Excel.
    Disons que les cellules C12 et D12 contiennentt les formules qui m'intéressent (et que si je le faisais à la main je copierais massivement dans toutes les colonnes)
    Ton code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim j As Integer
    For j = 1 To 64
       Cells(7, 3 * j + 7 - 2).FormulaR1C1 = Sheets("Modèles").range("C12").FormulaR1C1
       Cells(7, 3 * j + 7 - 1).FormulaR1C1= Sheets("Modèles").range("D12").FormulaR1C1
    Next j

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    As-tu, dans ta feuille de calculs, une formule qui va bien ?
    Si oui, peux-tu nous mettre cette formule en français ?

    Veux-tu obtenir la formule dans tes cellules ou le résultat ?

    Dans ta formule, tu as une fois RADIANS et une autre RADIAN. Est-ce normal ?
    A+

    Edit
    Je viens de regarder la cohérence de la formule elle-même.
    Tu ne peux pas écrire "Columns(3*j+7-3)" dans ta formule.
    Si je la reprends, tu devrais écrire quelque chose comme ça
    "=TAN(RADIANS(" & Cells(7, 3*j+7-3).address & "))*$C$6+(" & Cells(4, 3*j+7-2)-32).address & "*0.625/COS(RADIANS(" & Cells(7, 3*j+7-3).address & "))"
    Comme fring, je ne parle pas de la validité des calculs, simplement de "l'orthographe"
    Mais si tu pouvais mettre la formule en français telle qu'elle fonctionne dans ta feuille...
    A+

    PS - Je ne suis pas sûr non plus qu'elle accepte ça dans tes N° de colonnes "3*j+7-3"
    Auquel cas mets les entre parenthèses

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci à tous !

    Pour répondre à ouskel'n'or, effectivement, il faut écrire deux fois "RADIANS" et non "RADIAN".
    Les "Columns" sont inefficaces.
    Dans mes cellules, je veux avoir le résultat.
    Les formules qui fonctionnent et que je devrais voir affichées dans la "formula bar" sont les suivantes:

    Dans H7, :=-TAN(RADIANS(G:G))*$C$6 + (H$4-32)*0.625/COS(RADIANS(G:G))
    Dans I7, :=-TAN(RADIANS(G:G))*$C$6 + (I$4-32)*0.625/COS(RADIANS(G:G))

    Rien dans J7

    Dans K7, :=-TAN(RADIANS(J:J))*$C$6 + (K$4-32)*0.625/COS(RADIANS(J:J))
    Dans L7, :=-TAN(RADIANS(J:J))*$C$6 + (L$4-32)*0.625/COS(RADIANS($J:$J))
    .
    .
    .


    Rien dans GN

    Dans GO7, :=-TAN(RADIANS(GN:GN))*$C$6 + GO$4-32)*0.625/COS(RADIANS(GN:GN))
    Dans GP7, :=-TAN(RADIANS(GN:GN))*$C$6 + GP$4-32)*0.625/COS(RADIANS(GN:GN))

    Ci dessous je remet le schéma des colonnes à remplir (colonnes en rouge)
    G H I J K L ... GN GO GP

    Pour répondre à Bevan, ta méthode fonctionne. J ai seulement remplacé dans ma formule $G:$G par G:G afin que cette colonne change pour chaque colonne et j ai placé les formules en H12 et I12.
    En conclusion, j ai écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro10()
     
    Dim j As Integer
     
    For j = 1 To 64
       Cells(7, 3 * j + 7 - 2).FormulaR1C1 = Sheets("Modeles").Range("H12").FormulaR1C1
       Cells(7, 3 * j + 7 - 1).FormulaR1C1 = Sheets("Modeles").Range("I12").FormulaR1C1
    Next j
    End Sub
    En ayant préalablement entré dans la sheet "Modeles":
    - dans la cellule H12, =-TAN(RADIANS(G:G))*$C$6+(H$4-32)*0.625/COS(RADIANS(G:G))
    - dans la cellule I12, =-TAN(RADIANS(G:G))*$C$6 + (I$4-32)*0.625/COS(RADIANS(G:G))


    Donc au final je suis comblé mais si ouskel'n'or veut me donner une autre méthode, je ne dis pas non, cela me permet d apprendre.

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Oui, tu écris tes deux formules dans les cellules H12 et I 12 et tu les recopies jusqu'à la ligne 64. Ce qui donne la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Range("H12:I12").Copy Range("H12:I64")
    Si ça correspond bien à ce que tu veux faire
    Ce code recopie la même formule sur toutes les lignes, y compris les N° de lignes (ce que je comprends pas dans ta formule)
    Le $ que tu as retiré aux colonnes, désigne une adresse absolue. En les supprimant, la formule verra ses N° de ligne s'incrémenter lors de la copie.
    Bref, si tu as besoin que les N° de lignes s'incrémentent, alors retire les $ dans leurs adresses. Seulement sur les lignes à incrémenter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Concaténer plusieur formule dans Excel depuis VBA
    Par FBOISSINOT dans le forum Excel
    Réponses: 2
    Dernier message: 30/06/2014, 12h16
  2. [XL-2010] Import de date de excel vers VBA
    Par vba_help2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/02/2014, 11h19
  3. Récuperation de plusieurs cellules actives d'excel vers VBA
    Par root1k1 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/11/2012, 08h51
  4. [XL-2007] Problème traduction formule excel en VBA
    Par laduche31 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/12/2011, 10h16
  5. formule excel vers VBA
    Par kedas dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/10/2007, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo