Zish
XLDnaute Nouveau
Bonjour,
Je me prends la tête sur un bout de mon code que j'essaye d'optimiser, qui utilise la formule SOMMEPROD pour faire une sorte de recherche complexe (je parcours un tableau composé d'une première colonne avec un code produit et d'une seconde colonne avec le nom d'un client, je veux récupérer un nombre de jour de DLC qui est renseigné dans un autre tableau).
Elle marche bien lorsqu'il s'agit de la formule transcrite par l'enregistreur de macro :
Mais je travaille sur une version amélioré qui passe par des variables, notamment parce que cette même formule est répétée sur 9 colonnes.
Sans tenir compte du test If et du rajout +1, j'essaye au moins d'obtenir que le Sommeprod fonctionne, j'en suis arrivé à ca :
La formule me ressort systématiquement des #VALEUR! donc je me demande d'où vient mon problème, est ce que mes variables qui contiennent les chemins des tableaux sont bien écrites ? Est ce que cela vient de la délcaration des variables code et client ? Est ce que le fait de faire une recherche à la fois de valeurs numérique et alphanumérique pose problème ?
J'ai epluché pleins de sites français et anglais traitant des formules SUMPRODUCT et Evaluate, mais pas moyen d'arriver à quelque chose qui fonctionne !
Ah et lorsque je n'utilise pas le Evaluate mais directement le Sumproduct, la macro plante en me mettant le message Incompatibilité de type...d'où mon intuition que le problème vient du type des données surement...
Si vous avez besoin de plus d'explications n'hésitez pas à me le dire, c'est la première fois que je demande de l'aide pour du VBA donc pas habitué à m'expliquer !
Merci d'avance !
Je me prends la tête sur un bout de mon code que j'essaye d'optimiser, qui utilise la formule SOMMEPROD pour faire une sorte de recherche complexe (je parcours un tableau composé d'une première colonne avec un code produit et d'une seconde colonne avec le nom d'un client, je veux récupérer un nombre de jour de DLC qui est renseigné dans un autre tableau).
Elle marche bien lorsqu'il s'agit de la formule transcrite par l'enregistreur de macro :
Code:
ActiveCell.Offset(0, 1).FormulaR1C1 = _
"=IF(SUMPRODUCT(('[Extraction cadenciers.xls]CONTRATS DATES ARTICLES PAR REG'!R2C1:R8000C1=RC1)*('[Extraction cadenciers.xls]CONTRATS DATES ARTICLES PAR REG'!R2C4:R8000C4=R1C)*('[Extraction cadenciers.xls]CONTRATS DATES ARTICLES PAR REG'!R2C6:R8000C6))=0,"""",(SUMPRODUCT(('[Extraction cadenciers.xls]CONTRATS DATES ARTICLES PAR REG'!R2C1:R8000C1=RC1)*('[Extraction cadenciers.xls]CONTRATS DATES ARTICLES PAR REG'!R2C4:R8000C4=R1C)*('[Extraction cadenciers.xls]CONTRATS DATES ARTICLES PAR REG'!R2C6:R8000C6))+1))"
Mais je travaille sur une version amélioré qui passe par des variables, notamment parce que cette même formule est répétée sur 9 colonnes.
Sans tenir compte du test If et du rajout +1, j'essaye au moins d'obtenir que le Sommeprod fonctionne, j'en suis arrivé à ca :
Code:
Dim tablo1 As String
Dim tablo2 As String
Dim tablo3 As String
'Dim code As String
'Dim client As String
tablo1 = "[Extraction cadenciers.xls]CONTRATS DATES ARTICLES PAR REG!$A$1:$A$10000"
tablo2 = "[Extraction cadenciers.xls]CONTRATS DATES ARTICLES PAR REG!$D$1:$D$10000"
tablo3 = "[Extraction cadenciers.xls]CONTRATS DATES ARTICLES PAR REG!$F$1:$F$10000"
Range("C2").Select
'On Error Resume Next
For i = 3 To fin
code = Cells(i, 1).Value
For j = 4 To 12
client = Cells(1, j).Value
Cells(i, j).Formula = Application.Evaluate("=SumProduct((" & tablo1 & "=" & code & ") * (" & tablo2 & "=" & client & ") * (" & tablo3 & ")))")
Next j
Next i
'On Error GoTo 0
J'ai epluché pleins de sites français et anglais traitant des formules SUMPRODUCT et Evaluate, mais pas moyen d'arriver à quelque chose qui fonctionne !
Ah et lorsque je n'utilise pas le Evaluate mais directement le Sumproduct, la macro plante en me mettant le message Incompatibilité de type...d'où mon intuition que le problème vient du type des données surement...
Si vous avez besoin de plus d'explications n'hésitez pas à me le dire, c'est la première fois que je demande de l'aide pour du VBA donc pas habitué à m'expliquer !
Merci d'avance !