Problème Macro + Formule Matricielle

Bonjour à toutes et à tous.

Je me permets de venir vers vous pour un problème que je ne parviens pas à solutionner.

Explications du pourquoi de ce fichier :

  • A intervalle régulier, nous faisons un appel d'offre à nous fournisseur. Nous leur envoyons un fichier contenant l'ensemble des - articles (ici 139). Ils vont indiquer le prix uniquement sur certaines lignes, à savoir les articles qu'ils produisent.
  • Chaque fournisseur (ici, 23 au total) nous renvoie le fichier individuellement.
  • Après ça, il nous faut regrouper toutes ces informations, afin de pouvoir comparer les offres faites sur chaque article.

J'ai réussi à créer une formule matricielle me permettant d'aller chercher uniquement les lignes complétées par le fournisseur 1. Jusque là, je suis content.

=SIERREUR(INDEX(AO!A:A;PETITE.VALEUR(SI(DECALER(AO!$U$2;1;;NBVAL(AO!$A:$A)-1)="X";LIGNE(DECALER(AO!$U$2;1;;NBVAL(AO!$A:$A)-1)));LIGNES(A$2:A2)));"")

Sauf qu'il faut que je fasse cela pour chaque fournisseur (23!).

Comme il s'agit d'une macro, on passe en R1C1 pour l'écriture de la formule. Ce que je ne trouve pas aisé du tout.

"Formule matricielle pour le 1er attribut dans la macro"
Range("A2").FormulaArray = _
            "=IFERROR(INDEX(AO!C,SMALL(IF(OFFSET(AO!R2C" & x & ",1,,COUNTA(AO!C1)-1)=""X"",ROW(OFFSET(AO!R2C" & x & ",1,,COUNTA(AO!C1)-1))),ROWS(R2C:RC))),"""")"

Je suis parvenu à faire en sorte que la colonne "U" (& x &, x étant modifié à la fin de chaque boucle) change à chaque boucle.

Pour les colonnes A2, B2, C2, D2, E2 et F2, quel que soit le fournisseur, rien ne change, à part la référence à la colonne U.

En revanche pour les colonnes J2, K2, L2 et M2, la matrice de l'index change en fonction du fournisseur.

Et c'est là que j'ai besoin d'aide. Je n'arrive pas à intégrer une variable dans cette formule pour que la matrice des colonne J, K, L et M changent en fonction du fournisseur.

Je vous joins un fichier anonymisé pour que vous puissiez mieux comprendre mes explications alambiquées.

Bien excel-ment,

Bonjour,

Comme il s'agit d'une macro, on passe en R1C1 pour l'écriture de la formule. Ce que je ne trouve pas aisé du tout.

Range("A2").FormulaArray = _
            "=IFERROR(INDEX(AO!C,SMALL(IF(OFFSET(AO!R2C" & x & ",1,,COUNTA(AO!C1)-1)=""X"",ROW(OFFSET(AO!R2C" & x & ",1,,COUNTA(AO!C1)-1))),ROWS(R2C:RC))),"""")"

Pas forcément, avec

Range("A2").FormulaLocal

tu écris ta formule comme s'il s'agissait de ta feuille.

bonjour,

Salut Steelson. On doit pouvoir variabiliser TOUSSA mébon... Ce classeur est un peu minimaliste pour y voir clair.

Donc je laisse cette partie pour les ceusse qui le sente mieux que moi...

En revanche j'ai retravailler un peu la macro Copier pour qu'elle ressemble à quelque chose :

Sub Copier()
    Dim Fichier As String
    'Acceleration du traitement des données
    Application.ScreenUpdating = False
    'Ouverture fenêtre de selection du fichier d'entrée
    Fichier = Application.GetOpenFilename
    Workbooks.Open Filename:=Fichier
    'supprime le chemin
    Fichier = Dir(Fichier)

    'Détermination du fournisseur à insérer
    nom = InputBox("Entrez le nom du fournisseur ?")
While nom <> ""
    nom = StrConv(nom, 1)
    'Copie données fichier d'entrée vers fichier de sortie en fonction du fournisseur indiqué
Select Case nom
Case "ACODIAL": x = 17
Case "AGRIPEX": x = 23
Case "ARRIVE": x = 29
Case "BRETAGNE LAPINS": x = 35
Case "CAILLE ROBIN": x = 41
Case "COUTHOUIS": x = 47
Case "EUROWILD": x = 53
Case "FERMIER DU GERS": x = 59
Case "FERMIER LANDAIS": x = 65
Case "HAPI": x = 71
Case "JAN ZANDBERGEN": x = 77
Case "LDC GUILLET": x = 83
Case "PHOCEOR": x = 89
Case "RAMON": x = 95
Case "RONSARD": x = 101
Case "ROUTHIAU": x = 107
Case "SARA": x = 113
Case "SBV": x = 119
Case "SOULARD": x = 125
Case "SOVIPOR": x = 131
Case "THOMAS": x = 137
Case "VESTEY": x = 143
Case "VOLATYS": x = 149
Case Else
   MsgBox "Le fournisseur n'existe pas ou est mal orthographié"""
End Select
   If x > 0 Then
      Range("I4:L200").Copy ThisWorkbook.Sheets(1).Cells(x, 4)
      x = 0
   End If
   nom = InputBox("Entrez le nom du fournisseur ?")
Wend
    'Fermeture du classeur
    ActiveWorkbook.Close
    'On remet les réglages par défaut
    Application.ScreenUpdating = True
    'Confirmation de l'exportation
    MsgBox "exportation des données réussite"
End Sub

A+

@Galopin01 > Cool! Merci. Je vais, d'une part copier le code, et , d'autre part, l'étudier pour comprendre comment il est boutiquer.

@Steelson > Ok, du coup, avec ça, je réutilise le code classique. Je ne pensais pas que ça fonctionnait. Je vais essayer. Merci.

Je suis parvenu à résoudre mon problème suite à une illumination! Et la petite phrase de Galopin01 "On doit pouvoir variabiliser TOUSSA"

Merci pour son aide indirect.

Bonne journée!!

Rechercher des sujets similaires à "probleme macro formule matricielle"