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 type 13 [XL-MAC 2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur recherche materiau
    Inscrit en
    Novembre 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur recherche materiau

    Informations forums :
    Inscription : Novembre 2019
    Messages : 26
    Points : 11
    Points
    11
    Par défaut Erreur type 13
    Bonjour le forum, bonjour le fil,

    Une fois de plus je me tourne vers le forum et vous demande de l'aide SVP.

    J'écris une macro pour importer des data à partir d'un fichier .csv. Ce fichier est une suite de nombre (data) mais certaines lignes sont affectées d'un "N/A" lorsque le mesure s'est mal passée.
    Le but est de récupérer les data dans un tableau pour le copier sur mon classeur et ensuite générer des stats.

    J'ai donc le code suivant:
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Public System As String
    
    Option Explicit
    Sub IV_Import()
    
    Dim ws_IVData As Worksheet: Set ws_IVData = ThisWorkbook.Worksheets("IV_Data")        'déclaration variable & attribution d'un nom au classeur pour manipulation
        ws_IVData.Cells.Delete Shift:=xlUp                                                     'Effacement des data
    
    Dim fichier As Variant, info() As Variant, i As Integer, lr As Integer, j As Integer
    Dim Batch_ID As Range, date_heure As String, c_ID As String, DataColumn As Variant
    Dim No_ID As Boolean:  No_ID = False
    
    '----//// définition de la constante Disque, pour placement dans le répertoire 
        Const Pasan As String = "S:blabla"
        Const Chroma As String = "S:ici"
    
        frmPattern.Show
        Dim Repertoire As String: Repertoire = IIf(System = "Pasan", Pasan, Chroma)
            ChDrive Repertoire
            ChDir Repertoire
            
        fichier = Application.GetOpenFilename(, , System & " File(s) Selection", , True)
            If IsArray(fichier) = False Then                 '---- condition pour continuer: si chemin vide (=False)
                MsgBox ("No File Selected")                     'sortie de la boucle avec affichage d'un texte
                Exit Sub
            End If
        Application.ScreenUpdating = False                                                                                                  'non rafraichissement écran pour gain de temps
        
        For i = 1 To UBound(fichier)
            Workbooks.OpenText Filename:=fichier(i), StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlTextQualifierDoubleQuote, Comma:=True, _
            ConsecutiveDelimiter:=True, Semicolon:=True, Space:=False, Other:=False, DecimalSeparator:=","
                   
            lr = Cells(Cells.Rows.Count, 1).End(xlUp).Row
            Select Case System
                Case Is = "Pasan"
                    DataColumn = Array(8, 9, 15, 16, 10, 11, 12, 13, 14, 29, 30)
                Case Is = "Chroma"
                    DataColumn = Array(15, 16, 19, 20, 12, 13, 14, 17, 18, 22, 23)
                    Cells.Replace what:=".", Replacement:=".", LookAt:=xlPart, SearchOrder:=xlByRows
            End Select
            
            ReDim info(lr - 2, 17)
            For j = LBound(info) To UBound(info)
                info(j, 0) = System
                
                info(j, 1) = IIf(System = "Pasan", Cells(j + 2, 1).Value2, Left(Cells(j + 2, 6).Value2, 10))          'date
                info(j, 2) = IIf(System = "Pasan", Cells(j + 2, 2).Value2, Right(Cells(j + 2, 6).Value2, 8))          'heure
                info(j, 7) = IIf(IsNumeric(Cells(j + 2, DataColumn(0)).Value2 = True), Cells(j + 2, DataColumn(0)).Value2 * 1000, Cells(j + 2, DataColumn(0)).Value2)
                        
                info(j, 8) = Cells(j + 2, DataColumn(1)).Value2            'Isc
                info(j, 9) = Cells(j + 2, DataColumn(2)).Value2           'FF
               'info(j, 10) = IIf(System = "Pasan", Cells(j + 2, DataColumn(3)).Value2, Cells(j + 2, DataColumn(3)).Value2 * 100)       'Eff
                info(j, 11) = Cells(j + 2, DataColumn(4)).Value2          'Pmax
                info(j, 12) = Cells(j + 2, DataColumn(5)).Value2          'Vmax
                info(j, 13) = Cells(j + 2, DataColumn(6)).Value2          'Imax
                info(j, 14) = Cells(j + 2, DataColumn(7)).Value2          'Rs
                info(j, 15) = Cells(j + 2, DataColumn(8)).Value2          'Rshunt
                info(j, 16) = Cells(j + 2, DataColumn(9)).Value2          'Irev
                info(j, 17) = Cells(j + 2, DataColumn(10)).Value2          'Irev2
            Next j
            ActiveWorkbook.Close (False)
                        
            lr = Cells(ws_IVData.Cells.Rows.Count, 1).End(xlUp).Row + 1
            Range(ws_IVData.Cells(lr, 1), ws_IVData.Cells(lr + UBound(info), 18)) = info()
            Erase info()
        Next i
    End Sub
    J'ai surligné en rouge les lignes qui renvoient l'erreur de type 13.
    Mon tablaeau "info()" est déclaré en tant que variant. La condition "IsNumeric" me revoie "True" lorsque que la cellule est convertible en nombre, "False" lorsque ce n'est pas le cas.
    J'ai fait un essai avec VarType afin de connaitre le type de ma cellule lorsque "IsNumeric" me renvoie "False", qui est de type "String"; la condition "IIf" est donc censée me retourner le deuxième argument, mais l'erreur type 13 apparait à chaque fois que "IsNumeric" est "False", et uniquement si "IsNumeric" est "False".

    Si je contourne le pb par :
    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
     
    For j = LBound(info) To UBound(info)
                info(j, 0) = System
     
                info(j, 1) = IIf(System = "Pasan", Cells(j + 2, 1).Value2, Left(Cells(j + 2, 6).Value2, 10))          'date
                info(j, 2) = IIf(System = "Pasan", Cells(j + 2, 2).Value2, Right(Cells(j + 2, 6).Value2, 8))          'heure
     
                info(j, 8) = Cells(j + 2, DataColumn(1)).Value2            'Isc
                info(j, 9) = Cells(j + 2, DataColumn(2)).Value2           'FF
     
                info(j, 11) = Cells(j + 2, DataColumn(4)).Value2          'Pmax
                info(j, 12) = Cells(j + 2, DataColumn(5)).Value2          'Vmax
                info(j, 13) = Cells(j + 2, DataColumn(6)).Value2          'Imax
                info(j, 14) = Cells(j + 2, DataColumn(7)).Value2          'Rs
                info(j, 15) = Cells(j + 2, DataColumn(8)).Value2          'Rshunt
                info(j, 16) = Cells(j + 2, DataColumn(9)).Value2          'Irev
                info(j, 17) = Cells(j + 2, DataColumn(10)).Value2          'Irev2
     
                Select Case System
                    Case Is = "Pasan"
                       info(j, 7) = Cells(j + 2, DataColumn(0)).Value2
                             If IsNumeric(info(j, 7)) = True Then info(j, 7) = info(j, 7) * 1000
                       info(j, 12) = Cells(j + 2, DataColumn(5))
                            If IsNumeric(info(j, 12)) = True  Then info(j, 12) = info(j, 12) * 1000
     
                    Case Is = "Chroma"
                        info(j, 7) = (Cells(j + 2, DataColumn(0)).Value2) * 1000
                        info(j, 12) = (Cells(j + 2, DataColumn(5)).Value2) * 1000
                    End Select
            Next j
    Je n'ai plus de problème d'incompatibilité de type et l'erreur de type 13 disparait donc.
    Pas que cette solution me déplaise, mais j'aimerais tout de même comprendre pq dans le premier cas cela ne fonctionne pas.

    Si je peux me permettre (dans les choses que je ne comprends pas non plus), pourquoi malgré un délimitateur de décimale clairement mentionné comme "," dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Workbooks.OpenText Filename:=fichier(i), StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlTextQualifierDoubleQuote, Comma:=True, _
            ConsecutiveDelimiter:=True, Semicolon:=True, Space:=False, Other:=False, DecimalSeparator:=","
    j'ai encore des points dans le cas "Chroma", ce qui oblige de faire l'opération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cells.Replace what:=".", Replacement:=".", LookAt:=xlPart, SearchOrder:=xlByRows
    seule solution que j'ai trouvée pour remplacée les points par des virgules (oui oui, j'ai bien écrit les bien par des virgules, et non pas des points par des points)!!

    Merci d'avance de votre aide,
    Cdt

  2. #2
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Points : 219
    Points
    219
    Par défaut
    Si vous avez PowerQuery, je conseille vivement de l'exploiter dans ce cas-ci, ça supprimera tous vos problèmes. L'essayer, c'est l'adopter. Le reste, c'est du bricolage avec les formules classiques.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur recherche materiau
    Inscrit en
    Novembre 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur recherche materiau

    Informations forums :
    Inscription : Novembre 2019
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Bonjour le fil,

    Je n'ai toujours pas trouvé pq ces lignes sont bloquantes.
    Ce point n'étant pas bloquant, je clos la discussion, mais je continue de chercher une explication.
    Merci belga pour ton aide,

    Cdt

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/06/2006, 08h47
  2. erreur : type incompatible
    Par keibenoit dans le forum Access
    Réponses: 3
    Dernier message: 30/05/2006, 17h39
  3. erreur type string
    Par blastmanu dans le forum C++
    Réponses: 3
    Dernier message: 21/04/2006, 01h07
  4. Erreur : Type Mismatch
    Par ekinoxe dans le forum ASP
    Réponses: 1
    Dernier message: 17/02/2006, 09h51
  5. Erreur type interdit dans __property
    Par Neilos dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/01/2005, 21h45

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