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 :

Erreur d'execution 13 : incompatibilité de type


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Points : 35
    Points
    35
    Par défaut Erreur d'execution 13 : incompatibilité de type
    Bonjour tout le monde,

    Lorsque je compile mon code, il apparait une erreur d'execution 13 : incompatibilité de type. Je pense savoir d’où vient l'erreur mais je ne trouve pas de solution.

    Je parcoure un tableau (table(0,j) ou j varie de 0 à 55) et à l'aide d'une boucle if, j'effectue 2 procédures différentes en fonction d'une condition. Je précise que table fonctionne très bien, l'erreur ne vient pas de sa création ou de son remplissage !

    Voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For j = 0 to 55
    If table(0, j) = "INSTITUCION" Or "HAP ASOCIADA" Or "PC6M BASAL FECHA" then
    'code1
    Else
    'code2
    End If
    Next j
    Mon programme bug pour j = 20 car alors table(0, j) = "DOSIS (mg c/12 hrs)" ! Je pense tout simplement que l'erreur est du à la présence de caractères spéciaux mais je ne comprends pas pourquoi car les éléments de table n'ont pas été déclaré avec un type spécifique, autrement dit ce sont tous des variants et ils devraient alors accepter les caractères spéciaux non ?

    Par ailleurs, voila la ligne surligné en jaune par excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If table(0, j) = "INSTITUCION" Or "HAP ASOCIADA" Or "PC6M BASAL FECHA" then
    Je vous remercie d'avance pour vos remarques ou solutions car je ne vois vraiment pas ce que je peux faire.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If table(0, j) = "INSTITUCION" Or table(0, j) = "HAP ASOCIADA" Or table(0, j) = "PC6M BASAL FECHA" then
    Pour supprimer la redondance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select Case table(0, j)
       Case "INSTITUCION", "HAP ASOCIADA", "PC6M BASAL FECHA"
       ' Code ici
    End Select
    Par contre, j'ai écrit le code sur le forum, donc si ça marche pas

  3. #3
    Invité
    Invité(e)
    Par défaut Bonjour,test ça
    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
    Sub test()
    Dim table(0, 55)
    table(0, 1) = "INSTITUCION"
    table(0, 2) = "HAP ASOCIADA"
    table(0, 3) = "PC6M BASAL FECHA"
    For j = 0 To 55
     
    If IsIn(Trim("" & table(0, j)), Array("INSTITUCION", "HAP ASOCIADA", "PC6M BASAL FECHA")) = True Then
    'code1
    Else
    'code2
    End If
    Next j
    End Sub
    Function IsIn(v As String, t) As Boolean
    Dim i As Long
    For i = 0 To UBound(t)
        If t(i) = v Then IsIn = True: Exit Function
    Next
    End Function

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    Nouveau2, ta solution ne marche pas. Merci quand même pour la suggestion ^^


    Rdurupt, avant d'essayer ton code, j'aimerais bien le comprendre (mon programme commence à être conséquent, 1200 lignes de code, donc je ne rajoute pas de code que je ne comprends pas). Mais je t'avoue que je ne saisis pas tout.

    Je ne comprends pas cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsIn(Trim("" & table(0, j)), Array("INSTITUCION", "HAP ASOCIADA", "PC6M BASAL FECHA")) = True
    Peux-tu me confirmer les points suivants stp :
    doit normalement concaténer "" avec table(0,j) en supprimant les espaces situés aux bords extrêmes (gauche et droite quoi).
    Si oui, je ne vois pas l'intérêt de concaténer table(0,j) avec "" sachant que "" est déjà présent dans les 1er membres du tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsIn(Trim("" & table(0, j)), Array("INSTITUCION", "HAP ASOCIADA", "PC6M BASAL FECHA")) = True
    renvoit true si le terme de gauche à savoir est présent dans l'array situé à droite, sinon renvoit false

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function IsIn(v As String, t) As Boolean
    Dim i As Long
    For i = 0 To UBound(t)
        If t(i) = v Then IsIn = True: Exit Function
    Next
    Alors la, absolument aucune idée de ce qui se passe, encore moins du but cherché !

    Merci pour ta réponse

  5. #5
    Invité
    Invité(e)
    Par défaut Bonjour,
    dans ton exemple, bien que ça ne peut pas marcher, ton équation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If table(0, j) = "INSTITUCION" Or "HAP ASOCIADA" Or "PC6M BASAL FECHA" then
    devrait retourner true
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If( table(0, j) = "INSTITUCION" Or "HAP ASOCIADA" Or "PC6M BASAL FECHA")=true then
    mois je fait un tableau avec "INSTITUCION", "HAP ASOCIADA", "PC6M BASAL FECHA" et si une valeur du tableau est égale à table(0, j) je retourne true.
    test mon exemple en pas à pas touche [F8]

    ceci dit qu'est-ce-que j'aimerai travailler sur un projet ne contenant que 1200 lignes.
    je suis sur un projet qui contient 500 modules et formulaires

  6. #6
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Juste de passage pour ceci :
    La fonction IsIn comportant une boucle sur une variable tableau, peut s'avérer "longuette"...
    Je vous propose donc l'utilisation de Application.Match pour vos recherches dans les tableaux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function EstDans(mot As String, Tabl) As Boolean
    'Tableau à une dimension :
            On Error Resume Next
            EstDans = Application.Match(mot, Tabl, 0)
            On Error GoTo 0
    'Tableau à deux dimensions :
    '        On Error Resume Next
    '        EstDans = Application.Match(mot, Application.Index(Tabl, , 1), 0)
    '        On Error GoTo 0
    End Function
    Cordialement,
    Franck

  7. #7
    Invité
    Invité(e)
    Par défaut Bonjour,
    j'ai pas pensé

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    Merci à vous deux pour vos réponses.
    rdurupt, suite à la remarque de Pijaku, je n'ai pas considéré ton code. Je reviendrais dessus si la solution de Pijaku ne fonctionne pas. Merci tout de même

    Pijaku, ton code ne fonctionne pas bien chez moi.

    Je l'ai testé simplement du style (après avoir rempli tabl)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (EstDans("mot au hasard",tabl)= "Vrai") then...
    et c'est vrai que comme cela, sa fonctionne très bien.

    Le problème est que dans mon cas, je ne rentre pas directement une chaine de caractère. Pour l'obtenir, je passe par la valeur d'un table autrement dit je remplace par dans le cas de l'occurrence j (boucle for) en utilisant un table 'table' déclaré en début de module.

    Et la sa bloque : -soit il me répond un message d'erreur "erreur de compilation : type d'argument ByRef incompatible et souligne en bleu dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EstDans(table(0,j), tabl)
    -soit il renvoit toujours Faux, même quand il devrait renvoyer Vrai (c'est peut-être moi qui me trompe en utilisant des "" en trop ou en moins)

    Ci-joint, un exemple qui montre le pb de l'erreur.

    PS : pour clarifier ce que je cherche à faire et qui ne fonctionne actuellement pas, je veux simplement faire cela (supposons que tabl soit déjà initialisé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim j As Integer
    For j = 0 to 100
    If (EstDans(table(0,j)="Vrai") then
    'code1
    Else
    'code2
    Next j

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    Je n'arrive pas à joindre le fichier excel. Voici ma macro montrant l'erreur :

    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
    Option Explicit
     
    'Rq : j'ai légèrement modifié la syntaxe de ta fonction pour qu'elle soit lisible par un anglophone
     
    Sub test()
     
    Dim toubl()
    ReDim toubl(1)
     
    toubl(0) = "BH"
    toubl(1) = "BHH"
     
    MsgBox toubl(0)
    MsgBox toubl(1)
     
    Dim tabl()
    ReDim tabl(0)
     
    tabl(0) = "BH"
     
    MsgBox tabl(0)
     
    MsgBox IsInTable(toubl(0), tabl)
    MsgBox IsInTable(toubl(1), tabl)
     
    End Sub
     
    'function that returns true if 'text' is present in the tab 'tabl', returns false otherwise
    'attention : tabl is necessary a one dimension table here
    Function IsInTable(text As String, tabl) As Boolean
     
            On Error Resume Next
            IsInTable = Application.Match(text, tabl, 0)
            On Error GoTo 0
     
    End Function

  10. #10
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    L'erreur 13 est due à un mauvais type de variable.

    Si tes données le permettent tu peux déclarer ton Table As String.
    Sinon, il te faudra passer par un String intermédiaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Table(), strInterm As String
    strInterm = CStr(Table(0, j))
    If IsIn(montab, strInterm) = True 'True n'est pas égal à "vrai"...
    EDIT : ton code qui ne fonctionnait pas, tourne bien comme ceci :
    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
    Option Explicit
     
    'Rq : j'ai légèrement modifié la syntaxe de ta fonction pour qu'elle soit lisible par un anglophone
     
    Sub test()
     
    Dim toubl() As String 'avec juste cette déclaration de type!!!
    ReDim toubl(1)
     
    toubl(0) = "BH"
    toubl(1) = "BHH"
     
    MsgBox toubl(0)
    MsgBox toubl(1)
     
    Dim tabl()
    ReDim tabl(0)
     
    tabl(0) = "BH"
     
    MsgBox tabl(0)
     
    MsgBox IsInTable(toubl(0), tabl)
    MsgBox IsInTable(toubl(1), tabl)
     
    End Sub
     
    'function that returns true if 'text' is present in the tab 'tabl', returns false otherwise
    'attention : tabl is necessary a one dimension table here
    Function IsInTable(text As String, tabl) As Boolean
     
            On Error Resume Next
            IsInTable = Application.Match(text, tabl, 0)
            On Error GoTo 0
     
    End Function
    Cordialement,
    Franck

  11. #11
    Invité
    Invité(e)
    Par défaut Bonjour,
    Citation Envoyé par pijaku Voir le message
    Bonjour,
    Sinon, il te faudra passer par un String intermédiaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Table(), strInterm As String
    strInterm = CStr(Table(0, j))
    Pourquoi? ça c'est un string intermédiaire non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsInTable( CStr(Table(0, j)),tabl)

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    Effectivement c'est aussi ce que je m'étais dis.

    J'avais essayé de passer par un variant, non un string, et je récupérais tout le temps Faux à ce moment-là.

    Je ne suis pas totalement au point concernant le type String. Sachant que les données que je vais utiliser (pour le table, comme pour le 'text') sont de ce genre :
    -HAP ASOCIADA
    -PC6M BASAL FECHA
    -P. INICIALES

    Autrement dit, majoritairement des lettres en majuscules mais aussi ponctuellement des chiffres et des caractères spéciaux (. ou , ou /) et des espaces. Sa ne pose pas pb vis à vis du type String (pour le cast CStr par ex) ?

    Mais après avoir lu ta répon sur un autre poste, je vois effectivement que sa marche pour le type. Je vais donc essayer la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsInTable( CStr(Table(0, j)),tabl)
    et si sa ne marche pas, je passerai par un autre string intermédiaire. Merci

  13. #13
    Invité
    Invité(e)

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    Sa marche niquel avec CStr !!!

    Merci bc à tous les deux

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

Discussions similaires

  1. [Toutes versions] erreur d'execution '13' : incompatibilité de type
    Par cecile_64 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/06/2012, 08h23
  2. [XL-2010] erreur d'execution 13 incompatibilité de type
    Par rattus34 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/05/2012, 15h08
  3. erreur d'exécution 13 incompatibilité de type
    Par glamgeek dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/03/2009, 12h03
  4. "erreur d'exécution 13 : incompatibilité de type"
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 19/07/2007, 15h47
  5. erreur d'exécution 13, incompatibilité de type
    Par PHPdudimanche dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/06/2007, 15h20

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