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

VBA Access Discussion :

Formule matricielle lancée depuis VBA access vers excel [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut Formule matricielle lancée depuis VBA access vers excel
    Bonjour à tous,

    Je bloque depuis quelques heures sur une incompatibilité de type et je n'arrive pas à trouver l'erreur.

    J'ai une base access. Je pilote un fichier excel depuis access. Mon but est de faire des calculs (combinaison index et equiv multicritères) dans le fichier excel en le déclenchant d'access.

    Dans excel directement, mes formules fonctionnent très bien (voir pièce jointe). Dans access, ça plante et je vous mets ci-dessous le code avec la partie où ça bloque en rouge (j'ai fait des tests en découpant mon code donc il est - quasi - certain que ça bloque à cet endroit).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub WriteDataTOTAL(xlWkb As excel.Workbook, NumWsh As Integer, plageDate As String, colonneDate As String, colonneMachine As String)
        Dim i, countplageDate
        countplageDate = xlWkb.Worksheets(NumWsh).Range(plageDate).Rows.Count
        For i = 1 To countplageDate
            xlWkb.Worksheets(NumWsh).Range(colonneMachine & i + 1) = _
                WorksheetFunction.Index(xlWkb.Worksheets(NumWsh).Range("SOURCES_EFFECTIFS_NB"), _
                        WorksheetFunction.Match( _
                            xlWkb.Worksheets(NumWsh).Range(colonneMachine & "1"), _
                                IIf(xlWkb.Worksheets(NumWsh).Range("SOURCES_EFFECTIFS_DATE") = xlWkb.Worksheets(NumWsh).Range(colonneDate & "2"), _
                                    xlWkb.Worksheets(NumWsh).Range("SOURCES_EFFECTIFS_FILTRE"), ""), 0))
        Next i
    End Sub
    L'appel de la procédure:
    Call WriteDataTOTAL(xlWkb, 1, "TOTAL_DATE", "K", "L")


    Je me dis que ça doit être tout bête: je fais dans mon Iif une comparaison d'un range et d'une valeur, mais ça ne marche pas, j'ai également testé en ajoutant.Value dans le membre à droite du égal.

    Merci par avance pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut Formule matricielle lancée depuis VBA access vers excel
    Bonjour,

    J'ai tenté une autre approche que mon code précédent. Dans excel, je valide ma formule par ctrl/maj/entrée puisqu'il s'agit d'une fonction matricielle. Or je ne l'ai pas indiqué dans mon code access. J'ai donc tenté ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    xlWkb.Worksheets(NumWsh).Range(colonneMachine & i + 1).Select
        Selection.FormulaArray = _
            "=INDEX(SOURCES_EFFECTIFS_NB,MATCH(""M1"",IF((SOURCES_EFFECTIFS_DATE=""2013_2""),SOURCES_EFFECTIFS_FILTRE,""""),0))"
    Ce code fonctionne mais mes critères sont tapés en dur. Si je tente de remettre le paramètre, ça ne fonctionne plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        xlWkb.Worksheets(NumWsh).Range(colonneMachine & i + 1).Select
        Selection.FormulaArray = _
            "=INDEX(SOURCES_EFFECTIFS_NB,MATCH(" & colonneMachine & " ""1"",IF((SOURCES_EFFECTIFS_DATE="  & colonneDate & i + 1 & "),SOURCES_EFFECTIFS_FILTRE,""""),0))"
    J'ai alors un message d'erreur
    Impossible de définir la propriété FormulaArray de la classe Range"
    Vu que le code fonctionne si les paramètres sont tapés en dur, je me dis que je m'approche de la solution mais comment faire pour faire comprendre que colonneMachine et colonneDate sont des variables définies dans Access?

    Merci pour votre aide.

  3. #3
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    J'avance peu à peu...

    J'ai lu sur le net qu'il fallait utiliser la notation L1C1 pour les formules matricielles déclenchées en VBA.

    Alors j'ai tenté le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'appel de procédure:
    Call WriteDataTOTAL(xlWkb, 4, "TOTAL_DATE", "K", "L1C12")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'code de la procédure (je laisse tomber la boucle pr le moment)
    Sub WriteDataTOTAL(xlWkb As excel.Workbook, NumWsh As Integer, plageDate As String, colonneDate As String, colonneMachine As String)
        Dim i, countplageDate
        countplageDate = xlWkb.Worksheets(NumWsh).Range(plageDate).Rows.Count
        xlWkb.Worksheets(NumWsh).Range("L2").Select
        Selection.FormulaArray = _
            "=INDEX(SOURCES_EFFECTIFS_NB,MATCH(" & colonneMachine & ",IF((SOURCES_EFFECTIFS_DATE=""2013_2""),SOURCES_EFFECTIFS_FILTRE,""""),0))"
     
    End Sub
    ça ne plante pas mais qd je vais voir le fichier excel en L2, j'ai la formule suivante qui est inscrite:
    =INDEX(SOURCES_EFFECTIFS_NB;EQUIV('L1C12';SI((SOURCES_EFFECTIFS_DATE="2013_2");SOURCES_EFFECTIFS_FILTRE;"");0))
    Il y a donc des quotes qui entourent L1C12 donc excel ne le résout pas. Pourquoi le programme ajoute des quotes ?

    Merci !

  4. #4
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Après pas mal de recherches, j'ai finalement modifié mon code comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub WriteDataTOTAL(xlWkb As excel.Workbook, NumWsh As Integer, plageDate As String, colonneDate As String, colonneMachine As String)
        Dim i, countplageDate
        countplageDate = xlWkb.Worksheets(NumWsh).Range(plageDate).Rows.Count
        For i = 1 To countplageDate
            xlWkb.Worksheets(NumWsh).Range(colonneMachine & i + 1).FormulaArray = _
                    "=INDEX(SOURCES_EFFECTIFS_NB,MATCH(" & colonneMachine & "1" & ",IF((SOURCES_EFFECTIFS_DATE=" & colonneDate & i + 1 & "),SOURCES_EFFECTIFS_FILTRE,""""),0))"
        Next i
    End Sub
    et ça marche

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

Discussions similaires

  1. code Vba permettant d'extraire access vers excel
    Par soussou92 dans le forum VBA Access
    Réponses: 5
    Dernier message: 01/07/2008, 20h53
  2. Réponses: 2
    Dernier message: 03/10/2007, 07h09
  3. Tracé graphique sur fichier excel depuis vba access
    Par kdestine dans le forum VBA Access
    Réponses: 0
    Dernier message: 26/09/2007, 12h37
  4. Export vers Access vers EXCEL en VBA
    Par cornet04 dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/06/2007, 15h36
  5. Access vers Excel en VBA
    Par oceanediana dans le forum Access
    Réponses: 5
    Dernier message: 03/07/2006, 11h18

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