Type d'arg by ref incompatible Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Q
Quentin87
Membre habitué
Membre habitué
Messages : 68
Inscrit le : 1 mars 2018
Version d'Excel : 2016FR

Message par Quentin87 » 25 mai 2018, 11:53

Hola !

J'ai un petit soucis que je n'arrive pas à corriger .. A fortiori que j'ai déjà utilisé la synthaxe sur un autre document que cela marche parfaitement.
Sur mon document j'ai créé un module de classe, un module qui ne contient que des créations de dictionnaires et des modules où je code mes macro en faisant appel à mes dico. Le but c'est de modifier des feuilles qui contiennent des infos, par celles contenues dans le dictionnaire tel que, si le CurISIN retrouve l'ISIN alors modification
wk_posEND.Cells(counterHisto, 3) = Dic_Histo(curISIN).H_Qty
J'ai le bug sur "curISIN"


Voilà quelques infos supplémentaires sur la façon dont je déclare mes variables car le soucis vient de là...

Au niveau du module de ma macro:
Public Sub Historisation()
Dim wk As Workbook
Dim wk_posEND, wk_MktDataEND, wk_priceEND As Workbook
Dim dateCLOSE As Date
Dim counterHisto As Long
Dim DicHisto As New Dictionary
'Appel du dictionnaire d'historisation'
Call Dic_Histo(DicHisto)
Au niveau du fameux dic_histo:
Public Sub Dic_Histo(ByRef DicHisto As Dictionary)
 
 Dim wk As Workbook
 Dim sh_PnL As Worksheet
 Dim ISIN As Variant
 Dim counter As Integer
 Dim CurInstr As clsInstrumentData
 
 Set wk = Workbooks("PnL.xlsm")
 Set sh_PnL = wk.Sheets("PnL_Daily")
 Set dic_pnl = New Dictionary
 
 counter = 12
 
While CStr(sh_PnL.Cells(counter, 4).Value) <> ""
    ISIN = CStr(sh_PnL.Cells(counter, 4).Value)

    If Not DicHisto.Exists(ISIN) Then
        Set CurInstr = New clsInstrumentData
        CurInstr.H_book = CStr(sh_PnL.Cells(counter, 2))
        CurInstr.H_Qty = CDbl(sh_PnL.Cells(counter, 13))
        CurInstr.H_Px = CDbl(sh_PnL.Cells(counter, 14))
        CurInstr.H_AI = CDbl(sh_PnL.Cells(counter, 15))
        CurInstr.H_days_acc = CDbl(acc = sh_PnL.Cells(counter, 16))
        Call DicHisto.Add(ISIN, CurInstr)
    End If
counter = counter + 1
Wend
 
 End Sub
Au niveau du module de classe:
'Dictionnaire d'historisation'
Public H_book As String
Public H_Qty As Double
Public H_Px As Double
Public H_AI As Double
Public H_days_acc As Double
Je vous remercie de votre aide. Je pense que c'est tout con, j'ai du mal déclarer une variable, où la déclarer au mauvaise endroit. Mais après 1h rien trouvé.

Bonne journée.
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 8'678
Appréciations reçues : 310
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 25 mai 2018, 11:58

Bonjour,

quel est le message que tu reçois ? je soupçonne qu'il manque une référence à scripting.dictionary
Q
Quentin87
Membre habitué
Membre habitué
Messages : 68
Inscrit le : 1 mars 2018
Version d'Excel : 2016FR

Message par Quentin87 » 25 mai 2018, 12:04

Je viens de trouver l'erreur ... J'avais déclarer "DicHisto" au lieu de "Dic_Histo"


Je vais quand meme laisser le sujet ouvert car désormais c'est une autre erreur qui apparait.
'Appel du dictionnaire d'historisation'
Call Dic_Histo(DicHisto)
erreur de type: Utilisation incorrect de la propriété

Si quelqu'un peut me dire à quoi cela correspond. Sur google, etc on trouve de tout pour de type d'erreur

EDIT: pour l'aide car je me rends compte que la synthaxe est pas bien choisie..
"Dic_Histo" est le nom de la macro qui contient de le dictionnaire "DicHisto" fonctionnait avec les clefs "ISIN"
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 25 mai 2018, 12:13

Bonjour,

Généralement lorsque ce type d'erreur survient, on place l'argument ByVal et cela règle la question...
En effet, on a cette erreur lorsqu'on passe une valeur d'argument à une procédure au moyen d'une variable qui n'est pas du type exact de l'argument... Aucun souci dans les cas courants.

Dans ton code cependant, un truc me chagrine : ta variable curISIN n'est très certainement pas du type qu'attend ta procédure Dic_Histo... Mais il s'agit d'une Sub et je ne vois pas ce qu'elle vient faire à droite d'un signe égale ! Il ne s'agit pas d'une Function, et elle ne renvoie aucun résultat...

N'y aurait-il pas confusion de ta part (avec DicHisto par exemple...) ?

Cordialement.
Q
Quentin87
Membre habitué
Membre habitué
Messages : 68
Inscrit le : 1 mars 2018
Version d'Excel : 2016FR

Message par Quentin87 » 25 mai 2018, 12:16

Quentin87 a écrit :
25 mai 2018, 12:04
Je viens de trouver l'erreur ... J'avais déclarer "DicHisto" au lieu de "Dic_Histo"


Je vais quand meme laisser le sujet ouvert car désormais c'est une autre erreur qui apparait.
'Appel du dictionnaire d'historisation'
Call Dic_Histo(DicHisto)
erreur de type: Utilisation incorrect de la propriété

Si quelqu'un peut me dire à quoi cela correspond. Sur google, etc on trouve de tout pour de type d'erreur

EDIT: pour l'aide car je me rends compte que la synthaxe est pas bien choisie..
"Dic_Histo" est le nom de la macro qui contient de le dictionnaire "DicHisto" fonctionnait avec les clefs "ISIN"
EDIT 2: Non j'ai dit de la merde, le nom du dictionnaire est bien dicHisto et pas dic_histo. Retour au Problème de base ...
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 25 mai 2018, 12:19

C'est ce qu'il me semblait, que l'erreur ByRef était trompeuse dans ce cas... ! :)
Bonne continuation.
Q
Quentin87
Membre habitué
Membre habitué
Messages : 68
Inscrit le : 1 mars 2018
Version d'Excel : 2016FR

Message par Quentin87 » 25 mai 2018, 13:36

MFerrand a écrit :
25 mai 2018, 12:13

Dans ton code cependant, un truc me chagrine : ta variable curISIN n'est très certainement pas du type qu'attend ta procédure Dic_Histo... Mais il s'agit d'une Sub et je ne vois pas ce qu'elle vient faire à droite d'un signe égale ! Il ne s'agit pas d'une Function, et elle ne renvoie aucun résultat...

Hello merci d'avoir regardé. En effet je me prends les pinceaux un peu dans mes synthaxes :mrgreen:
Malgré tout si tu parles de cette égalité:
 wk_posEND.Cells(counterHisto, 3) = dic_histo(curISIN).H_Qty
C'est bien à ce niveau que l'underscore était pas nécessaire. Merci de votre aide. Sujet résolu
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 25 mai 2018, 15:20

C'était bien ça ! Bon courage pour continuer. Tu t'es lancé dans un gros truc il semble... :)
Q
Quentin87
Membre habitué
Membre habitué
Messages : 68
Inscrit le : 1 mars 2018
Version d'Excel : 2016FR

Message par Quentin87 » 25 mai 2018, 16:01

C'est pour calculer le chiffre d'affaire de ma salle de trading. Avec differentes activités, donc differentes façons de le calculer... Sans que le pauvre stagiaire que je suis ne passe des heures le soir à calculer ^^

Et j'ajoute des petits fonctionnalités comme les volumes requestés, traités, la marge, ...
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message