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 incompatibilité de type 13 sur une variable variant


Sujet :

Macros et VBA Excel

  1. #21
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    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
    Function CleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
     
        Dim x As Long, CodesToClean As Variant
     
        CodesToClean = Array(0, 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, 127, 129, 141, 143, 144, 157)
     
        If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
     
        For x = LBound(CodesToClean) To UBound(CodesToClean)
     
        If InStr(S, Chr(CodesToClean(x))) Then S = Replace(S, Chr(CodesToClean(x)), "")
     
        Next
     
        CleanTrim = WorksheetFunction.Trim(S)
     
    End Function

    désolé cher ami ... clean trim est vraiment pratique !!! un must

  2. #22
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    PS : je suis sur Mac Office 365 version 16.16.4

    1er test : j'ai transformé le fichier en xlsm et mis le code dans un module de celui et bizarrement celui-ci est passé sans problème …
    C'est à n'y rien comprendre ??

    Que se passe-t-il si tu fais la même chose ??
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  3. #23
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Erreur d'exécution 13 ... incompatibilité de type, si je met le code dans le worksheet ... donc meme résultat que si il est dans mon personal.xlsb

  4. #24
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    As tu fait la dernière mise à jour d'office Excel ? Se pourrait il que cela règle peut être le problème ?

    En attendant je vais refaire le test avec le fichier xlsx et le personal.xlsb
    Edit : Résultat OK chez aussi de cette façon

    Edit 2 : Refait les tests (si ce n'est pas déjà fait) avec le fichier que tu as mis en lien (il se peut peut être que celui-ci ne pose plus problème avec les modif de données)

    Edit 3 : comme sur Mac tout était Ok, j’ai redémarré celui ci sous Windows 10 avec Excel 2010 …
    Et là , une fois le code lancé, je me retrouve avec la même erreur.

    J’avais fait une recherche sur internet, mais sans trouver qq chose de consistant mais une piste qui allait dans le même sens que je le supposé, à savoir chercher le problème dans la donnée.
    j’ai donc fait comme la roue de la fortune, c’est à dire, supprimer des lignes par fourchette afin de me rapprocher de la « fortune » . (Plus un autre test en augmentant les données - sans le problème grâce aux lignes supprimées - environ 4000 lignes)

    Le résultat de cette fourchette s’est retrouvez entre la ligne 1900 et 1975. Lignes supprimer, le code passe…
    En recherchant les différences, je suis tombé sur 3 lignes dont la hauteur est bien plus grandes que la majeure partie des lignes.
    En les effaçants, le résultat est sans appel le code marche …

    Je suppose qu’un trop grand texte dans des cellules sont responsables … bizarre …???

    • • • > La je fait appel aux experts afin de comprendre ce qui peut provoquer une erreur 13,
    avec les variables Lig et Col Ok, variable tableau VA supposé Ok, aussi du texte supposé trop grand récupérer dedans certaines cellules de la plage ciblée et se trouvant dans VA pour ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VB = Application.Index(VA, Lig, Col)
    Je pense avoir une parade que je dois vérifier avant …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  5. #25
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Merci Ryu ton aide est plus qu'apprécié !!!


    Je te considère comme un vrai ami même si je connais peu sur toi ... Ton temps consacrer à m'aider est plus qu'apprécié


    Sincerement JP

  6. #26
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut J'ai besoin d'aide pour éclaircir/expliquer ce problème que je ne connais pas
    Bonsoir jpvba, bonsoir à tous,

    Besoin d'aide pour m'éclairer svp (Jacques, Patrick, clementmarcotte, dysorthographie, Menhir, Franck, etc ..., si vous passez par là)

    Ces données
    (tableau ci-dessous) copier à partir de A1.

    - en sélectionant les 3 1ères colonnes afin de créer une variable tableau VA, avec le code ci-dessous, on récupère les ligne 1 à 5 des colonnes 1 et 3 pour la variable tableau VB=> OK

    - en sélectionnant les 3 dernières colonnes, afin de créer une variable tableau VA, avec le code ci-dessous, on est censé récupérer les ligne 1 à 5 des colonnes 1 et 3 de la sélection pour la variable tableau VB,
    mais on se retrouve en fait avec une erreur 13

    Il s'avère avec des tests que si l'une des données dans VA dépasse les 255 caractères, le code plante (erreur 13 - incompatibilité de type) pour VB
    avec le code suivant : VB = Application.Index(VA, Evaluate("Row(1:" & "5" & ")"), Array(1, 3))

    Svp qui peut m'éclairer sur ce point ??? Merci d'avance

    Item retiré
    À créer SAC PLASTIQUE TRANSPARENT 24 X 36" (61 X 91CM) QUALITE EXTRA-FORT caisse de 250 unité(s) Je pourrais PORCui assigner PORCe PGHCACACACACACA57CACAP mais ce sePORCon PORCa desc. PORCAC c'est du QUAPORCITÉ RÉGUPORCIER aPORCors que chez Emb. MOUTHer, PORCe SA-26612 est quaPORCité EXTRA-FORT, aPORCors dois-je faire créer un nouveau code P car PORCe PGHCACACACACACA57CACAP est du QuaPORCité RÉGUPORCIER ??
    Item retiré
    À créer SAC PLASTIQUE TRANSPARENT 89 X 38 X 152.5CM (35 X 15 X 60") 0.96 A 1.29MIL QUALITÉ FORT RÉP ÉTAB: PORCors d'isoPORCement de patient Fibrose Kystique ou iso, PORC'inhaPORCo mets PORCe sac sur son chariot pour PORC'isoPORCer du patient / PORC'inhaPORCo de PORCa FK dit qu'on doit demeurer avec PORCes mêmes propriétés du sac car si trop résistant ePORCPORCe a déjà eu des probPORCèmes pour PORC'utiPORCisation du cPORCavier de son appareiPORC. IPORC faut aussi qu'iPORC soit de PORCa même grandeur ou un peu pPORCus grand.
    P6SSFSSFSSFPOLSSF1P SAC DE PLASTIQUE TRANSPARENT A/ZONE D'ECRITURE A FERMETURE PRESSION (ZIPLOC) 22.5 X 30CM (9 X 12") 2MIL paquet de 100 unité(s), boîte de 10 QuePORCPORCe est PORCa grandeur de vos sacs ? PORC'épaisseur en MIPORC ? Est-ce que ces choix pourraient convenir à votre besoin ? ddGHCACACACA11GH7P zipPORCoc 9"X12" caisse de 1CACACACACACA ou P6CACACACACACAGHCACA1P zipPORCoc 9"X12" avec zone d'écriture bPORCanche./ RÉP.ÉTAB: Sac 9" x 12" 2miPORC Oui PORCe P6CACACACACACAGHCACA1P convient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Test2()
        VA = Selection.Value
        VB = Application.Index(VA, Evaluate("Row(1:" & "5" & ")"), Array(1, 3))
    End Sub
    NB : si on reprend le même code en remplaçant la variable tableau VA par la Plage en objet Range le problème disparaît (cf code ci-dessous)


    Edit : jpvba pour éviter ce problème on va remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VB = Application.Index(VA, Lig, Col)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VB = Application.Index(Plage, Lig, Col)
    et mettre
    à la fin du code




    erf j'ai toujours pas compris le pourquoi du comment

    Ha oui, j'ai oublié de préciser, je n'ai pas eu le problème sur Mac (il faudrait que je ré-test afin d'en être certain, ce qui est sur, c'est que je n'ai pas eu d'erreur 13 )

    Edit : précision de texte au début du post
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  7. #27
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Salut Ryu, salut tous le monde


    Merci beaucoup pour ton temps consacrer a mon aide c'est plus qu'apprécié.


    J'ai testé le code avec les modification mais j'Arrive avec un erreur étant donné que plus haut on set plage = nothing.


    SI j'enlève cette ligne là ça fonctionne mais avec l'entête a retapé mais au moins ca fonctionne pour le moment !!!

  8. #28
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    J’ai bien précisé de mettre Set Plage = Nothing à la fin du code
    Relis

    L’entête à retaper ?? J’ai pas regardé … à voir …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  9. #29
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Citation Envoyé par RyuAutodidacte Voir le message
    Re,

    J’ai bien précisé de mettre Set Plage = Nothing à la fin du code
    Relis
    Oui je l'ai mise, ce que je fait référence est à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        With Sheets("R_MoulinetteAValider")
            DL = .Cells(.Rows.Count, 1).End(xlUp).Row
            Set Plage = .Range(Range("A2"), Range(TrouveLettreColonne([commentaire_fournisseur_titre]) & DL))
            VA = Plage
    '       Set Plage = Nothing

    Donc ce qui me donne



    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    Sub genere_onglets_fournisseur_TEST()
    
    Dim Col As Variant, DL As Long, Plage As Range, VA As Variant, I As Long, NewColl As New Collection, NC As Variant, Lig As Variant, VB As Variant, DimTab As Integer, NomFeuille As String
    Dim Col_Acro As Byte, Col_X As Byte
    Dim ligne As Variant
    Dim start As Single
    Dim finish As Single
    Dim LettreVoulue As String
    
    If sheetExists("R_MoulinetteAValider") = False Then
    MsgBox "Erreur d'exécution, la feuille R_MoulinetteAValider est manquante !!!", vbCritical, "ERREUR"
    Exit Sub
    Else
    End If
    
    Col_Acro = [fournisseur_titre].Column
    Col_X = [valider_fournisseur_titre].Column
    
     
    start = Timer
     
        Col = Array([ID_titre].Column, [seq_titre].Column, [pair_impair_titre].Column, [etab_titre].Column, [acronyme_etab_titre].Column, _
        [item_etab_moulinette_titre].Column, [item_etab_titre].Column, [descr_etab_titre].Column, [couleur_etab_titre].Column, [four_etab_titre].Column, _
        [fournisseur_titre].Column, [marque_etab_titre].Column, [cat_etab_titre].Column, [format_contrat_titre].Column, [qte_an_titre].Column, _
        [prix_contrat_titre].Column, [valider_fournisseur_titre].Column, [commentaire_fournisseur_titre].Column)
        
    Sheets("R_MoulinetteAValider").Activate
    LettreVoulue = TrouveLettreColonne([Fournisseur])
    
    Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInSheet("R_MoulinetteAValider")).Select
        Selection.Replace What:=Chr(47), Replacement:=Chr(32)
        Selection.Replace What:=Chr(92), Replacement:=Chr(32)
        Selection.Replace What:=Chr(91), Replacement:=Chr(32)
        Selection.Replace What:=Chr(93), Replacement:=Chr(32)
        nettoyerseul
        
        With Sheets("R_MoulinetteAValider")
            DL = .Cells(.Rows.Count, 1).End(xlUp).Row
            Set Plage = .Range(Range("A2"), Range(TrouveLettreColonne([commentaire_fournisseur_titre]) & DL))
            VA = Plage
    '       Set Plage = Nothing
    Application.ScreenUpdating = False
            On Error Resume Next
            For I = 1 To UBound(VA)
                If UCase(VA(I, Col_X)) = "X" Then
                    NewColl.Add UCase(VA(I, Col_Acro)) & "|" & I, UCase(VA(I, Col_Acro))
                    If Err Then
                        Err.Clear
                        ligne = NewColl(UCase(VA(I, Col_Acro)))
                        NewColl.Remove UCase(VA(I, Col_Acro))
                        NewColl.Add ligne & "|" & I, UCase(VA(I, Col_Acro))
                    End If
                    .Cells(I + 1, Col_X).value = "Extraction OK"
                End If
            Next
            On Error GoTo 0
        End With
     
        For Each NC In NewColl
            NomFeuille = Mid(NC, 1, InStr(NC, "|") - 1)
            Lig = Application.Transpose(Split(NC, "|"))
            Lig = Application.Index(Lig, Evaluate("Row(2:" & UBound(Lig) & ")"))
            VB = Application.Index(Plage, Lig, Col) 'VB = Application.Index(VA, Lig, Col)
            DimTab = Len(NC) - Len(Replace(NC, "|", ""))
     
        If Not sheetExists(NomFeuille) Then
            Sheets.Add , Sheets(Sheets.Count)
            Sheets(Sheets.Count).Name = NomFeuille
            En_Tete_fourn NomFeuille
            With ActiveSheet.Tab
                            .ThemeColor = xlThemeColorAccent1
                            .TintAndShade = 0.599993896298105
                        End With
        End If
        With Sheets(NomFeuille)
            DL = .Cells(.Rows.Count, 1).End(xlUp)(2).Row
            If DimTab > 1 Then .Cells(DL, 1).Resize(UBound(VB), UBound(VB, 2)).value = VB _
                        Else .Cells(DL, 1).Resize(, UBound(VB)).value = VB
        End With
        Next
        
    Set Plage = Nothing
        
        finish = Timer
    
    MsgBox "durée du traitement: " & finish - start & " secondes"
    
    Application.ScreenUpdating = True
    
    End Sub

    Edit 1 Pour l'entête, je me rend compte qu'il y a des coquins qui bouge la largeur de colonne ce qui cause les problèmes de largeur de l'entete

  10. #30
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Ce code on le met qu’une fois quand Plage n’est plus utilisé afin de vider la mémoire
    Hors celui-ci est utilisé dans la ligne VB = …
    Donc il viendra obligatoirement en dessous.
    Il est alors supprimer de la ligne 41 pour être en ligne 82

    Edit : pour préciser, on initialise la variable au début avec
    Set MaVariable = … (ce qui peut être le cas pour l’objet Range , worksheet … )
    Puis
    Quand elle n’est plus utilisé on vide la mémoire utilisé par celle-ci avec :
    Set MaVariable = Nothing
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

Discussions similaires

  1. Erreur incompatibilité du type (13) sur quelques éléments du Userfom
    Par walidov132 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/07/2018, 17h58
  2. [XL-2010] "Erreur de compilation: Qualificateur incorrect" sur une variable globale
    Par jpegpeg dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/01/2018, 09h44
  3. Réponses: 2
    Dernier message: 23/01/2008, 22h10
  4. Boucle sur une variable de type "heure"
    Par Charles25 dans le forum ASP
    Réponses: 3
    Dernier message: 15/11/2006, 17h51
  5. Erreur "type incompatible" sur une fonction
    Par Ricardo_Tubbs dans le forum ASP
    Réponses: 1
    Dernier message: 19/07/2006, 11h59

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