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

VBA Access Discussion :

Type d'argument Byref incompatible


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut Type d'argument Byref incompatible
    Bonjour,

    Au sein d'un Sub, j'appelle une fonction. Tout allait bien jusqu'à ce que je dusse ajouter un nouvel input pour cette fonction, un second DAO.Recorset. Là access me renvoie le message d'erreur "Type d'argument Byref incompatible". Je ne comprends pas pourquoi! Quelqu'un a une idée? Le bout de code suit.

    Merci!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Set rstT_Pays = db.OpenRecordset("SELECT Pays FROM T_Pays ORDER BY Pays")
     
        Do While Not rstT_Pays.EOF
        Set rstTemp = db.OpenRecordset("SELECT * FROM T_Prod_Prog Where T_Prod_Prog.Pays = '" & rstT_Pays.Fields(0).Value & "' ")
        Set rstTemp2 = db.OpenRecordset("SELECT DISTINCT Fourniture FROM T_EBC1 Where T_EBC1.Pays = '" & rstT_Pays.Fields(0).Value & "' ")
            ligne_fin = Bloc(xlSheet, rstTemp, rstTemp2, (ligne_fin), (num_date))
        rstT_Pays.MoveNext
        Loop
    Et la fonction Bloc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private Function Bloc(xlSheet As Excel.Worksheet, rstTemp As DAO.Recordset, rstTemp2 As DAO.Recordset, ligne_debut As Long, num_date As Long) As Long

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Bonjour,

    Ligne_fin et num_date sont bien définis comme Long ?
    [Access] Les bases du débogage => ici

  3. #3
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    Oui! Je met le code entier pour faciliter la compréhension..

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    Private Sub Commande1_Click()
    On Error GoTo Err_Commande1_Click
     
    Dim XlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim i As Long, j As Long
        Dim t0 As Long, t1 As Long
        Dim Date_choisie As String
        Dim Chemin As String
        Dim ligne_fin, num_date, res As Long
     
        Dim db As DAO.Database
        Dim rstT_Pays, rstTemp, rstTemp2 As DAO.Recordset
     
       t0 = Timer
     
      'Initialisations
       Set XlApp = CreateObject("Excel.Application")
       Set xlBook = XlApp.Workbooks.Add
     
       Set db = CurrentDb
     
        'Ajouter une feuille de calcul
        Set xlSheet = xlBook.Worksheets.Add
        xlSheet.Activate
     
     
            'Création des blocs de BB
        Date_choisie = Me.Modifiable4
        ligne_fin = 5
        res = 0
     
       Mise_en_forme_haut xlSheet, Date_choisie
     
       'On cherche la date
     
       If Date_choisie = "Date Notification" Then num_date = 11
       If Date_choisie = "Date FAT" Then num_date = 8
        If Date_choisie = "Date SAT" Then num_date = 9
        If Date_choisie = "Date Prévisionnelle" Then num_date = 10
     
        'Boucle de création des blocs
        Set rstT_Pays = db.OpenRecordset("SELECT Pays FROM T_Pays ORDER BY Pays")
     
        Do While Not rstT_Pays.EOF
        Set rstTemp = db.OpenRecordset("SELECT * FROM T_Prod_Prog Where T_Prod_Prog.Pays = '" & rstT_Pays.Fields(0).Value & "' ")
        Set rstTemp2 = db.OpenRecordset("SELECT DISTINCT Fourniture FROM T_Prod_Prog Where T_Prod_Prog.Pays = '" & rstT_Pays.Fields(0).Value & "' ")
            ligne_fin = Bloc(xlSheet, rstTemp, rstTemp2, (ligne_fin), (num_date))
        rstT_Pays.MoveNext
        Loop
     
       ' code de fermeture et libération des objets
     
       Chemin = Application.CurrentProject.Path + "\ Radar " + Date_choisie + ".xls"
       xlBook.SaveAs Chemin
       MsgBox "Un fichier excel a été créé à l'adresse suivante : " & Chemin
           xlBook.WebPagePreview
     
       XlApp.Quit
       Set xlSheet = Nothing
        Set xlBook = Nothing
        Set XlApp = Nothing
     
        t1 = Timer
        Debug.Print i & " enregistrements", Format(t1 - t0, "0") & " secondes"
     
    Exit_Commande1_Click:
        Exit Sub
     
    Err_Commande1_Click:
        MsgBox Err.Description
        Resume Exit_Commande1_Click
     
    End Sub

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    ligne_fin est un variant...
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    num_date aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ligne_fin as long
    dim num_date as long
    dim res As Long
    [Access] Les bases du débogage => ici

  6. #6
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    Pour quelle raison? Ce que me renvoie la fonction "bloc" est un long. Ca m'interesserait de savoir!

    Bon sinon j'ai mis tous ces entiers en variant, ainsi que des parenthèses autour de mes input DAO.Recordset quand j'appelle la fonction Bloc, et la réponse que m'envoie access maintenant c'est "trop peu de paramètres, 1 attendu"... Peut etre que ma requête rstTemp2 est fausse

  7. #7
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Si l'erreur est sur un openrecordset, c'est que la requête est fausse.
    [Access] Les bases du débogage => ici

  8. #8
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    D'accord.

    A noter que quand je fais l'appel suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne_fin = Bloc( xlSheet, rstTemp, rstTemp, ligne_fin, num_date)
    avec la requête rstTemp vérifiée comme fonctionnant, la réponse retournée est "incompatibilité de type"

  9. #9
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Tu as bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ligne_fin as long, num_date as long, res As Long
    [Access] Les bases du débogage => ici

  10. #10
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    J'ai modifié tout cela en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ligne_fin, num_date as variant

  11. #11
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim rstT_Pays, rstTemp, rstTemp2 As DAO.Recordset
    rstT_Pays et rstTemp sont des variants et non des recordsets.
    fais comme ceci dabord:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim rstT_Pays As DAO.Recordset, rstTemp As DAO.Recordset, rstTemp2 As DAO.Recordset
    merci

  12. #12
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne_fin = Bloc(xlSheet, rstTemp, rstTemp2, (ligne_fin), (num_date))
    On doit s'attendre à quoi dans rstTemp et rstTemp2? des valeurs? des objets?
    pareil pour: (ligne_fin) et (num_date); ou prennent elles leurs valeurs dans ton code? et que signifient les parenthèses qui les entourent?
    merci

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    Bonjour,

    Cette discussion devient incompréhensible.

    Ce serait mieux de traiter les problèmes un par un.

    D'abord le typage des variables.
    Le type des variables que tu transmets à ta fonction bloc doivent correspondre aux types de ses paramètres.

    Une fois que ça sera réglé tu pourras te pencher sur ton problème de recordset.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  14. #14
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    Merci de toutes vos réponses.

    J'ai changé les types d'arguments, et finalement, comme souvent en code, j'ai changé d'approche pour n'utiliser qu'une fonction qui n'utilise en argument qu'un seul DAO.recordset, ce qui me permet d'éluder le problème sans, malheureusement, le résoudre, plus par manque de temps que d'intérêt. Et ça semble d'ailleurs marcher.

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

Discussions similaires

  1. [XL-2007] type d'arguments ByRef incompatible
    Par issoram dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 14/04/2019, 19h31
  2. [XL-2010] Erreur de compilation; Type d'argument ByRef incompatible
    Par Toug19 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/05/2015, 16h01
  3. Type d'argument ByRef incompatible
    Par caroto dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 22/09/2013, 13h45
  4. [AC-2007] Type d'argument ByRef incompatible dans un module
    Par KIK83 dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/12/2009, 15h01
  5. [VB]type d'arguments byref incompatibles
    Par kantelise dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 30/04/2006, 08h56

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