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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 19
    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 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    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)

  3. #3
    Expert éminent 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
    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"))

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 19
    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 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
    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.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    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.

  7. #7
    Expert confirmé
    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 : 67
    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
    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

  8. #8
    Expert éminent 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
    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.

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