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 :

[E-03] conversion de formule en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Par défaut [E-03] conversion de formule en VBA
    Bonjour,

    Mon problème est le suivant, je dois faire un test sur une cellule pour pouvoir incrémenter une valeur hors si le test n'est pas bon, je dois vérifier une autre cellule.

    Voici la fonction que j'avais mis en place sous Excel, mais celle-ci ne fonctionne pas, car je dépasse le niveau maxi de hiérarchie.

    Est-il possible de traduire cette fonction en visual-basic ?

    Désolé, la formule est vraiment longue.

    =SI(ET(ESTNUM(MECA!EU36);ESTTEXTE(COMM!P8));MECA!EU36+1;SI(ET(ESTNUM(MECA!EB36);ESTTEXTE(COMM!P8));MECA!EB36+1;SI(ET(ESTNUM(MECA!DI36);ESTTEXTE(COMM!P8));MECA!DI36+1;SI(ET(ESTNUM(MECA!CP36);ESTTEXTE(COMM!P8));MECA!CP36+1;SI(ET(ESTNUM(MECA!BW36);ESTTEXTE(COMM!P8));MECA!BW36+1;SI(ET(ESTNUM(MECA!BD36);ESTTEXTE(COMM!P8));MECA!BD36+1;SI(ET(ESTNUM(MECA!AK36);ESTTEXTE(COMM!P8));MECA!AK36+1;SI(ET(ESTNUM(MECA!R36);ESTTEXTE(COMM!P8));MECA!R36+1;""))))))))

    Merci d'avance de votre aide.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Si tu pouvais expliquer concrètement ce que tu veux, ça nous éviterait d'arriver désespéré à voir ta formule qu'aucun fou ne va essayer de déchiffrer vu la longueur...

    Merci.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Par défaut
    Je vais essayé de faire clair.

    J'ai deux feuilles : MECA et COMM

    Je dois incrémenter une cellule de la feuille COMM, R36 en respectant des conditions sur l'autre feuille.

    J'explique :

    COMM!R36 = MECA!EU36 + 1 si dans MECA!EU36 il y a un nombre et si il y a du texte dans COMM!P8
    sinon
    COMM!R36 = MECA!EB36 + 1 si dans MECA!EB36 il y a un nombre et si il y a du texte dans COMM!P8
    sinon
    COMM!R36 = MECA!DI36 + 1 si dans MECA!DI36 il y a un nombre et si il y du texte dans COMM!P8
    sinon
    ......
    ainsi de suite jusqu'à MECA!R36

    Voilà, le problème avec ma formule est que je dépasse le niveau maxi de 7 formules imbriquées les unes dans les autres.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Ah j'ai compris: test en cascade...
    Ca c'est vraiment pas bon en effet.

    Je te sors l'astuce à deco qui va ne te manger que 2-3 formules imbriquées au maximum et qui marchera pour autant de cellules que tu veux du moment que tu peux saisir assez de texte:
    =ESTTEXTE(COMM!P8)*(ESTNUM(MECA!EU36)*MECA!EU36+NON(ESTNUM(MECA!EU36))*ESTNUM(MECA!EB36)*MECA!EB36+NON(ESTNUM(MECA!EU36))*NON(ESTNUM(MECA!EB36))*ESTNUM(MECA!DI36)*MECA!DI36+...+MAX(ESTNUM(MECA!EU36);ESTNUM(MECA!EB36);ESTNUM(MECA!DI36);...)

    J'explique un peu le principe: pour la première cellule si elle est numérique son ESTNUM renvoie 1, et si tu multiplies par son contenu tu obtiens... son contenu! Si ce n'est pas numérique tu obtiens 0. Si elle est numérique, tous les NON(ESTNUM) renverront 0 et la multiplication par le reste donnera 0. Bref il ne te restera que le contenu de ta cellukle plus le MAX qui renverra 1.
    Si en revanche elle n'est pas numérique, NON(ESTNUM) renvoie 1 et permet de voir si la cellule 2 est numérique ou non, etc... etc... et à chaque cellule tu rajoute un NON(ESTNUM) de toutes les cellules précédentes.

    Maintenant, le MAX: si aucune cellule n'est numérique, il n'y a pas de raison que tu incrémentes.

    Voilà, j'espère que tu comprends cette formule Excel (tu vois même pas eu besoin de VBA), car les solutions mathématiques, bien que souvent plus efficaces, ne sont pas souvent celles auxquelles les développeurs pensent en premier.

  5. #5
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Tu as aussi la possibilité d'utiliser un nom pour une partie de ta formule:

    =SI(ET(ESTNUM(MECA!EU36);ESTTEXTE(COMM!P8));MECA!EU36+1;SI(ET(ESTNUM(MECA!EB36);ESTTEXTE(COMM!P8));MECA!EB36+1;SI(ET(ESTNUM(MECA!DI36);ESTTEXTE(COMM!P8));MECA!DI36+1;SI(ET(ESTNUM(MECA!CP36);ESTTEXTE(COMM!P8));MECA!CP36+1;SI(ET(ESTNUM(MECA!BW36);ESTTEXTE(COMM!P8));MECA!BW36+1;SI(ET(ESTNUM(MECA!BD36);ESTTEXTE(COMM!P8));MECA!BD36+1;SI(ET(ESTNUM(MECA!AK36);ESTTEXTE(COMM!P8));MECA!AK36+1;SI(ET(ESTNUM(MECA!R36);ESTTEXTE(COMM!P8));MECA!R36+1;""))))))))

    Tu fais insertion, nom, définir.
    Tu définis un nom par exemple toto et tu mets dans fait référence :
    = "ce que j'ai mis en gras plus haut".

    et dans ta cellule, tu mets :
    =SI(ET(ESTNUM(MECA!EU36);ESTTEXTE(COMM!P8));MECA!EU36+1;SI(ET(ESTNUM(MECA!EB36);ESTTEXTE(COMM!P8));MECA!EB36+1;SI(ET(ESTNUM(MECA!DI36);ESTTEXTE(COMM!P8));MECA!DI36+1;SI(ET(ESTNUM(MECA!CP36);ESTTEXTE(COMM!P8));MECA!CP36+1;toto))))

    J'ai pas testé les parenthèses à la fin. Il peux ne pas y en avoir le bon compte

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Ca ne résoud pas le problème des formules imbriquées.

  7. #7
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Pourquoi tu dis ça ?
    Ca résout son problème et ça imbrique bien des formules.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Par défaut
    Merci beaucoup, je vais essayé ça de suite et je te tiens au courant.

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Citation Envoyé par oOVaveOo Voir le message
    Pourquoi tu dis ça ?
    Ca résout son problème et ça imbrique bien des formules.
    Justement son problème c'est qu'Excel refuse l'imbrication au delà d'un certain nombre.
    Ta solution, elle, ne soulagera pas grand-chose, voire peut-être même rien du tout, car il évaluera le nom à l'intérieur de la formule. La seule chose que ça change, c'est que ça sera plus lisible.

    Donc si tu veux rainmaker666 (mais bon perso je ne le ferais pas), ce que tu peux faire c'est utiliser des noms pour différents morceaux de la formule que je t'ai donné.

  10. #10
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Tu veux dire que ma solution de donnera pas le même résultat que si on imbriquait tout ?

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Au contraire, ça donnera parfaitement le même résultat, à un tel point qu'elle engendrera le même problème.

  12. #12
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    J'ai testé dans excel (sans vrai valeurs ... ) mais je n'ai pas d'erreur.

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Essaye de changer les valeurs des cellules sources de tes noms pour voir...

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Par défaut
    Alors, j'ai testé la formule de decondelite et j'arrive au maximum de caractères possibles pour une formule.

    J'ai aussi testé la méthode de oOVaveOo et là surprise, plus d'erreur mais une fois que la formule à fini de tester la valeur "toto" elle ne met plus rien.

    J'explique, lors du test j'ai mis du texte dans toutes les feuilles, en supprimant au fure et à mesure le texte pages par pages, une fois que j'arrive à la cellule CP36, qui n'est pas dans la formule "toto", je n'ai plus de résultat.

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Citation Envoyé par decondelite Voir le message
    Donc si tu veux rainmaker666 (mais bon perso je ne le ferais pas), ce que tu peux faire c'est utiliser des noms pour différents morceaux de la formule que je t'ai donné.
    Tu n'as donc plus que ça comme possibilité.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Par défaut
    J'ai remplacé chaque morceau par un nom mais lorsque je veux vérifier les formules écrites dans les noms, je remarques que les cellules rentrées ne sont plus bonnes et qu'elles ont changé, je ne vois pas d'où vient le problème.

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Mets-les à jour, et n'oublie pas de mettre des $ aux bons endroits.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Par défaut
    Decondelite, ta technique a l'air de bien marcher mais j'ai un autre soucis maintenant.

    Le groupe =(ESTNUM(MECA!EU36))*MECA!EU36 renvoit #VALEUR quand il n'y a pas de chiffre et celà fausse complètement le résultat.
    Celà est valable pour chaque groupe avec ESTNUM().

    Comment lui dire de mettre 0 à la place de l'erreur ?

  19. #19
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =si(esterreur(ESTNUM(MECA!EU36)*MECA!EU36;0;ESTNUM(MECA!EU36)*MECA!EU36)

  20. #20
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Petit joueur. ^^

    CNUM Convertit un argument de type texte en nombre
    Ca donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (ESTNUM(CNUM(MECA!EU36)))*CNUM(MECA!EU36)
    A mettre un peu partout.

Discussions similaires

  1. [XL-2007] VBA Conversion de formule NB.SI.ENS ne marche pas
    Par vivi4561 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/05/2011, 16h35
  2. Conversion de formule
    Par Aitone dans le forum ASP
    Réponses: 6
    Dernier message: 12/12/2006, 15h33
  3. tirage formules en VBA avec excel
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 46
    Dernier message: 23/11/2006, 18h33
  4. Paramétrer une formule en vba
    Par arnogef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/08/2006, 11h48
  5. Copier une formule avec vba
    Par NAMORJOSE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/05/2006, 00h12

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