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 index sous VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 10
    Par défaut Formule index sous VBA
    Bonjour à tous,

    Après des heures de recherches sur les différents sites et sur l'aide VBA je ne trouve toujours pas de solution à mon problème (qui j'en suis sure n'est pas bien compliqué).

    J'ai une formule matricielle qui fonctionne très bien, je n'arrive juste pas à la faire continuer sur les lignes suivantes.
    Je veux dire que là, ça m'affiche le meme résultat dans toutes les cellules correspondant à ma recherche puisque mes cellules recherchées ($A15, etc.) sont figées.

    J'ai cru comprendre qu'il fallait utiliser les &" pour rendre les cellules variables mais je n'arrive pas à traduire la formule.

    J'ai choisi d'utiliser la commande formula parce que je ne sais pas comment écrire la formule index en code VBA.

    Si quelqu'un pouvait me donner une piste ce serait super!!

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim nbrow As Long
    nbrow = Range("A65536").End(xlUp).row
    For j = 2 To nbrow
     
    'Copy 2nd layer Name
    If Sheet4.Cells(j, 5) = "" And Sheet4.Cells(j, 2) = "2" Then
            Sheet4.Cells(j, 5).FormulaArray = "=INDEX(List!$A$2:$Q$1600,SUMPRODUCT((List!$A$2:$A$1600=$A15)*(List!$E$2:$E$1600=$F14)*(List!$F$2:$F$1600=$G14)*(List!$L$2:$L$1600=$B15),ROW(List!$H$2:$H$1600)-1),8)"
     
    End If
     
    Next j

    Cela correspond au bouton INSERT dans mon fichier.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    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 : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai choisi d'utiliser la commande formula parce que je ne sais pas comment écrire la formule index en code VBA.
    En VBA, pour utiliser la fonction Index ainsi que bien d'autres fonctions d'ailleurs. Utiliser WorksheetFunction suivi du nom de la fonction (en anglais)
    Pour la syntaxe de la fonction, c'est identique qu'avec Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Worksheets(1)
     MsgBox Application.WorksheetFunction.Index(.Range("A2:K30"), 9, 1)
    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

  3. #3
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 10
    Par défaut Index
    Bonjour,

    Pour la syntaxe de la fonction, c'est identique qu'avec Excel
    J'ai essayé d'intégrer la formule SUMPRODUCT mais il semble que la syntaxe soit differente d'excel au niveau des *.
    Je n'arrive pas à trouver comment les remplacer.
    J'ai vu sur certains forums que la fonction SUMPRODUCT était moins efficace sur VBA que sur Excel en formule.
    Quelqu'un aurait-il une idée de ce que je pourrais utiliser à la place?
    index match ?

    Voici mon code qui ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim nbrow As Long
    nbrow = Range("A65536").End(xlUp).row
    For j = 2 To nbrow
     
    'Copy 2nd layer Name
    If Sheet4.Cells(j, 5) = "" And Sheet4.Cells(j, 2) = "2" Then
    Sheet4.Cells(j, 5).Activate
    ActiveCell.Value = Application.WorksheetFunction.Index(Sheet1.Range("A2:Q1600"), WorksheetFunction.SumProduct((Sheet1.Range("A2:A1600") = Sheet4.Cells(1, 15)) * (Sheet1.Range("E2:E1600") = Sheet4.Cells(6, 14) * (Sheet1.Range("F2:F1600") = Sheet4.Cells(7, 14)) * (Sheet1.Range("L2:L1600") = Sheet4.Cells(2, 15)),(sheet1.Range("H2:H1600")-1), 8)
         End If
     
    Next j
    Merci d'avance!

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    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 : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici mon code qui ne fonctionne pas:
    C'est un peu vague, qu'est-ce qui ne fonctionne pas ?
    As-tu un message d'erreur, une valeur erronée ?
    As-tu essayé la même formule en Excel pour voir si tu avais la bonne valeur ?

    [EDIT]
    Je vois que tu précises partout l'objet feuille sauf dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbrow = Range("A65536").End(xlUp).row
    As-tu vérifié que tu es sur la bonne feuille et que ta variable nbrow à la bonne valeur.
    As-tu fais tourner ton programme au pas à pas (Touche F8)
    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

  5. #5
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 10
    Par défaut
    Ce qui ne fonctionne pas c'est la formule en elle meme, VBA n'accepte pas les * entre chaque condition comme la formule excel suivante le fait:

    "=INDEX(List!$A$2:$Q$1600,SUMPRODUCT((List!$A$2:$A$1600=$A15)*(List!$E$2:$E$1600=$F14)*(List!$F$2:$F$1600=$G14)*(List!$L$2:$L$1600=$B15),ROW(List!$H$2:$H$1600)-1),8)"

    Un message d'erreur "syntax error" s'affiche lorsque j'utilise F8.

    Quand j'essaye cette formule directement dans les cellules j'obtiens tout à fait le bon résultat, c'est pour ça qu'au début j'avais utilisé le code FormulaArray=

    Mon problème c'est que je n'arrive pas à boucler/incrementer pour chaque cellule = "" ce qui fait que j'obtiens le même résultat dans toutes les cellules vides (voir fichier joint).

    Pour ce qui est de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheet4.Cells(j, 5).Activate
    nbrow = Range("A65536").End(xlUp).row
    Je l'ai effectivement remplacé par :
    nbrow = sheet1.Range("A65536").End(xlUp).row
    La variable nbrow a bien la bonne valeur et j'utilise bien F8 à chaque fois...

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    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 : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu dois regarder du côté de la formule Evaluate.
    Je n'ai pas le temps maintenant de l'adapter à un cas de SOMMEPROD mais je regarderai tout à l'heure.
    Petit exemple ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim plage1 As String, plage2 As String
     With ThisWorkbook.Worksheets("Feuil2")
      plage1 = .Range("A2:A7").Address: plage2 = .Range("C2:C7").Address
     End With
     Debug.Print Evaluate("=Sum(" & plage2 & ")") ' Somme de la plage C2:C7
     Debug.Print Evaluate("=Sum(" & plage2 & " * " & 2 & ")") ' Somme de la même plage * 2
    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

  7. #7
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 10
    Par défaut
    Ok, j'ai trouvé un site qui explique comment passer d'une formule excel à une formule VBA avec evaluate.

    J'essaye et reviendrais vers vous en dernier recours, merci beaucoup en tout cas pour votre réactivité!

Discussions similaires

  1. Formule TEXTE sous VBA
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/05/2011, 11h35
  2. Pb de formule de calcul sous VBA
    Par bagheria85 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/09/2010, 11h58
  3. création d'un colonne formule sous vba
    Par volubiliss dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 07/06/2010, 09h28
  4. [E-02] formules excel sous vba
    Par ladygtk dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/02/2009, 13h19
  5. Forcage sous VBA d'une formule excel
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/10/2007, 10h22

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