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 :

FormulaArray et macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 70
    Par défaut FormulaArray et macro
    Bonjour à tous,

    J'ai un soucis avec le compilateur d'Excel qui accepte par macro cette formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ={INDEX(Fichier!G2:G5305;EQUIV(A2&D10&CONCATENER(A4;"01");Fichier!G2:G5305&Fichier!H2:H5305&Fichier!M2:M5305;0);1)
    Et pas celle-ci
    En VB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ={SI(ESTERREUR(INDEX(Fichier!G2:G5305;EQUIV(A2&D10&CONCATENER(A4;"01");Fichier!G2:G5305&Fichier!H2:H5305&Fichier!M2:M5305;0);1));"";INDEX(Fichier!G2:G5305;EQUIV(A2&D10&CONCATENER(A4;"01");Fichier!G2:G5305&Fichier!H2:H5305&Fichier!M2:M5305;0);1))
    Le deux formule marche bien quand je l'ai écris dans un onglet du fichier.

    Par contre en mode macro la 1ère passe et la 2ème non.

    Elle ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Selection.FormulaArray = _
            "=IF(ISERROR(INDEX(Fichier!R[-8]C[15]:R[5295]C[15],MATCH(R[-8]C[-4]&RC[-1]&CONCATENATE(R[-6]C[-4],""01""),Fichier!R[-8]C[2]:R[5295]C[2]&Fichier!R[-8]C[3]:R[5295]C[3]&Fichier!R[-8]C[8]:R[5295]C[8],0),1)),2,INDEX(Fichier!R[-8]C[15]:R[5295]C[15],MATCH(R[-8]C[-4]&RC[-1]&CONCATENATE(R[-6]C[-4],""01""),Fichier!R[-8]C[2]:R[5295]C[2]&v!R[-8]C[3]:R[5295]C[3]&XBMO" & _
            "8]C[8]:R[5295]C[8],0),1))"

    Merci

  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 : 71
    Localisation : France, Gironde (Aquitaine)

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

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


    La formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF(ISERROR(INDEX(Fichier!R[-8]C[15]:R[5295]C[15],MATCH(...
    ne peut pas correspondre à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ={SI(ESTERREUR(INDEX(Fichier!G2:G5305;EQUIV(...
    Dans le meilleur des cas (en colonne A) c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ={SI(ESTERREUR(INDEX(Fichier!P2:P5305;EQUIV(...
    Utilises le code pour copier la formule dans une cellule, puis la copier/copier vers le VBA, à adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A2").NumberFormat = "@"
    Range("A2").Value = Range("A1").FormulaR1C1

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 70
    Par défaut
    Salut Patrice740,

    Peux tu m'expliquer pourquoi cela ne peut pas correspondre?

    Je trouve cela très étonnant sachant que lorsque je rentre cette formule dans un onglet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ={SI(ESTERREUR(INDEX(Fichier!G2:G5305;EQUIV(...
    une macro tourne derrière et enregistre ce que je fais. Ce n'est donc pas moi qui est créer la formule en format R1C1 mais Excel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF(ISERROR(INDEX(Fichier!R[-8]C[15]:R[5295]C[15],MATCH(...
    Et l'erreur est: Impossible de définir la proprièté FormulaArray de classe Range


    Re,

    Pour reprendre:

    1ere Formule en E10
    1. Cellule
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      {=INDEX(Fichier!G2:G5305;EQUIV(A2&D10&CONCATENER(A4;"01");Fichier!G2:G5305&Fichier!H2:H5305&Fichier!M2:M5305;0);1)}
    2. Macro
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      Range("E10").Select
       
          Selection.FormulaArray = _
              "=INDEX(Fichier!R[-8]C[2]:R[5295]C[2],MATCH(R[-8]C[-4]&RC[-1]&CONCATENATE(R[-6]C[-4],""01""),Fichier!R[-8]C[2]:R[5295]C[2]&Fichier!R[-8]C[3]:R[5295]C[3]&Fichier!R[-8]C[8]:R[5295]C[8],0),1)"


    Marche



    2eme Formule en E10
    Je rajoute uniquement les conditions suivantes: SI() & ESTERREUR() pour éviter les #N/A dans mes cellules
    1. Cellule
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ={SI(ESTERREUR(INDEX(Fichier!G2:G5305;EQUIV(A2&D10&CONCATENER(A4;"01");Fichier!G2:G5305&Fichier!H2:H5305&Fichier!M2:M5305;0);1));"";INDEX(Fichier!G2:G5305;EQUIV(A2&D10&CONCATENER(A4;"01");Fichier!G2:G5305&Fichier!H2:H5305&Fichier!M2:M5305;0);1))}
    2. Macro
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      Range("E10").Select
       
          Selection.FormulaArray = _
              "=IF(ISERROR(INDEX(Fichier!R[-8]C[2]:R[5295]C[2],MATCH(R[-8]C[-4]&RC[-1]&CONCATENATE(R[-6]C[-4],""01""),Fichier!R[-8]C[2]:R[5295]C[2]&Fichier!R[-8]C[3]:R[5295]C[3]&Fichier!R[-8]C[8]:R[5295]C[8],0),1)),"""",INDEX(Fichier!R[-8]C[2]:R[5295]C[2],MATCH(R[-8]C[-4]&RC[-1]&CONCATENATE(R[-6]C[-4],""01""),Fichier!R[-8]C[2]:R[5295]C[2]&Fichier!R[-8]C[3]:R[5295]C[3]&Fichier" & _
              "]C[8]:R[5295]C[8],0),1))"


    Marche pas


    Je précise que je tape la formule dans la cellule et la macro enregistre toute seule le code en VB!

  4. #4
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Est-il obligatoire qu'il y ait une formule dans cette cellule ?

    Ne peux-tu pas y mettre simplement le résultat en programmant en pur VBA ce que fait ta formule.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 70
    Par défaut
    Salut Igloobel,


    Merci de ta participation


    Oui, c'est obligatoire ..

    Les utilisateurs vont avoir besoin de la formule des cellules pour des modifications ultérieures.

    Je pourrais me contenter de la 1ère formule qui passe par macro, le seul problème est qu'elle affiche des #N/A et cela empêche la formule SOMME de faire un résultat:

    En A1 j'applique ma formule et j'obtiens 10
    En A2 j'applique ma formule et j'obtiens #N/A

    En A3 ou je fais la somme de A1 & A2, j'aurais #N/A au lieu d'avoir 10 ...

    Voila pourquoi j'essaie de les cacher dans ma formule avec SI & ESTERREUR mais cela bloque coté macro ..

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 70
    Par défaut
    Bon au final,

    Je pense que je vais garder la 1ere formule qui passe avec la macro.

    En ce qui concerne les #N/A dans la somme, j'ai trouvé ça qui marche très bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI(A1:A2;"<>#N/A")
    Merci de votre participation

  7. #7
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lulz17 Voir le message
    Oui, c'est obligatoire ..

    Les utilisateurs vont avoir besoin de la formule des cellules pour des modifications ultérieures. ...
    tu veux dire par là qu'ils vont modifié ta formule ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 70
    Par défaut
    Yep,

    C'est une demande du client. Il s'y "connait" en Excel

    Donc, c'est pour sa que la macro était idéal pour insérer les valeurs & formules souhaitées dans les cellules. Ensuite, il peut les manipuler à sa guise.

    C'est surtout la sélection de plage qui peut changer sur des cas un peu "unique" et non exhaustifs je dirais.

  9. #9
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    dans ce cas même la gestion du juste "si erreur" en pur VBA auquel j'avais pensé ne sera pas suffisant et j'ai pas mieux a t'offrir

    dommage qu'il veut bidouiller tes formules

    perso moi j'aurais essayé de persuader mon client en lui montrant une gestion de plage modifiable le tout en vba

    sachant que toute façon c'est toujours lui qui a le dernier mot et dans ce cas ta solution reste le seule acceptée

    bon courage

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 70
    Par défaut
    perso moi j'aurais essayé de persuader mon client en lui montrant une gestion de plage modifiable le tout en vba
    Je suis d'accord avec toi!

    Mais même si le client s'y "connait" en Excel, il n'aime pas trop le VBA

    sachant que toute façon c'est toujours lui qui a le dernier mot
    C'est exactement sa!

    Et en même temps ca m'arrange c'est plus rapide à faire

    En tout cas merci de ta participation

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

Discussions similaires

  1. [VB6] Exécuter une macro Access
    Par Nektanebos dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 22/02/2006, 16h32
  2. [VBA-E] Macro ouverture fichier déja ouvert
    Par bhaal76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 14h30
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 03h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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