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'éxécution 13 Incompatibilité de type


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Points : 49
    Points
    49
    Par défaut erreur d'éxécution 13 Incompatibilité de type
    Bonjour,

    Je viens vous poser une question même si j'ai trouvé une solution
    J'ai un USERFORM
    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
    ' Oblige la déclaration des variables au préalable
    'Option Explicit
     
    '****
    ' Déclaratio objet
    '****
    ' Déclare la variable objet Worksheet
    Dim WsBookTrans As Worksheet
    ' Tableau des bookmakers
    Dim Table_Book() As Variant
     
    ' Titre UserForm
    Const Titre_UFbook As String = ".::: Gestion des bookmakers"
    ' Coin gauche début Tableau Bookmaker
    Dim Deb_Book As Range
    '
     
    '****
    ' A l'activation de l'USERFORM
    '****
    Private Sub UserForm_Initialize()
        Set Deb_Book = Range("B18")
        Table_Book = Init_Liste(Deb_Book)
    End Sub
    et un module avec la fonction Init_Liste pour remplir le tableau Table_Book mais quand celui-ci est vide cela me pose une erreur d'éxécution 13.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function Init_Liste(ByVal Deb_Liste As Range) As Variant
        Dim Tabl()
        If (Deb_Liste = Null Or Deb_Liste = "") Then
                MsgBox "Liste vide"
                Exit Function
        End If
        With Deb_Liste
            Tabl = .Cells(1, 1).Resize(.CurrentRegion.End(xlDown).Row - .Row + 1, .CurrentRegion.End(xlToRight).Column - .Column + 1).Value
        End With
        Init_Liste = Tabl
    End Function
    Par conséquence j'ai modifié le code de l'USERFORM en ajoutant une fonction dans le module.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize()
        Set Deb_Book = Range("B18")
        Init_Liste Deb_Book, Table_Book
        If Test_Tabvide(Table_Book) = False Then
        For i = LBound(Table_Book, 1) To UBound(Table_Book, 1)
            For j = LBound(Table_Book, 2) To UBound(Table_Book, 2)
                MsgBox Table_Book(i, j)
            Next j
        Next i
        End If
    End Sub
    module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function Test_Tabvide(ByVal Plage As Variant) As Boolean
        'La variable VarTab doit impérativement être de type Variant.
        Dim VarTab As Variant
     
        '
        '...La procédure
        '
     
        On Error Resume Next
        'VarTab va prendre la valeur Empty si le tableau est vide.
        VarTab = UBound(Plage)
        On Error GoTo 0
        If IsEmpty(VarTab) Then Test_Tabvide = True
    End Function
    Même si ma 2ième solution marche j'aimerai bien savoir mon erreur dans la 1ère solution
    et si mon code est bien organisé ?

    Merci de votre participation et de votre aide

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    dans ta première méthode, ta variable est un tableau pouvant contenir "n'importe quoi"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Table_Book() As Variant
    Or, ta fonction ne renvoie pas "un tableau de n'importe quoi", elle renvoie "n'importe quoi", ce qui n'est pas la même chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function Init_Liste(ByVal Deb_Liste As Range) As Variant
    Ainsi, quand tu Exit Function, tu assignes à Table_Book (qui est un tableau, je le rappelle) une variable nulle ... d'où l'incompatibilité.

    La résolution immédiate est de déclarer Table_Book As Variant et de tester si le retour de ta fonction est un Array grâce à Table_Book (If IsArray(Table_Book) Then...)
    La résolution différente serait de tester la valeur de ta cellule, et seulement appeler ta fonction si elle n'est pas vide

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Merci bien pour ton aide
    Voici le code maintenant et cela fonctionne
    UserForm
    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
    ' Oblige la déclaration des variables au préalable
    'Option Explicit
     
    '****
    ' Déclaration variable
    '****
    ' Tableau des bookmakers
    Dim Table_Book As Variant
    ' Plage des bookmakers
    Dim Plage_Book As Range
    ' Coin gauche début Tableau Bookmaker
    Dim Deb_Book As Range
     
    '****
    ' Déclaration constantes
    '****
     
    ' Titre UserForm
    Const Titre_UFbook As String = ".::: Gestion des bookmakers"
    ' Titre Cadre statut travail
     
    '
     
    '****
    ' A l'activation de l'USERFORM
    '****
    Private Sub UserForm_Initialize()
        'nomfeuille = ActiveSheet.Name
        ' Attribution cellule des bookmakers
        Set Deb_Book = Range("B18")
        ' Init la liste des bookmakers
        Table_Book = Init_Liste(Deb_Book)
        ' Test si il existe minimun un bookmaker
        If IsArray(Table_Book) Then
            Init_DataCB Me.CB_Rechbook, Deb_Book
            Init_CBrechbook Me.CB_Rechbook, True, 2, "40;60", False
        Else
            MsgBox "Liste vide"
        End If
    End Sub
    module controle
    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
    '********************
    '      Combobox     *
    '********************
     
    ' Plage de cellule
    ' Init_DataCB(Nom CB, Cellule de départ)
    Sub Init_DataCB(ByVal Name_CB As ComboBox, ByVal Cell_Deb As Range)
        Dim Plage As Range
        Set Plage = Cell_Deb.CurrentRegion
        With Plage
            Set Plage = .Offset(1).Resize(.Rows.count - 1)
        End With
        Init_RowSource Name_CB, Plage
    End Sub
     
    Sub Init_RowSource(ByVal Name_CB As ComboBox, ByVal Plage As Range)
        With Name_CB
            .RowSource = Plage.Address(external:=True)
            .ListIndex = 0
        End With
    End Sub
     
    ' Paramètre colonne
    ' Init_DataCB(Nom CB, Cellule de départ)
    Sub Init_CBrechbook(ByVal Name_CB As ComboBox, ByVal En_Tete As Boolean, ByVal Nb_Col As Integer, ByVal Taille_Col As String, Autorise_saisie As Boolean)
        With Name_CB
            .ColumnHeads = En_Tete
            .ColumnCount = Nb_Col
            .ColumnWidths = Taille_Col
            If Autorise_saisie Then .Style = fmStyleDropDownCombo Else .Style = fmStyleDropDownList
        End With
    End Sub
    module fonctions
    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
     
    '****
    ' Init_Liste(Cellule de départ)
    '****
    Function Init_Liste(ByVal Deb_Liste As Range) As Variant
        Dim Tabl
        If (Deb_Liste = Null Or Deb_Liste = "") Then
                'MsgBox "Liste vide"
                Exit Function
        End If
        With Deb_Liste
            Tabl = .Cells(1, 1).Resize(.CurrentRegion.End(xlDown).Row - .Row + 1, .CurrentRegion.End(xlToRight).Column - .Column + 1).Value
        End With
        Init_Liste = Tabl
    End Function

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si ton problème est résolu, n'oublie pas de clôturer la discussion en la marquant "RESOLU" pour la bonne tenue du forum

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

Discussions similaires

  1. Erreur d'éxcution "13" incompatibilité de type
    Par sossso112333 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/08/2014, 21h16
  2. [XL-2010] Erreur d'éxécution 13 - Incompatibilité de Type
    Par denandg dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/08/2013, 15h15
  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