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 matricielle en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de fabrication
    Inscrit en
    Février 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de fabrication
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2017
    Messages : 38
    Par défaut Formule matricielle en VBA
    Bonjour à tous,

    je reviens vers vous afin de m'aider à résoudre un problème. Je ne trouve pas d'aide sur la manière de modifier un calcul matriciel dans une cellule de mon tableau en code VBA afin que cela évite de faire ralentir mon PC.

    Voici ma formule:

    {=SI(Y2141="";"";INDEX('O:\Suivi performances usine\Suivi de fabrication\[Suivi de fab 2015 (données).xlsm]Base'!$AC$1:$AC$65536;MAX(SI((Saisie!$A2141='O:\Suivi performances usine\Suivi de fabrication\[Suivi de fab 2015 (données).xlsm]Base'!$G$1:$G$65536)*(Saisie!$I2141='O:\Suivi performances usine\Suivi de fabrication\[Suivi de fab 2015 (données).xlsm]Base'!$E$1:$E$65536);LIGNE('O:\Suivi performances usine\Suivi de fabrication\[Suivi de fab 2015 (données).xlsm]Base'!$AC$1:$AC$65536);0))))}

    Mon tableau excel comporte déjà plus de 2000 lignes et il y en aura encore. Le but de cette formule est d'aller chercher une valeur présente dans un autre classeur (dans un fichier commun) en fonction de plusieurs critères (en fonction de la date et du code produit fabriqué).

    Merci pour votre aide.

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    As-tu essayé l'enregistreur de macro?
    http://fauconnier.developpez.com/tut...istreur-macro/

  3. #3
    Membre averti
    Homme Profil pro
    Chef de fabrication
    Inscrit en
    Février 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de fabrication
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2017
    Messages : 38
    Par défaut
    Bonjour Riaolle,

    oui j'ai déjà essayé mais cela ne fonctionne pas. Le but est d'aller copier la valeur présent dans un tableau dans un autre mais avec deux critères qui sont : la date et le type de produit. En fonction de ça, il m'en déduit la quantité produite.

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    J'aimerai savoir quelles sont les manip que tu fais manuellement (mis à part, mettre la formule), pour créer ta plage matricielle ? Et comment tu fais, tjs manuellement, pour retirer la forme matricielle de cette même plage ?
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Comme tu passes par VBA, il serait peut-être plus simple de ne pas passer par une formule matricielle, mais de créer une fonction en VBA qui te permets de faire ce que tu veux faire avec ta fonction matricielle.
    La formule que tu donnes est un peu longue, alors j'ai du mal à voir exactement tout ce qu'il y a dedans. Mais les SI, seront retranscris par des conditions IF, le Max peut être retrouvé avec Application.Max, INDEX et LIGNE peuvent très sûrement être remplacé par Applicatin.Match.
    Sais-tu coder en VBA ou te bornes-tu à l'enregistreur de macro?
    Donne-nous un peu plus de précision sur l'ensemble des conditions et, si tu peux, commence à écrire un code et on pourra regarder ensemble comment attaquer le problème.

  6. #6
    Membre averti
    Homme Profil pro
    Chef de fabrication
    Inscrit en
    Février 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de fabrication
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2017
    Messages : 38
    Par défaut
    Riaolle,

    oui je connais un peux VBA mais je suis seulement en train d’apprendre. Je m'exerce avec l'enregistreur et je regarde les forums et tuto.

    Pour les explications, les voici :

    J'ai un fichier "Fabrication" qui calcul mes quantités de matières mise en œuvre, les coûts, les quantités produites (par pièces, par kg...) le tout par jour de production et par produit.

    J'ai un autre fichier "Déchets" où je saisies mes valeurs de déchets par jour et par produits fabriqués suivant les différents atelier (Production, tri et conditionnement).

    Je souhaite que la valeur "quantité produites en kg" provenant du fichier "Fabrication" puisse s'ajouter (en VBA) à la fin de mon tableau "déchets". Cette valeur doit apparaître en fonction de la date de production que j'aurais saisies dans mon fichier "déchets" et en fonction du produits fabriqués (toujours dans le fichier "déchets").

    Je joins un fichier pour que vous puissiez voir.

    Classeur1.xlsx

    Merci pour votre aide.

  7. #7
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Ouh la la, un document avec plein de références de nourriture .... ça me donne envie de manger

    Personnellement, je pense qu'il serait plus simple de passer par du code VBA. Je suis pas très à l'aise avec les formules matricielles. Mais du coup, si tu préfères une formule matricielle, il faudra attendre que qqun d'autre te répondes sur ce point. Et j'insiste vraiment sur le fait que peut-être une formule matricielle est plus simple pour toi, c'est juste que je ne sais pas bien manipuler, alors je t'explique ce qu'on pourrait faire en VBA.

    Voici quelques idees pour écrire un code VBA. J'ai pas tout à fait compris ce qu'on devait chercher et où, puis ce qu'on devait copier et où, mais je vais te donner les grandes lignes.
    Pour trouver la première ligne vide d'une feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim n As Long
    n = Sheets("maFeuille").Cells(Rows.Count, 1).End(xlUp).Row + 1
    Rows.Count indique le nombre de lignes total des feuilles. End(xlUp) permet de remonter à la première ligne non vide (donc la dernière ligne non vide de ta feuille), comme on veut la première ligne vide on fait + 1.
    Ensuite quand tu voudras copier quelque chose (la valeur de la cellule A2, par exemple) sur cette ligne, en colonne A, par exemple, tu pourras écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A" & n).Value = Range("A2").Value
    Si j'ai bien compris, ceci te permettra de trouver la ligne où tu écriras le résultat de ta recherche.

    Trouver une valeur dans une colonne se fait avec la fonction Match:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim i As Long
    i = Application.Match(valeur_cherchee, colonne_de_recherche, 0)
    colonne de recherche étant sous la forme : Range("A:A") s'il s'agit de la colonne A, par exemple. i sera le numero de ligne.
    Si tes produits sont bien trié par ordre de date, tu peux procéder comme cela :
    1. Utiliser Match pour trouver la première occurence de la date.
    2. Utiliser Match pour trouver ton code produit, à partir de la ligne de la date.


    Si on cherche dans la Feuil1 et que la date est en A1 dans la Feuil2 et que le code produit est en A2 dans la Feuil2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim i As Long
    i = Application.Match(Sheets("Feuil2").Range("A1").Value2, Sheets("Feuil1").Range("G:G"), 0)          'numero ligne 1ère occurence de la date
    Dim derLig As Long
    derLig = Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row + 1    'dernière ligne de la feuill1
    Dim j As Long
    j = Application.Match(Sheets("Feuil2").Range("A2").Value, Sheets("Feuil1").Range("E" & i & ":E" & derLig, 0)    'numero de la ligne qu'on cherche
    Dans le deuxième Match : la plage de recherche n'est pas une colonne, mais une plage de cellule : ici on regarde dan la colonne E, mais seulement à partir de la ligne i et jusqu'à la dernière ligne du tableau.

    J'espère que c'est compréhensible

  8. #8
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Pour information juste avec la simple question que je t'ai posé,
    J'ai fait la manipulation manuellement avec l'enregistreur de macro :
    (Manuellement tu ne peux modifier une formule tant qu'elle est sous forme matricielle, il faut la remettre en formule simple)

    Donné par l'enregistreur de macro :
    Formule forme matricielle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.FormulaArray = "mettre la formule ici"
    Formule remettre forme simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.FormulaR1C1 = "mettre la formule ici"
    Edit : Selection peut évidemment être remplacée par la plage que tu auras déterminé => ex :sheets(1).Range("A2:K15"). FormulaArray
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

Discussions similaires

  1. Transformer formule matricielle en VBA
    Par sardaucar dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/01/2017, 09h25
  2. [XL-2010] Formule matricielle et VBA
    Par zaza45 dans le forum Excel
    Réponses: 2
    Dernier message: 24/09/2013, 16h38
  3. vba - problème enregistrement de formule matricielle
    Par philppe27 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/02/2012, 17h41
  4. [XL-2003] Formule matricielle en VBA
    Par jackall dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/06/2009, 11h24
  5. [VBA-E] - formule matricielle
    Par jimbololo dans le forum Macros et VBA Excel
    Réponses: 37
    Dernier message: 09/06/2006, 14h27

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