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 :

Formule excel en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 19
    Points : 8
    Points
    8
    Par défaut Formule excel en VBA
    Bonjour,

    J'ai une formule excel qui marche très bien: =IF(E3 - D3)< 1/24; 1/24; E3 - D3) seulement j'aimerai la convertir pour l'implanter dans une macro en VBA, ce qui me donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF((" & Range("E" & i).Address(0, 0) &  "-" &  Range("D" & i).Address(0, 0) & ")< 1/24; 1/24;" & Range("E" & i).Address(0, 0) & "-" & Range("E" & i).Address(0, 0) & ")
    Mais cela ne fonctionne pas, pourquoi ?

    Bonne journée

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    En anglais, le séparateur d'attribut dans les formules est la virgule (et non pas le point-virgule)

    D'autre part pourquoi utiliser address ?
    Autant faire simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
    Sub Test()
    Dim f As String
    Dim i As Long
    Dim c As Range
      i = 3
      f = "=IF((E" & i & "-D" & i & ")< 1/24, 1/24," & "E" & i & "-D" & i & ")"
      Set c = ActiveSheet.Range("F3")
      c.Formula = f '"=IF((E3-D3)< 1/24, 1/24,E3-E3)"
    End Sub
    Edit : Correction en rouge (merci Menhir)
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Shaplow Voir le message
    J'ai une formule excel qui marche très bien: "=IF(E3 - D3)< 1/24; 1/24; E3 - D3)
    Plus simple : =MAX(1/24;E3-D3).

    Il y a aussi un petit détail qui me surprend : tu utilises les fonction anglophones ( IF ) mais les séparateur francophones ( ; )...

    Citation Envoyé par Patrice740
    Autant faire simple :
    Bonjour Patrice,
    Je me permets de corriger juste un détail dans ta formule (un D à la place d'un E).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f = "=IF((E" & i & "-D" & i & ")< 1/24, 1/24," & "E" & i & "-D" & i & ")"
    C'est la formule qui convient si on veut l'implanter dans une cellule en utilisant VBA.

    En revanche, si on veut l'évaluer dans VBA, par exemple avec un Evaluate, ce sera plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "IF(" & Cells(i, "E") & "-" & Cells(i, "D") & "<1/24,1/24," & Cells(i, "E") & "-" & Cells(i, "D") & ")"
    ou en pur VBA sans Evaluate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf((Cells(i, "E") - Cells(i, "D") < 1/24, 1 / 24, Cells(i, "E") - Cells(i, "D"))
    ou encore, en utilisant ma simplification de départ avec un WorksheetFunction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.MAX(1 / 24, Cells(i, "E") - Cells(i, "D"))
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Il y a aussi un petit détail qui me surprend : tu utilises les fonction anglophones ( IF ) mais les séparateur francophones ( ; )...
    Je ne connais pas ce langage du coup je ne savais même pas qu'il fallait faire la différence entre fonctions anglophones/françaises etc ! En tout cas merci pour votre aide j'ai pu régler mon problème

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Shaplow Voir le message
    Je ne connais pas ce langage du coup je ne savais même pas qu'il fallait faire la différence entre fonctions anglophones/françaises etc !
    Je ne parlais pas de la tentative d'interprétation en VBA mais de la formule qui marche très bien.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,
    Citation Envoyé par Shaplow Voir le message
    Je ne connais pas ce langage du coup je ne savais même pas qu'il fallait faire la différence entre fonctions anglophones/françaises etc !
    C'est tout simplement une question de logique :
    - Quand tu utilises une formule anglophone (.Formula), il faut utiliser la syntaxe anglophone (avec des ,)
    - Quand tu utilises une formule francophone (.FormulaLocal), il faut utiliser la syntaxe francophone (avec des ; )
    et il parait évident que lorsqu'on mélange les deux, Excel ne comprend pas.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  7. #7
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous,

    Pour ces raisons, j'ai banni, récemment j'en conviens, la méthode FormulaLocal.

    A toute fin utile, une astuce, de Philippe je crois (hé salut!):
    Pour connaître la formule écrite en langage VBA
    - l'écrire dans le tableur (exemple en "A1")
    - dans l'éditeur VBE, afficher la fenêtre Exécution (CTRL+G)
    - écrire
    ?Range("A1").Formula
    (ne pas oubier "?")
    - activer la touche Entrée

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    - dans l'éditeur VBE, afficher la fenêtre Exécution (CTRL+G)
    Perso, je la garde ouverte en permanence.
    Elle sert aussi bien à vérifier des valeurs en cours de code (ou à afficher des messages sur l'avancement d'une exécution) avec des Debug.Print qu'à tester des syntaxes en les tapant directement dedans sans avoir besoin de créer une instruction et de la lancer.

    Un outil indispensable pour développer.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Re,

    Merci de vos explications, j'ai un autre problème sur une autre formule maintenant: =SOMME(N18;O18+PRODUIT(O18;0,25);P18 + PRODUIT(P18;0,5);PRODUIT(Q18;2))Ça c'est la formule que j'ai faîte pour voir si elle fonctionnait, mais maintenant j'aimerai remplacer mes cellules N18, O18, P18 et Q18 par des colonnes. En gros je veux un résultat total qui additionne:
    =SOMME(N3;O3+PRODUIT(O3;0,25);P3 + PRODUIT(P3;0,5); PRODUIT(Q3;2)) + =SOMME(N4;O4+PRODUIT(O4;0,25);P4 + PRODUIT(P4;0,5); PRODUIT(Q4;2)) + =SOMME(N5;O5+PRODUIT(O5;0,25);P5 + PRODUIT(P5;0,5); PRODUIT(Q5;2)) etc etc
    J'aimerai commencer à la ligne 3 jusqu'à la fin du tableau ou de la colonne entière peu importe mais je ne sais pas comment faire !

    Bonne journée !

  10. #10
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    Pour une formulation sur une colonne entière.

    Je te conseillerais de procéder en 3 étapes
    - Sur le tableur Excel, écrire une formule avec résultat acceptable sur la 1ère ligne
    - Procéder à sa transformation en langage VBA comme je l'ai indiqué plus avant (par la fenêtre Exécution)
    - Ecrire cette formulation sur toute la colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Const laformule As String = "=A2*B2"
    Worksheets("lawks").Range("C2:C250").Formula = laformule
    Personnellement, c'est le processus que je suis toujours avec un collage spécial de valeurs soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [Sub fo()
    Const laformule As String = "=A2*B2"
    With ThisWorkbook.Worksheets("lawks").Range("C2:C250")
    .Formula = laformule
    .Value = .Value
    End With
    End Sub
    Si maintenant, tu souhaites le produit des colonnes, tu peux utiliser la fonction
    SommeProd

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  11. #11
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Shaplow Voir le message
    =SOMME(N18;O18+PRODUIT(O18;0,25);P18 + PRODUIT(P18;0,5);PRODUIT(Q18;2))
    Plus simple : =N18+(O18*1,25)+(P18*1,5)+(Q18*2).
    Etant donné que la multiplication est prioritaire sur l'addition, les parenthèses ne sont pas utiles mais je les laisse pour la compréhension.

    j'aimerai remplacer mes cellules N18, O18, P18 et Q18 par des colonnes. En gros je veux un résultat total qui additionne:
    =SOMME(N3;O3+PRODUIT(O3;0,25);P3 + PRODUIT(P3;0,5); PRODUIT(Q3;2)) + =SOMME(N4;O4+PRODUIT(O4;0,25);P4 + PRODUIT(P4;0,5); PRODUIT(Q4;2)) + =SOMME(N5;O5+PRODUIT(O5;0,25);P5 + PRODUIT(P5;0,5); PRODUIT(Q5;2)) etc etc
    J'aimerai commencer à la ligne 3 jusqu'à la fin du tableau ou de la colonne entière peu importe mais je ne sais pas comment faire !
    Il suffit de faire une formule matricielle.
    Si ton tableau se termine en ligne 20 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(N3:N20+(O3:O20*1,25)+(P3:P20*1,5)+(Q3:Q20*2)
    A valider avec Ctrl+Shift+Entrée comme toute fonction matricielle.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

Discussions similaires

  1. formule Excel dans VBA
    Par ninette24 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/07/2008, 14h31
  2. formule excel vers VBA
    Par kedas dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/10/2007, 18h18
  3. Parseur formule Excel <-> Code VBA
    Par gretch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/08/2007, 18h08
  4. Correspondance formules excel et VBA
    Par abu143 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/10/2006, 17h54
  5. [EXCEL][VBA] Utilisation des formules Excel en VBA
    Par Amanck dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2005, 15h08

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