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 :

incompatibilité de type erreur 13 [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut incompatibilité de type erreur 13
    Bonjour,

    j'ai un soucis d'incompatibilité de type et je ne comprends pas pourquoi:

    je fais actuellement un transfert de données d'un tableau à un autre via ce code:

    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
    Sub Transfert()
    Dim a() As Variant, b() As Variant
    Dim i As Long, j As Long, k As Long
    Dim DL As Double
    Dim WkR As Workbook
    Application.ScreenUpdating = False
    Set WkR = Workbooks.Open(Filename:="" & ThisWorkbook.Worksheets("Paramètres").Cells(6, 3) & "", WriteResPassword:="123456")
    If Not (WkR.ReadOnly) Then
        With ThisWorkbook.Worksheets("Test")
            WkR.Worksheets("Test").AutoFilterMode = False
            .AutoFilterMode = False
            a = .Range("A1").CurrentRegion.Value
            b = Application.Transpose(WkR.Worksheets("Test").Range("A1").CurrentRegion.Value)
            For i = 2 To UBound(a, 1)
                If Not IsError(Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0)) Then
                    k = Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0)
                    For j = 1 To 62
                        If b(j, k) = "" Or (b(j, k) <> "" And b(j, k) <> a(i, j)) Then
                            If b(j, k) <> "" And a(i, j) = "" Then
                                b(j, k) = b(j, k)
                            Else
                                If (j = 20 Or j = 27 Or j = 27 Or j = 34 Or j = 38 Or j = 61) And a(i, j) <> "" Then
                                    b(j, k) = b(j, k) & " " & a(i, j) 'si comment on garde tout
                                Else
                                    b(j, k) = a(i, j)
                                End If
                            End If
                        End If
                    Next j
                Else
                    ReDim Preserve b(UBound(b, 1), UBound(b, 2) + 1)
                    For j = 1 To 62
                        b(j, UBound(b, 2)) = a(i, j)
                    Next j
                End If
            Next i
        End With
        With WkR.Worksheets("Test")
            DL = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
            .Range("A1:BJ" & DL).ClearContents
            .Range("A1").Resize(UBound(b, 2), UBound(b, 1)).Value = Application.Transpose(b())
            .Range("A3:BJ" & DL).Sort Key1:=.Range("B3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
            .Range("A2:BJ2").AutoFilter
        End With
        WkR.Save
        WkR.Close
        Erase a
        Erase b
    Else
        MsgBox "Le fichier récapitulatif est bloqué. Veuillez réessayer dans quelques minutes! Merci"
    End If
    Set WkR = Nothing
    Application.ScreenUpdating = True
    End Sub

    tout fonctionne parfaitement sauf que j'ai une erreur 13 à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsError(Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0)) Then
    quand i = 10 soit pour une ligne précise.

    je ne comprend pas pourquoi car en regardant dans mes variable, le n° cherché dans b() lorsque i = 10 est bien présent. et même si il n'était pas présent, le if not iserror gère le soucis. Qu'est ce qui peut produire une incompatibilité de type dans ce genre de ligne? car l'erreur est du seulement à ce nuémro précis car si je change cette ligne en ligne 5 par exemple l'erreur à lieu pour i=5

    Merci d'avance de votre aide
    Bonne journée

  2. #2
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    petite info supplémentaire:
    l'erreur disparaissait si je changeai le numéro de la ligne 9 dans a()
    aller savoir pourquoi....

    autre précision: plus d'erreur en faisant comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsError(Application.Match(Trim(Cstr(a(i, 2))), Application.Index(b(), 2, 0), 0)) Then
    mais pourquoi y avait il donc une erreur avant sur la ligne 10 sachant que mes types étaient comme les autres c'est a dire considérer comme du variant/double dans la fenêtre des varaibles...

    Si quelqu'un peut m'éclairer..
    Merci

  3. #3
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Vu que tu utilises Trim je dirai qu'il y avait un espace qui se baladait

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    et oui
    si tu a "5.52" dans l'un et " 5.52" dans l'autre les deux chaines sont de types et de valeur différente donc ca peut pas matcher puisque l'un est string et l'autre numérique

    un espace dans une chaine même numérique rend la chaine string

    pour vérifier ce point tu peut utiliser val(...)a la place de trim(cstr(...)) ca matchera puisque c'est simplement un espace attention au séparateur décimal aussi
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Bonjour et merci

    j'ai ajouté trim pour être sur qu'il n'y ai pas d'espace mais ca fonctionnait aussi avec Cstr tout seul. donc c'est un autre soucis et je ne vois toujours pas lequel..

    j'ai l'incompatibilité de type qui revient en mettant val...

  6. #6
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    attention au séparateur décimal aussi
    Je vois que ça dans ce cas la

  7. #7
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Les séparateurs sont aussi désactivés

  8. #8
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Alors peut-être que les valeurs dans ton tableau a() étaient enregistré en string...
    J'avoue que je pige pas trop non plus

  9. #9
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Même pas les valeurs de mes tableaux ressortent toutes bien en variant/double

    ca bug pour la valeur de i=10 mais si je supprime la valeur de i=9 il n'y a plus d'incompatibilité... je ne comprends plus rien mdrrr

  10. #10
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Moi non plus

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    fait un msgbox(9,1) et si tu a le dernier c'est que tu est en mode option base 1
    se serait don to ubound(a,1)-1
    ou met en option base 0
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ses deux tableaux sont forcément en Base 1, puisqu'alimentés par une plage de données Excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a = .Range("A1").CurrentRegion.Value
    b = Application.Transpose(WkR.Worksheets("Test").Range("A1").CurrentRegion.Value)

  13. #13
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Si je me souviens bien, c'est depuis des temps immémoriaux qu'en VB-VBA, un tableau qui n'a pas de dimension formelle est limité à 10 éléments.

  14. #14
    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
    Il y aura un gros problème si les cellules B1,A2 et B2 de la feuille Test sont vides

  15. #15
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Bonjour à tous et merci pour votre aide;

    Je suis bien en base 1
    En fait je viens de trouver ce qui faisait planter la procédure...

    cela plantait pour i=10 or quand je supprimais la ligne i=9, cela fonctionnait. J'ai donc cherché le problème pour la ligne i=9 et il y a une données dans mon tableau qui est de type string et qui était une très longue chaine. Lorsque je l'ai raccourci, cela fonctionnait.

    Le truc maintenant que je comprends pas du coup c'est pourquoi l'erreur venait sur cette ligne lors du débogage? sachant que la longue chaine n'était pas contenu dans ces deux dimensions lors de ce test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsError(Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0)) Then
    et donc pourquoi l'erreur ne se produisait pas lors de la création du tableau?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b = Application.Transpose(WkR.Worksheets("Test").Range("A1").CurrentRegion.Value
    merci pour vos lumières

  16. #16
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en utilisant un Variant, que tu affectes à cette expression, quel est son typename ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim C as Variant
    C = Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0)
    Debug.Print TypeName(C)

  17. #17
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Bonjour,

    le typename donne jusqu'à ce que l'erreur se produise du Double

  18. #18
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    si cela peut vous aider, voila les fichiers:

    attention a bien changer les liens dans la feuille paramètres
    je ne sais pas si vous préférer les avoir dans un autre format pour raison de sécurité?
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [AC-2010] Incompatibilité de type (Erreur 13)
    Par toumack dans le forum VBA Access
    Réponses: 11
    Dernier message: 05/01/2013, 14h17
  2. [XL-MAC 2011] Incompatibilité de type, erreur N° 13
    Par Gogia dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/12/2012, 17h50
  3. [XL-2003] incompatibilité de type erreur 13
    Par will-1981 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/04/2009, 23h50
  4. [E-03] - Incompatibilité de type - Erreur 13
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/02/2009, 22h47
  5. incompatibilité de type erreur 13
    Par nabelou1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/01/2009, 17h37

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