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 :

Transformation formule en code vba [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut Transformation formule en code vba
    Bonjour à tous

    Actuellement j'insère cette formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =STXT(D12;1;SI(SIERREUR(CHERCHE(" ";D12;1)-1;"Erreur")="Erreur";NBCAR(D12);CHERCHE(" ";D12;1)-1))
    Par le biais d'une macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveCell.FormulaR1C1 = _
            "=MID(RC[-2],1,IF(IFERROR(SEARCH("" "",RC[-2],1)-1,""Erreur"")=""Erreur"",LEN(RC[-2]),SEARCH("" "",RC[-2],1)-1))"
    J'essaye de comprendre comment ne plus insérer la formule mais vers "la fonction" dans la macro.
    J'ai donc créer une p'tite macro de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Dim Valeure_reference As String
    Dim Vz As Integer
    Vz = 12
     
    Valeure_reference = mid(cells(vz, 4),1, if(IfError(Search(" ", Cells(Vz, 4), 1) - 1, "Error") = "Error", len(cells(vz, 4)), Search(" ", Cells(Vz, 4), 1) - 1))
     
    MsgBox Valeure_reference
     
    End Sub
    Cependant elle ne compile pas :
    "Erreur de compilation : Erreur de syntaxe"
    Merci par avance
    Merci de ainsi que d'utiliser les boutons et

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Essaie comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeure_reference = "mid(" & Cells(Vz, 4) & ",1, if(IfError(Search("" "", " & Cells(Vz, 4) & ", 1) - 1, ""Error"") = ""Error"", len(" & Cells(Vz, 4) & "), Search("" "", " & Cells(Vz, 4) & ", 1) - 1))"
    MPi²

  3. #3
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Bonjour,
    Merci pour votre réponse.

    Lorsque j'essaye le code il me renvoie :
    Nom : Capture.JPG
Affichages : 183
Taille : 29,1 Ko

    Cordialement.
    Merci de ainsi que d'utiliser les boutons et

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Si tu veux le résultat de la formule, affecte celle-ci à une cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Formula = "mid(" & Cells(Vz, 4) & ",1, if(IfError(Search("" "", " & Cells(Vz, 4) & ", 1) - 1, ""Error"") = ""Error"", len(" & Cells(Vz, 4) & "), Search("" "", " & Cells(Vz, 4) & ", 1) - 1))"
    Et change ActiveCell selon le besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Formula = "mid(" & Cells(Vz, 4) & ",1, if(IfError(Search("" "", " & Cells(Vz, 4) & ", 1) - 1, ""Error"") = ""Error"", len(" & Cells(Vz, 4) & "), Search("" "", " & Cells(Vz, 4) & ", 1) - 1))"
    MPi²

  5. #5
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Cela rempli la cellule avec le texte présent dans la MsgBox évoquée lors de mon message précédent.

    En fait je cherche si il y a un moyen de "faire le calcul" dans la macro et de renvoyer le résultat dans la cellule.

    Je vous remercie par avance.
    Merci de ainsi que d'utiliser les boutons et

  6. #6
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Tu peux expliquer précisément ce que fait ta formule ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code sans garantie : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Value = Evaluate("mid(" & Cells(Vz, 4) & ",1, if(IfError(Search("" "", " & Cells(Vz, 4) & ", 1) - 1, ""Error"") = ""Error"", len(" & Cells(Vz, 4) & "), Search("" "", " & Cells(Vz, 4) & ", 1) - 1))")

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 763
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant tout, à la lecture de ta formule, il me semble que tu extrais les caractères qui se trouvent à gauche du premier caractère espacé d'une chaîne de caractères et dans l'hypothèse où il n'y aurait pas ce caractère tu prends l'entièreté de cette chaîne.
    En supposant que la cellule de référence soit C2, on pourrait plutôt utiliser cette formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(GAUCHE(C2;CHERCHE(" ";C2)-1);GAUCHE(C2;NBCAR(C2)))
    qui traduite en anglais (seul langage comprit par VBA) donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IFERROR(LEFT(C2,SEARCH(" ",C2)-1),LEFT(C2,LEN(C2)))
    En VBA, la formule devant être insérée dans une variable de type String (pour l'exemple une constante nommée myFormula) nous obligerait à placer un double-quote pour la recherche d'un espace comme ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const myFormula$ = "=IFERROR(LEFT(C2,SEARCH("" "",C2)-1),LEFT(C2,LEN(C2)))"
    nous allons utiliser la recherche du code ASCII 20 qui est le code équivalent d'un espace. Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const myFormula$ = "=IFERROR(LEFT(C2,SEARCH(CHAR(32),C2)-1),LEFT(C2,LEN(C2)))"
    La formule étant en place, comment la traduire en VBA pour ne plus l'insérer comme formule.
    La plus simple est de passer par la fonction EVALUATE
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Const myFormula$ = "=IFERROR(LEFT(C2,SEARCH(CHAR(32),C2)-1),LEFT(C2,LEN(C2)))"
    MsgBox Evaluate(myFormula)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Const myFormula$ = "=IFERROR(LEFT(C2,SEARCH(CHAR(32),C2)-1),LEFT(C2,LEN(C2)))"
    Range("I2") = Evaluate(myFormula)
    Tu peux aussi placer la formule dans une plage de cellules et ensuite faire l'équivalent d'un copier/collage spécial Valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Const myFormula$ = "=IFERROR(LEFT(C2,SEARCH(CHAR(32),C2)-1),LEFT(C2,LEN(C2)))"
    Range("I2:I6").Formula = myFormula
    Range("I2:I6").Value = Range("I2:I6").Value
    Dans les exemples ci-dessus, seul la référence aux cellules est précisée mais il est chaudement recommandé de référencer le classeur et la feuille également.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Const myFormula$ = "=IFERROR(LEFT(C2,SEARCH(CHAR(32),C2)-1),LEFT(C2,LEN(C2)))"
    With ThisWorkbook.Worksheets("Feuil1").Range("I2:I6")
    .Formula = myFormula
    .Value = .Value
    End With
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Merci Philippe pour ces explications. J'apprend encore plein de choses aujourd'hui...
    Je vais utiliser la méthode du copier et coller avec les valeurs puisque j'ai besoin de la fonction complète.

    J'avais déjà utiliser ce subterfuge dans une autre macro. Mais à cause de mon petit niveau en VBA je trouvais cette méthode pas très "propre".

    Je retiendrais les autres solutions pour d'autres applications.

    Merci à vous pour votre temps dans ce super site...
    Bonne fin de journée.
    Merci de ainsi que d'utiliser les boutons et

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Je vois que tu as eu pas mal de réponses...

    J'avais oublié le "="

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Formula = "=mid(" & Cells(Vz, 4) & ",1, if(IfError(Search("" "", " & Cells(Vz, 4) & ", 1) - 1, ""Error"") = ""Error"", len(" & Cells(Vz, 4) & "), Search("" "", " & Cells(Vz, 4) & ", 1) - 1))"
    MPi²

  11. #11
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Citation Envoyé par parmi Voir le message
    Je vois que tu as eu pas mal de réponses...

    J'avais oublié le "="

    ActiveCell.Formula = "=mid(" & Cells(Vz, 4) & ",1, if(IfError(Search("" "", " & Cells(Vz, 4) & ", 1) - 1, ""Error"") = ""Error"", len(" & Cells(Vz, 4) & "), Search("" "", " & Cells(Vz, 4) & ", 1) - 1))"
    Je l'avais vu mais lorsque je l'ai rajouté la macro ne compilait plus.
    Merci.
    Merci de ainsi que d'utiliser les boutons et

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

Discussions similaires

  1. [XL-2010] formule vers code vba
    Par grisan29 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/12/2013, 21h13
  2. [XL-2010] Traduire une formule en code VBA
    Par thomasdu40 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/07/2012, 09h39
  3. Ajout d'une formule par code vba
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/05/2011, 09h50
  4. Transformer une Req SQL en code VBA
    Par nomade333 dans le forum VBA Access
    Réponses: 7
    Dernier message: 12/09/2007, 03h53
  5. Parseur formule Excel <-> Code VBA
    Par gretch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/08/2007, 18h08

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