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 :

Type mismatch error 13 Ubound ?


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
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Par défaut Type mismatch error 13 Ubound ?
    Bonjour à tous,

    Je suis nouveau sur le site et débutant en vba.
    J'ai un problème sur lequel je bute et je n'arrive vraiment pas a le regler ces derniers jours.
    Quand je lance la macro j'ai ce message d'erreur :
    Type mismatch error 13

    Voici le code sur laquelle l'erreur apparait :

    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
      If CLng(DateAdd("m", -3 * k, AsOf)) < CLng(UpdateROPNBI) Then
            UpdateROPNBI = DateSerial(Year(AsOf) - 1, 1, 1)
        End If
        
        If CLng(DateAdd("m", -3 * k, AsOf)) < CLng(UpdateROPPO) Then
            UpdateROPPO = DateSerial(Year(AsOf) - 2, 12, 1)
        End If
        
        myreq = "Select  Mnemo, Val FROM tbRWA_Params WHERE AsOf = " & CLng(UpdateROPNBI) & "  AND Type = 'ROP NBI'"
        rs.Open myreq, cn
        If Not rs.EOF Then
            ROP_NBI = rs.GetRows()
        End If
        rs.Close
        
        myreq = "Select Mnemo, Val FROM tbRWA_Params WHERE AsOf = " & CLng(UpdateROPPO) & "  AND  Type = 'ROP Pertes OP'"
        rs.Open myreq, cn
        If Not rs.EOF Then
            ROP_OP = rs.GetRows()
        End If
        rs.Close
        
        Dim ROP_Coef() As Variant
        ReDim ROP_Coef(2, UBound(ROP_NBI, 2))
        
        'On croise les deux tableaux de coef ici:
        For i = LBound(ROP_NBI, 2) To UBound(ROP_NBI, 2)
            ROP_Coef(0, i) = ROP_NBI(0, i)
            ROP_Coef(1, i) = ROP_NBI(1, i)
            ROP_Coef(2, i) = ROP_OP(1, i)
        Next i
    ...
    La ligne en gras : l'endroit ou le code affiche le message d'erreur.

    J'ai l'impression qu'il ne reconnait pas la valeur dans les données rop coef ou rop nbi
    Ou alors est ce un pbm de redimension de trableau ?

    Merci pour vos lumières !

    cordialement,

    Ip man

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Code non mis entre balises code = code difficile à lire.
    Je vais me contenter de ceci (en dépit du torticolis causé par la lecture) :
    La méthode GetRows retourne à ma connaissance un tableau à 2 dimensions de base 0 (ce qui veut dire que l'indice de la première colonne est 0 et que celui de la seconde est 1 et non 2)
    et donc --->>
    ne peut que générer une erreur puis 2 > 1

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Par défaut
    Désolé pour la lisibilité du code que j'ai envoyé. Et merci pour ta réponse.

    Mais en lancant le code avec que tu m'as conseillé il n'y a toujours pas de changements. Le code stoppe a chaque fois sur cette ligne.

    D'ailleurs j'ai remarqué : quand je pose le curseur sur rop nbi j'ai "ropnbi =empty". Or quand je regarde dans ma base de données j'ai bien des éléments sur rop nbi. Curieux...

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ce qui veut alors dire que ton recordset est vide au moment de cette ligne de code.
    Je ne vois toujours pas de code "lisible" entre balises code ... (et je ne veux pas gâcher le repas d'anniversaire de mariage (le 54ème) que je vais partager avec mon épouse).

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Par défaut
    Pour une meilleure lisibilité > l'erreur s'affiche en ligne 35 :


    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
    'On charge ici les deux tableaux de coefs
    'Dates des deux MàJ ds coef ROP
    Dim UpdateROPNBI As Date
    Dim UpdateROPPO As Date
     
    For k = 0 To 4
     
        UpdateROPNBI = DateSerial(Year(AsOf), 1, 1)
        UpdateROPPO = DateSerial(Year(AsOf) - 1, 12, 1)
     
        If CLng(DateAdd("m", -3 * k, AsOf)) < CLng(UpdateROPNBI) Then
            UpdateROPNBI = DateSerial(Year(AsOf) - 1, 1, 1)
        End If
     
        If CLng(DateAdd("m", -3 * k, AsOf)) < CLng(UpdateROPPO) Then
            UpdateROPPO = DateSerial(Year(AsOf) - 2, 12, 1)
        End If
     
        myreq = "Select  Mnemo, Val FROM tbRWA_Params WHERE AsOf = " & CLng(UpdateROPNBI) & "  AND Type = 'ROP NBI'"
        rs.Open myreq, cn
        If Not rs.EOF Then
            ROP_NBI = rs.GetRows()
        End If
        rs.Close
     
        myreq = "Select Mnemo, Val FROM tbRWA_Params WHERE AsOf = " & CLng(UpdateROPPO) & "  AND  Type = 'ROP Pertes OP'"
        rs.Open myreq, cn
        If Not rs.EOF Then
            ROP_OP = rs.GetRows()
        End If
        rs.Close
     
        Dim ROP_Coef() As Variant
     
        ReDim ROP_Coef(UBound(ROP_NBI, 2))
     
        'On croise les deux tableaux de coef ici:
       For i = LBound(ROP_NBI, 2) To UBound(ROP_NBI, 2)
           ROP_Coef(0, i) = ROP_NBI(0, i)
            ROP_Coef(1, i) = ROP_NBI(1, i)
        ROP_Coef(2, i) = ROP_OP(1, i)
        Next i
     
        For i = 0 To 3
            Worksheets("Retr RWA ROP by PC").Cells(17, 31 + i + k * 5).Value = Worksheets("Retr RWA ROP by PC").Cells(17, 6 + i + k * 5).Value
            Worksheets("Retr RWA ROP by PC").Cells(17, 31 + i + k * 5).ColumnWidth = 8.43
        Next i
    Ps: félicitations pour ce bel événement !

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour !

    Il suffit pourtant juste de lire l'aide VBA de ReDim !

    Voilà, voilà !

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    que te dit not EOF?

    tu retravail un tableau {ReDim ROP_Coef(2, UBound(ROP_NBI, 2))} alos qu'un eof=true n'a pas dimensionné ROP_NBI et ROP_OP!
    ReDim ROP_Coef(2, UBound(Null, 2))???????
    Code ça c'est n'importe quoi! : 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
    If Not rs.EOF Then
    ROP_NBI = rs.GetRows()
    End If
    rs.Close
     
     
     
     
    If Not rs.EOF Then
    ROP_OP = rs.GetRows()
    End If
    rs.Close
     
     
    Dim ROP_Coef() As Variant
    ReDim ROP_Coef(2, UBound(ROP_NBI, 2))
     
     
    'On croise les deux tableaux de coef ici:
    For i = LBound(ROP_NBI, 2) To UBound(ROP_NBI, 2)
    ROP_Coef(0, i) = ROP_NBI(0, i)
    ROP_Coef(1, i) = ROP_NBI(1, i)
    ROP_Coef(2, i) = ROP_OP(1, i)
    Next i

    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
    rs.Open myreq, cn
    If Not rs.EOF Then
    ROP_OP = rs.GetRows()
    Dim ROP_Coef() As Variant
    ReDim ROP_Coef(2, UBound(ROP_NBI, 2))
     
     
    'On croise les deux tableaux de coef ici:
    For i = LBound(ROP_NBI, 2) To UBound(ROP_NBI, 2)
    ROP_Coef(0, i) = ROP_NBI(0, i)
    ROP_Coef(1, i) = ROP_NBI(1, i)
    ROP_Coef(2, i) = ROP_OP(1, i)
    Next i
    End If
    rs.Close
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    If rs.EOF Then rs.Close: Exit Sub
     
     
    If rs.EOF Then rs.Close: Exit Sub
     
    Dim ROP_Coef() As Variant
    ReDim ROP_Coef(2, UBound(ROP_NBI, 2))
    Dernière modification par Invité ; 12/04/2017 à 13h04.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    que te dit not EOF?

    tu retravail un tableau {ReDim ROP_Coef(2, UBound(ROP_NBI, 2))} alos qu'un eof=true n'a pas dimensionné ROP_NBI et ROP_OP!
    ReDim ROP_Coef(2, UBound(Null, 2))???????
    Code ça c'est n'importe quoi! : 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
    If Not rs.EOF Then
    ROP_NBI = rs.GetRows()
    End If
    rs.Close
     
     
     
     
    If Not rs.EOF Then
    ROP_OP = rs.GetRows()
    End If
    rs.Close
     
     
    Dim ROP_Coef() As Variant
    ReDim ROP_Coef(2, UBound(ROP_NBI, 2))
     
     
    'On croise les deux tableaux de coef ici:
    For i = LBound(ROP_NBI, 2) To UBound(ROP_NBI, 2)
    ROP_Coef(0, i) = ROP_NBI(0, i)
    ROP_Coef(1, i) = ROP_NBI(1, i)
    ROP_Coef(2, i) = ROP_OP(1, i)
    Next i

    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
    rs.Open myreq, cn
    If Not rs.EOF Then
    ROP_OP = rs.GetRows()
    Dim ROP_Coef() As Variant
    ReDim ROP_Coef(2, UBound(ROP_NBI, 2))
     
     
    'On croise les deux tableaux de coef ici:
    For i = LBound(ROP_NBI, 2) To UBound(ROP_NBI, 2)
    ROP_Coef(0, i) = ROP_NBI(0, i)
    ROP_Coef(1, i) = ROP_NBI(1, i)
    ROP_Coef(2, i) = ROP_OP(1, i)
    Next i
    End If
    rs.Close
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    If rs.EOF Then rs.Close: Exit Sub
     
     
    If rs.EOF Then rs.Close: Exit Sub
     
    Dim ROP_Coef() As Variant
    ReDim ROP_Coef(2, UBound(ROP_NBI, 2))
    Merci pour ta réponse je vais voir ca

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Par défaut
    j'ai trouvé la solution : dans les déclarations de variables de ROP NBI il fallait mettre ()

    soit Dim ROP_NBI () As variant

    le fait d'indiquer aucune valeur rend le tableau dynamique...Mais ... Surprise ! un autre message d'erreur !

    "run time error 9
    Subscript out of range " sur la même ligne à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim ROP_Coef(2, UBound(ROP_NBI, 2))
    IL me semble que c'est les dimensions qu'il faut revoir...

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    La vérification : j'ai regardé d'autres éléments dans le code dont la connexion était bonne et où les données étaient bien retranscrites dans mon excel.
    Et elle vient quand, cette vérification toute bête du RecordCount ?
    "run time error 9
    Subscript out of range " sur la même ligne à savoir
    Je t'en ai pourtant également parlé (en vain) plus haut ! getrows retourne un tableau de base 0 et non de base 1. Si 2 colonnes dans ton recordset --->> 2 colonnes dans ton tableau : colonne 0 et colonne 1 (et non colonne 1 et colonne 2).

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Par défaut
    oui merci, j'avais déjà modifié cela mais pas de résultats mais juste une précision quand tu parles de 0 et 1 ca veut dire ca ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim ROP_Coef(0, UBound(ROP_NBI, 1))
    je sais je suis nul ... ahah

    en tout cas un grand merci pour ta réponse

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

Discussions similaires

  1. [OL-2010] Compile Error: Type mismatch (Error 13) - .Recipients.Add avec olAppointmentItem
    Par daddygraffiti dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 26/04/2014, 23h33
  2. TYPE MISMATCH ERROR
    Par GARCIAPAT dans le forum Lotus Notes
    Réponses: 1
    Dernier message: 28/05/2009, 12h28
  3. [E07] - Run time error 13 : Type mismatch
    Par jmh51 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 05/11/2008, 13h22
  4. [VBA-E] - run-time error "Type mismatch"
    Par Chewi dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/02/2007, 18h44
  5. run time error 13, type mismatch
    Par robert_trudel dans le forum Access
    Réponses: 6
    Dernier message: 27/10/2006, 02h30

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