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 :

SOMMEPROD avec variables en VBA [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 121
    Par défaut SOMMEPROD avec variables en VBA
    Bonjour à tous,
    Je pense que mon soucis est tout bête mais je ne trouve pas la solution.
    Je dois compléter un fuille excel à partir d'une autre feuille avec un sommeprod, car je fais une recherche sur deux critères (chacun dans une colonne) et je renvois le contenu d'une troisième colonne. En fait je recherche des couples Numéro de dossier / Date et je renvoie un numéro associé à ce couple.
    Tout fonctionne sauf que le fichier qui possède les numéros associés aux couples peut changer d'emplacement.
    Du coup, j'utilise le bout de code suivant pour demander à l'utilisateur d'indiquer l'emplacement du fichier, puis je nomme les plages dudit fichier pour simplifier la suite et je fais mon sommeprod.
    Il y a un soucis avec la variable regroupfich dans mon SOMMEPRODUCT car ça me fait planter la macro : erreur 1004 erreur définie par l'application ou par l'objet.
    Si j'écris en dur le chemin du fichier dans le SOMMEPRODUCT, ça fonctionne.
    Donc je pense que j'ai un soucis de syntaxe ligne 51 du code.
    Quelqu'un aurait une idée ?
    D'avance merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Dim wb As Workbook
    Dim ws As Worksheet
    MsgBox "Choisissez le fichier de regroupement"
    'Ouverture de la boite de choix de fichier et récupération du nom de fichier sélectionné dans la variable nomfich
    regroupfich = Application.GetOpenFilename
    'Si aucun choix de fichier, fin de la procédure
    If regroupfich = False Then Exit Sub
    'Ouverture du fichier de regroup
    Set wb = Workbooks.Open(regroupfich)
    Set ws = wb.Worksheets(1)
    'Récupération de la dernière ligne du fichier de regroup
    Dim Last As Long
    Last = Range("A" & Rows.Count).End(xlUp).Row
    'Nommer les 3 plages d'intérêt
    ActiveWorkbook.Names.Add Name:="Num.sejour", RefersToR1C1:="=Feuil1!R2C1:R" & Last & "C1"
    ActiveWorkbook.Names.Add Name:="Dt.recept.", RefersToR1C1:="=Feuil1!R2C2:R" & Last & "C2"
    ActiveWorkbook.Names.Add Name:="No.rum", RefersToR1C1:="=Feuil1!R2C3:R" & Last & "C3"
    'Fermer le fichier de regroup
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    wb.Close
    Application.DisplayAlerts = True
    Windows("Traitement.xlsm").Activate
     
    'Feuille NA<120
        'Tri des données NA<120
        Sheets("NA<120").Select
        Columns("A:F").Select
        ActiveWorkbook.Worksheets("NA<120").Sort.SortFields.Clear
            'Ajout de la colonne D comme clé de tri
        ActiveWorkbook.Worksheets("NA<120").Sort.SortFields.Add Key:=Range("D:D") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
            'Ajout de la colonne E comme clé de tri
        ActiveWorkbook.Worksheets("NA<120").Sort.SortFields.Add Key:=Range("E:E") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
            'Application du tri
        With ActiveWorkbook.Worksheets("NA<120").Sort
            .SetRange Range("A:F")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        'Ajout des num de regroupement
        Windows("Traitement.xlsm").Activate
        Range("G2").Select
        ActiveCell.FormulaR1C1 = _
            "=SUMPRODUCT(( " & regroupfich & " !Num.sejour=RC[-3])*( " & regroupfich & " !Dt.recept.=RC[-2])*( " & regroupfich & " !No.rum))"

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Pas sûr de comprendre. Etablis la formule manuellement dans une cellule et poste-la.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 121
    Par défaut
    En fait, j'aimerais retrasncrire la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(('T:\sime\JDK\PMSI\LABORATOIRE\BIOCHIMIE\NUM_REGROUP\NumRegroup.xlsx'!Num.sejour=LC(-3))*('T:\sime\JDK\PMSI\LABORATOIRE\BIOCHIMIE\NUM_REGROUP\NumRegroup.xlsx'!Dt.recept.=LC(-2))*('T:\sime\JDK\PMSI\LABORATOIRE\BIOCHIMIE\NUM_REGROUP\NumRegroup.xlsx'!No.rum))
    en code VBA
    et en remplaçant le nom complet du fichier par une variable qui contiendrait le chemin complet du fichier préalablement sélectionné par l'utilisateur.
    Merci

    En pratique, j'ai un fichier Traitement qui doit être complété à partir de données présentes dans un fichier de regroupement. Ce fichier de regroupement peut varier en nombre de lignes et en emplacement sur le réseau.
    Pour m'affranchir du nombre de lignes du fichier, j'utilise le bout de code suivant pour nommer les 3 plages qui m'intéressent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Dim wb As Workbook
    Dim ws As Worksheet
    MsgBox "Choisissez le fichier de regroupement"
    'Ouverture de la boite de choix de fichier et récupération du nom de fichier sélectionné dans la variable nomfich
    regroupfich = Application.GetOpenFilename
    'Si aucun choix de fichier, fin de la procédure
    If regroupfich = False Then Exit Sub
    'Ouverture du fichier de regroup
    Set wb = Workbooks.Open(regroupfich)
    Set ws = wb.Worksheets(1)
    'Récupération de la dernière ligne du fichier de regroup
    Dim Last As Long
    Last = Range("A" & Rows.Count).End(xlUp).Row
    'Nommer les 3 plages d'intérêt
    ActiveWorkbook.Names.Add Name:="Num.sejour", RefersToR1C1:="=Feuil1!R2C1:R" & Last & "C1"
    ActiveWorkbook.Names.Add Name:="Dt.recept.", RefersToR1C1:="=Feuil1!R2C2:R" & Last & "C2"
    ActiveWorkbook.Names.Add Name:="No.rum", RefersToR1C1:="=Feuil1!R2C3:R" & Last & "C3"
    'Fermer le fichier de regroup
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    wb.Close
    Application.DisplayAlerts = True
    Jusque là tout va bien. En théorie, j'ai même récupéré le chemin complet du fichier de regroupement dans la variable regroupfich.
    L'étape suivante consiste à faire un sommeprod pour recherche les couples qui vont bien et récupérer une donnée associée.
    La formule sommeprod marche si je l'écris en dur.
    Mais ça ne convient pas puisque l'emplacement et le nom du fichier de regroupement peuvent varier.
    J'essaie donc de faire focntionner le sommeprod avec la variable qui contient le chemin complet du fichier de regroupement et c'est là que ça plante...

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

Discussions similaires

  1. [Toutes versions] Insertion formule avec variable dans VBA
    Par Suomiland dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/06/2015, 07h30
  2. Réponses: 11
    Dernier message: 13/09/2007, 15h25
  3. requete avec variable dans VBA
    Par Mathieu.Nanoux dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 07/09/2007, 13h41
  4. [SQL & VBA] Requête avec Variable
    Par Altrensa dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/07/2007, 14h31
  5. Réponses: 10
    Dernier message: 11/07/2007, 12h06

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