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'exécution 13 : incompatibilité de type [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Par défaut Erreur d'exécution 13 : incompatibilité de type
    Bonjour,

    Je souhaite à partir d'une réponse donnée par l'utilisateur dans un userform déterminer une liste de données. Dans la colonne F, je cherche la donnée et quand elle y est, j'agrémente ma liste avec le texte de la colonne G de la même ligne.
    Cette liste sera ensuite dans une listbox dans un autre userform.

    Dès que je lance ma macro j'ai l'erreur d'exécution 13 : incompatibilité de type et je n'arrive pas à trouver le probleme.

    VOici mon 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
    Sub userform_initialize()
     
    Worksheets("Cartographie").Select
    Dim nompilote As String
    i = 3
    Do While Cells(i, 15) <> identifiant
    i = i + 1
    Loop
    nompilote = Cells(i, 14) 'définition le pilote en fonction de l'identifiant
     
    Worksheets("Suivi des documents").Activate
    Dim j, k As String
    Dim listetitre(7 To 800) As Integer
    For j = 7 To 800
        If Cells(j, 6).Text = nompilote Then
        listetitre(j) = Cells(j, 7).Text
        End If     
       Me.ListBox1.AddItem listetitre(k)
    Next j
     End Sub
    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour, pourrais-tu baliser ton code? (avec le bouton #) Car sinon c'est difficile à lire.
    Sur quelle ligne obtient tu cette erreur?
    La variable identifiant n'est pas renseignée c'est normal?

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Par défaut
    désolée c'est la première fois que je participe à une discussion

    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
    Sub userform_initialize()
     
    Worksheets("Cartographie").Select
    Dim nompilote As String
     
    i = 3
    Do While Cells(i, 15) <> identifiant
    i = i + 1
    Loop
    nompilote = Cells(i, 14) 'définition le pilote en fonction de l'identifiant
     
    Worksheets("Suivi des documents").Activate
    Dim j, k As String
    Dim listetitre(7 To 800) As Integer
     
    For j = 7 To 800
        If Cells(j, 6).Text = nompilote Then
        listetitre(j) = Cells(j, 7).Text
        End If      
       Me.ListBox1.AddItem listetitre(k)
    Next j
    Ca fait parti du problème, je n'ai aucune ligne surlignée.
    LA variable identifiant est déclarée dans un autre module en public.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par Alex1788 Voir le message
    Ca fait parti du problème, je n'ai aucune ligne surlignée.
    Lance le code en mode pas à pas (touche F8) tu verras alors où il s'arrête.

    LA variable identifiant est déclarée dans un autre module en public.
    Si tu ne l'as pas déjà affiché dans le menu: View -> Locals Window
    Tu peux voir le type et la valeur de chaque variable au moment de l'erreur.
    Vu l'erreur indiquée tu as surement une variable mal renseignée.

    Ps: je ne suis pas expert en variable public mais ne faut il pas qu'elle soit déclarée dans le même module?

    Edit: Les balises codes ça aide, je viens de voir ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim listetitre(7 To 800) As Integer    
    listetitre(j) = Cells(j, 7).Text

  5. #5
    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

    En plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim j, k As String '----> k est donc de type string
    Dim listetitre(7 To 800) As Integer  '---> listetitrre est donc un tableau dynamique
    For j = 7 To 800
      If Cells(j, 6).Text = nompilote Then
        listetitre(j) = Cells(j, 7).Text
      End If
      Me.ListBox1.AddItem listetitre(k)  ' ------>> k ne saurait être de type string (un index n'est pas de type string)
    Next j
    J'ajoute que ton code est étrange, dans la mesure ou k est toujours = 0, puisque non initialisé !

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Je vois bien l'erreur due à une valeur de type String affectée à ton tableau ce qui bien évidemment génère une erreur car tu le déclare "Integer". Donc, dans un premier temps pour simplifier déclare-le Variant pour voir si l'erreur disparaît et ensuite, je verrai ton code plutôt de cette façon :
    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
     
    Private Sub UserForm_Initialize()
     
        Dim Identifiant As String
     
        Dim ListeTitre()
        Dim NomPilote As String
        Dim I As Integer
        Dim J As Integer
        Dim K As Integer
     
        I = 3
     
        With Worksheets("Cartographie")
     
            Do While .Cells(I, 15) <> Identifiant
                I = I + 1
            Loop
     
            NomPilote = .Cells(I, 14) 'définition le pilote en fonction de l'identifiant
     
        End With
     
        With Worksheets("Suivi des documents")
     
            For J = 7 To 800
     
                If .Cells(J, 6).Text = NomPilote Then
     
                    K = K + 1
                    ReDim Preserve ListeTitre(1 To K)
                    ListeTitre(K) = .Cells(J, 7).Text
     
                End If
     
            Next J
     
        End With
     
        Me.ListBox1.List = ListeTitre()
     
    End Sub

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Ps: je ne suis pas expert en variable public mais ne faut il pas qu'elle soit déclarée dans le même module?

    Quand tu déclares en public tout le programme peut utiliser tes variables. J'ai pour habitude de créer un module avec toutes mes variables public au lieu de les déclarer à chaque module.

  8. #8
    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 Alex1788
    Quand tu déclares en public tout le programme peut utiliser tes variables. J'ai pour habitude de créer un module avec toutes mes variables public au lieu de les déclarer à chaque module.
    Fort mauvaise habitude. Il faut savoir à la fois être économe et raison garder.
    On ne déclare public que ce qui est nécessaire. (un sou, c'est un sou).

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

Discussions similaires

  1. Erreur d'exécution "13" incompatibilité de type
    Par zenico64 dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 14/12/2010, 10h45
  2. Erreur d'exécution 13 : incompatibilité de type
    Par Ptikir dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/04/2009, 15h59
  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