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' incompatiblité de type inattendue


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 24
    Points : 28
    Points
    28
    Par défaut Erreur d'execution '13' incompatiblité de type inattendue
    Bonjour,

    Etrange sur certains PC j'ai cette erreur a l'execution de fonction vba excel alors que sur d'autres PC je ne l'ai pas. Les fichiers utilisées sur les différents PC sont exactement les mêmes.
    C'est comme si un paramétrage d'excel ou des restrictions de droits générait ce problème.

    L'idee du code est récupérer des données provenant de fichiers CVS dans un tableau excel pour faire des calculs.

    La fonction s'arrête sur la ligne 19 avec erreur 13:

    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
     
    'Importer la longueur du filtre
    Function import_lenght(chemin_fichier As String) As Double
    Application.Volatile True
     
    Dim Chaine As String
    Dim Ar() As String
    Dim i As Long
    Dim NumFichier As Integer
    Dim Separateur As String
     
     
        Separateur = ";"
        NumFichier = FreeFile
        Open chemin_fichier For Input As #NumFichier
        Do While Not EOF(NumFichier)
            Line Input #NumFichier, Chaine
            If InStr(Chaine, "Rod length") Then
                Ar = Split(Chaine, Separateur)
                import_lenght = Ar(1)
            End If
        Loop
        Close #NumFichier
    End Function
    Cette fonction est appelée elle même dans la fonction suivante ligne 15:

    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
     
    Sub select_file_name()
     
    Dim Filename As Variant
    Dim N As Integer
    Dim current_row As Double
    Dim Ar() As String
     
        Filename = Application.GetOpenFilename(, , , , True)
     
        If IsArray(Filename) Then
     
            For N = LBound(Filename) To UBound(Filename) ' For each file selected in GetOpenFilename Windows
            ActiveSheet.Cells(ActiveCell.Row + N - 1, 1).Value = CStr(Filename(N)) ' Save first column: name of the file
            ActiveSheet.Cells(ActiveCell.Row + N - 1, 2).Value = import_lenght(CStr(Filename(N)))
            If ActiveSheet.Cells(2, 3).Value > 0 Then
            ActiveSheet.Cells(ActiveCell.Row + N - 1, 3).Value = import_capsule_position(CStr(Filename(N)), 1)
            End If
            If ActiveSheet.Cells(2, 3).Value > 1 Then
            ActiveSheet.Cells(ActiveCell.Row + N - 1, 4).Value = import_capsule_position(CStr(Filename(N)), 2)
            End If
            If ActiveSheet.Cells(2, 3).Value > 2 Then
            ActiveSheet.Cells(ActiveCell.Row + N - 1, 5).Value = import_capsule_position(CStr(Filename(N)), 3)
            End If
            If ActiveSheet.Cells(2, 3).Value > 3 Then
            ActiveSheet.Cells(ActiveCell.Row + N - 1, 6).Value = import_capsule_position(CStr(Filename(N)), 4)
            End If
            If ActiveSheet.Cells(2, 3).Value > 4 Then
            ActiveSheet.Cells(ActiveCell.Row + N - 1, 7).Value = import_capsule_position(CStr(Filename(N)), 5)
            End If
            If ActiveSheet.Cells(2, 3).Value > 5 Then
            ActiveSheet.Cells(ActiveCell.Row + N - 1, 8).Value = import_capsule_position(CStr(Filename(N)), 6)
            End If
     
            Next N
        'ActiveSheet.Cells(ActiveCell.Row, 2).Value = "= "
        End If
     
        'Pour ne pas garder en memoire le dossier du dernier fichier saisi avec GetOpenFilename
        ChDir ActiveWorkbook.Path 'place dans le bon répertoire
     
    End Sub
    En pièce jointe vous trouverez mon fichier excel contenant les fonctions vba et un fichier de resultats qu'il faut selectionner après appui sur le bouton "import data files" pour lancer les fonctions vba
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Je n'ai pas ouvert tes fichiers, mais as-tu essayé de faire du pas-à-pas ?

    Essaye de rajouter un debug.print sur ta chaine de caractère Chaine, car j'ai l'impression qu'elle est vide. Tu peux vérifier ? Si elle n'est pas vide, que vaut-elle ?

    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
    Function import_lenght(chemin_fichier As String) As Double
    Application.Volatile True
     
    Dim Chaine As String
    Dim Ar() As String
    Dim i As Long
    Dim NumFichier As Integer
    Dim Separateur As String
     
     
        Separateur = ";"
        NumFichier = FreeFile
        Open chemin_fichier For Input As #NumFichier
        Do While Not EOF(NumFichier)
            Line Input #NumFichier, Chaine
            debug.print Chaine
            If InStr(Chaine, "Rod length") Then
                Ar = Split(Chaine, Separateur)
                import_lenght = Ar(1)
            End If
        Loop
        Close #NumFichier
    End Function
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut A tester …

    Bonjour,

    mettre la ligne n°7 en commentaire pour voir …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 24
    Points : 28
    Points
    28
    Par défaut
    La variable chaine contient bien une ligne du fichier comme attendu de toute facon ar contient bien aussi la valeur attendu.

    J'ai essayé de commenter ligne 7 mais cela ne change rien

Discussions similaires

  1. Erreur d'execution 13 : incompatibilité de type
    Par forum2015 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 31/07/2014, 18h05
  2. [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
  3. [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
  4. [XL-2000] erreur d'execution '13': Imcompatibilité de type.
    Par dybmans dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/10/2010, 16h37
  5. Réponses: 9
    Dernier message: 05/10/2006, 08h31

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