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 :

Calculer la chaine "1+1" par VBA [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    actuaire
    Inscrit en
    Octobre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : actuaire
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2017
    Messages : 5
    Par défaut Calculer la chaine "1+1" par VBA
    Bonjour ,

    Je suis nouveau dans le forum.
    J'ai une variable string ou variant qui retourne une chaîne de caractère du genre "1+1" ou "2/3" et j'aimerai qu'un code VBA la reconnait comme une opération arithmétique et me sort le résultat du genre 1+1 = 2 .

    Je bloque depuis des heures la-dessus .

    Merci pour Votre Aide .

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    vu le peu d'exemples

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub toto()
    Dim Operation As String
        Operation = "1+1"
        MsgBox Evaluate(Operation)
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    actuaire
    Inscrit en
    Octobre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : actuaire
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2017
    Messages : 5
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    vu le peu d'exemples

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub toto()
    Dim Operation As String
        Operation = "1+1"
        MsgBox Evaluate(Operation)
    End Sub
    Merci Joe.levrai
    Evaluate marche bien . Génial !

    Si vous permettez , j'ai une autre question .
    Dans le cas où j'ai "1++1", comment puis-je détecter qu'il y'a erreur dans la chaine .

    Merci pour votre aide

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Je sens poindre l'usine à gaz pour corriger des issues qu'il faudrait gérer en amont

    mais pour te répondre, une fonction personnalisée me semble nécessaire :

    1) Pour chaque caractère de la chaine
    2) tant qu'on est sur un chiffre : on passe au caractère suivant
    3) si le caractère non numérique n'est pas suivi d'un caractère numérique : y'a un problème

    à adapter bien sûr, c'est un algo simplifié

    sinon, capturer une erreur survenant sur l'utilisation d'evaluate()
    Mais en procédant ainsi, il faudrait quand même une fonction si tu as (je le devine) besoin ensuite de corriger la chaine

    Bon courage !

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    actuaire
    Inscrit en
    Octobre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : actuaire
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2017
    Messages : 5
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Je sens poindre l'usine à gaz pour corriger des issues qu'il faudrait gérer en amont

    mais pour te répondre, une fonction personnalisée me semble nécessaire :

    1) Pour chaque caractère de la chaine
    2) tant qu'on est sur un chiffre : on passe au caractère suivant
    3) si le caractère non numérique n'est pas suivi d'un caractère numérique : y'a un problème

    à adapter bien sûr, c'est un algo simplifié

    sinon, capturer une erreur survenant sur l'utilisation d'evaluate()
    Mais en procédant ainsi, il faudrait quand même une fonction si tu as (je le devine) besoin ensuite de corriger la chaine

    Bon courage !
    Je croyais qu'il y'avait une fonction simple de VBA que je pourrais utiliser .
    Je vais boucler sur les chaines et comparer les caractères .

    Juste pour Information : Evaluate ("1++1") donne 2.

    Merci Joe.Levrai

  6. #6
    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 simex Voir le message
    Dans le cas où j'ai "1++1", comment puis-je détecter qu'il y'a erreur dans la chaine .
    Il n'y a pas d'erreur dans cette chaine dans la mesure où (du point de vue d'Excel et de VBA) un nombre positif peut s'écrire "+1" comme un nombre négatif peut s'écrire "-1".

    Mais pour détecter les cas où Evaluate serait pris en défaut, tu peux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsError(Evaluate(Operation)) Then MsgBox("Erreur dans la formule") Else MsgBox(Evaluate(Operation))
    Si ta prochaine question est "comment corriger une éventuelle erreur", oublie-la : trop de cas possibles, pas assez de logique précise pour la correction.

  7. #7
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    "1++1" étant un string : varstr = replace("1++1","++","+")
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    actuaire
    Inscrit en
    Octobre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : actuaire
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2017
    Messages : 5
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Il n'y a pas d'erreur dans cette chaine dans la mesure où (du point de vue d'Excel et de VBA) un nombre positif peut s'écrire "+1" comme un nombre négatif peut s'écrire "-1".

    Mais pour détecter les cas où Evaluate serait pris en défaut, tu peux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsError(Evaluate(Operation)) Then MsgBox("Erreur dans la formule") Else MsgBox(Evaluate(Operation))
    Si ta prochaine question est "comment corriger une éventuelle erreur", oublie-la : trop de cas possibles, pas assez de logique précise pour la correction.
    Bonjour Menhir ,

    C'est effectivement ce que j'ai fait pour détecter s'il y'a erreur dans dans l’opération.

    Merci pour votre réponse.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    actuaire
    Inscrit en
    Octobre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : actuaire
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2017
    Messages : 5
    Par défaut
    Bonjour,
    Alors voici le code que j'ai fait pour détecter s'il y'a des opérateurs successifs dans une opération .
    Exemple : "1++1" ou "1+/" , "1**1" , "1++" etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    For i = 1 To Len(Operations)
            caractere = Mid(Operations, i, 1)
     
            If Not IsNumeric(caractere) Then
                compteur = compteur + 1
            Else
                compteur = 0
            End If
     
            If compteur > 1 Then ' si compteur est égal à deux , cela veut dire qu'il y'a deux opérateurs successifs ou deux point pour les decimales (1..4)
                .... Il y'a erreur
     
            End If
        Next i
    Au plaisir.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Le plus simple,et c'est ce qu'il faut faire en général, essais de piéger ton code la réponse est parfois plus simple que la question!

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

Discussions similaires

  1. [Toutes versions] Calcul moyenne entre deux dates selon condition par vba
    Par bboy-eazy dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/05/2015, 13h08
  2. Chaine de caractere avec quote
    Par mactwist69 dans le forum Windows Forms
    Réponses: 12
    Dernier message: 11/07/2008, 17h19
  3. Réponses: 3
    Dernier message: 08/06/2007, 14h16

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