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


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut Erreur d'exécution 13, incompatibilité de type
    bonjour;

    voici mon bout de 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
    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
     
    Option Explicit
    Option Base 1
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim x, y, i, j, k, m,  leg_s As Integer
        Dim tableau_R(), cell, formule As String
     
        leg_s = leg 'leg est une variable globale qui vient d'une autre procédure
     
        cell = Target.Address
        x = 0
        ReDim tableau_R(leg_s)
     
    'je regarde combien de cellule je vais devoir surveiller.
        For j = 1 To leg_s
            tableau_R(j) = "$B$" & 9 + x
            x = x + 21
        Next
     
    'si ces cellules change de valeur alors je prend celle qui a changé de valeur et je met les cellules correspondantes, que je dois modifier dans un tableau.
     
       For m = 1 To leg_s
            If Not Application.Intersect(Target, Range(tableau_R(m))) Is Nothing Then
     
                ReDim tableau_P(18)
                y = 0
                k = 21 * m - 21
                    For i = 1 To 18
                        tableau_P(i) = "$B$" & 15 + y + k
                        i = i + 1
                        tableau_P(i) = "$C$" & 15 + y + k
                        i = i + 1
                        tableau_P(i) = "$F$" & 15 + y + k
                        y = y + 1
                    Next
                Worksheets("Element").Unprotect
     
     
                formule = Target.Value '''''''''''''''''''''''''''''''' mon code erreur est ici
     
    'en fonction de se qui est dans ma cellule je modifie en conséquence toutes celles qui doivent l'être
                Select Case formule
     
                Case Is = ""
                    Range(tableau_P(1) & ":" & tableau_P(17) & ", " & tableau_P(3) & ":" & tableau_P(18)).Select
                    Selection.Locked = True
                    Selection.FormulaHidden = False
                Case Is = "0"
                    Range(tableau_P(1) & ":" & tableau_P(17) & ", " & tableau_P(3) & ":" & tableau_P(18)).Select
                    Selection.Locked = True
                    Selection.FormulaHidden = False
                Case Is = "1"
                    Range(tableau_P(1) & ":" & tableau_P(2) & ", " & tableau_P(3)).Select
                    Selection.Locked = False
                    Selection.FormulaHidden = False
                    Range(tableau_P(4) & ":" & tableau_P(17) & ", " & tableau_P(6) & ":" & tableau_P(18)).Select
                    Selection.Locked = True
                    Selection.FormulaHidden = False
                Case Is = "2"
                    Range(tableau_P(1) & ":" & tableau_P(5) & ", " & tableau_P(3) & ":" & tableau_P(6)).Select
                    Selection.Locked = False
                    Selection.FormulaHidden = False
                    Range(tableau_P(7) & ":" & tableau_P(17) & ", " & tableau_P(9) & ":" & tableau_P(18)).Select
                    Selection.Locked = True
                    Selection.FormulaHidden = False
                Case Is <> ""
                    Range(tableau_P(1) & ":" & tableau_P(17) & ", " & tableau_P(3) & ":" & tableau_P(18)).Select
                    Selection.Locked = True
                    Selection.FormulaHidden = False
                End Select
                Range(tableau_R(m)).Select
                k = k + 21
                Worksheets("Element").Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
            End If
        Next
    il me sort comme erreur: Erreur d'exécution 13, incompatibilité de type
    par contre ces quelques lignes ce code fonctionnent quand je place la variable leg, qui normalement est globale, sur 2 ou sur 3, enfin quand je la fixe au début de ma procédure comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dim leg as interger
    leg = 2
    auriez vous une idée pour cette erreur ?

    merci par avance.
      0  0

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Bonjour,
    Peux-tu nous dire comment et où tu déclares leg? et quand est-ce que tu attribus une valeur à leg?
    Voici une explication que j'ai trouvé sur un tuto : "Les variables globales existent et conservent leur valeur pendant toute la durée de l'exécution de l'application."
    Or tu utilises un evenement qui fait appel à leg, donc tu fais appel à leg après l'éxécution de l'application qui a donné sa valeur à leg. Si je comprends bien l'explication sur les variables globales, la variable leg n'a plus de valeur aux yeux de VBA et donc leg_s = leg n'a plus de sens.
    Je pense qu'il serait plus simple que tu écrives la valeur de leg dans une cellule et que tu récupères la valeur de cette cellule quand nécessaire.
    Par exemple, tu décides de la valeur de leg lors de l'exécution d'une certaine Macro1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Macro1
        Sheets(1).Range("A1").Value = ce à quoi leg doit être égal
    End Sub
    Puis,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim x, y, i, j, k, m,  leg_s As Integer
        Dim tableau_R(), cell, formule As String
     
        leg_s = Sheets(1).Range("A1").Value
     
       '.....
    End Sub
    Au passage, un commentaire sur ton code : lorsqu'on déclares des variables, il faut dire pour chaque variable de quel type elle est. Dans ton cas, il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim x As Integer, y As Integer, i As Integer, j As Integer, k As Integer, m As Integer,  leg_s As Integer
    Dim tableau_R() As String, cell As String, formule As String
    J'espère que tu pourras avancer comme cela
      0  0

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

    La notation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim ceci, cela as tel_type
    ne type que cela comme tel_type
    chaque variable doit l'être, ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim ceci as tel_type, cela as tel_type
      0  0

  4. #4
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    désolé, ce n'est pas une variable global mais public

    à l'ouverture de mon fichier, j'ai des userforms qui me demande plusieurs choses notamment combien je vais avoir d'étape, leg en anglais que je met dans une variable globale car je m'en sert plus tard.

    voici mon code à l'ouverture du fichier:
    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
     
    Private Sub Workbook_Open()
     
     
     
    Worksheets("Element").Unprotect
    Worksheets("Element").Activate
    modif = "0"
    Load Verification
    Verification.Show
    If modif = "0" Then
     
        Load PRIVE_MEDICAL
        PRIVE_MEDICAL.Show
     
    ' c'est ici que je place leg dans ma variable globale.
        Load LEG_box
        LEG_box.Show
    Else
        Worksheets("Element").Activate
        Application.Run ("Regroupe")
        ActiveWorkbook.RefreshAll
        chemin = "Z:\Ops Sol\PREP VOLS\nouveau_programme\"
        Worksheets("Element").Activate
        Application.DisplayAlerts = False
        Application.Dialogs(xlDialogSaveAs).Show chemin & "prep_vol_test", xlOpenXMLTemplateMacroEnabled
        Application.DisplayAlerts = True
     
        Exit Sub
    End If
    Application.Run ("ELEMENT")
    Application.Run ("Regroupe")
    ActiveWorkbook.RefreshAll
    Worksheets("Element").Activate
    Range("E4").Value = flight_number
    Range("B1").Select
    Worksheets("Element").Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
    End Sub
    je sais que ma variable leg est toujours présente quand le bout de code qui me pose problème beug car, une fois ma feuille principale est remplie, worksheet("Element"), je lance plusieurs procédures qui utilise leg avec un bouton et ces procédures fonctionne très bien.


    voilà comment est déclaré leg dans le module que je lance via un bouton pour creer mon dossier


    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
     
    Option Explicit
    Option Base 1
    Public leg, modif, leg_medical As Integer
    Public path, fichier, chemin, R574, MEDICAL, vol, Tableau_R574(), flight_number, trigramme As String
    Public NomTableau() As Boolean
     
     
     
    Sub creation_dossier()
     
        Dim Phyto, Pacotille, DG As String
     
        Phyto = WorksheetFunction.VLookup(Worksheets("Element").Range("G6"), Worksheets("aeroport").Range("Tableau_aerodrome"), 11, False)
        Pacotille = WorksheetFunction.VLookup(Worksheets("Element").Range("G6"), Worksheets("aeroport").Range("Tableau_aerodrome"), 10, False)
        DG = WorksheetFunction.VLookup(Worksheets("Element").Range("G6"), Worksheets("aeroport").Range("Tableau_aerodrome"), 8, False)
     
        path = "Z:\Ops Sol\PREP VOLS\nouveau_programme"
     
        'IF les cellules ci-dessous ne sont pas remplies alors on ne peut pas lancer la procédure
        If Sheets("Element").Range("B3").Value = "" Or Sheets("Element").Range("B5").Value = "" Or Sheets("Element").Range("B6").Value = "" Or Sheets("Element").Range("B9").Value = "" Or Sheets("Element").Range("B27").Value = "" Or Sheets("Element").Range("B30").Value = "" Or Sheets("Element").Range("G6").Value = "" Or Sheets("Element").Range("G7").Value = "" Or Sheets("Element").Range("G27").Value = "" Then
     
            MsgBox "les cases en jaune ne sont pas toutes remplies. Merci de faire le nécéssaire"
            Exit Sub
     
        Else
     
                If Sheets("Element").Range("B3").Value = "BE20" Then
                    Application.Run ("Ajout_devis")
                End If
                If vol = "MEDICAL" Then
                    Application.Run ("Ajout_manifest_pax")
                End If
                Application.Run ("Ajout_enveloppe")
                Application.Run ("Ajout_PDVol")
                'Application.Run ("Ajout_PO_GO") (j'attends un peu avant de le supprimer complètement)
                Application.Run ("Ajout_manifest_fret")
                Application.Run ("Ajout_phyto")
                Application.Run ("Ajout_mail")
                Application.Run ("Ajout_DG")
                MsgBox "La création du dossier est terminée."
     
        End If
     
        Set path = Nothing
        Set fichier = Nothing
        Set Phyto = Nothing
        Set Pacotille = Nothing
        Erase NomTableau
        Erase Tableau_R574
     
    End Sub
      0  0

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Peux-tu nous montrer le code où tu attribus une valeur à leg?
    Est-ce que par hasard, tu récupères le contenu d'une textbox? Parce que la textbox renvoie un String, peut-être cela viendrait de là. Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public leg As Integer, modif As Integer, leg_medical As Integer
    Quand tu récupères la valeur de la Textbox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    leg = CInt(Textbox.Value)
    Puis :
    Si ce n'est pas un problème de textbox, essaie quand même :
      0  0

  6. #6
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    j'ai essayé tes deux solutions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public leg as integer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    leg = CInt(Textbox.Value)
    ou encore
    et j'ai même essayer de mettre ma variable dans une cellule est de la reprendre après tel que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    leg_s = Worksheets("Element").Range("P2").Value
    mais rien ne marche

    voici mon code modifier ou j'intègre ma variable dans leg:

    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
     
     
    Option Explicit
     
    Dim Ws As Worksheet
     
     
     
     
    Private Sub UserForm1_Initialize()
    Me.CommandButton1.Enabled = False
    End Sub
    End If
     
     
    Private Sub Label1_Click()
     
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
    Cancel = True
    MsgBox ("le formulaire ne peut pas etre fermé")
    End If
    End Sub
     
    Private Sub OK_Click()
    leg = CInt(LEGBOX.Value)
    Worksheets("Element").Range("P2").Value = leg
    Unload Me
    End Sub
      0  0

  7. #7
    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
    Quelle est la valeur de leg lorsque plantage ?
      0  0

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, 11h45
  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, 16h59
  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, 13h03
  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, 16h47
  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, 16h20

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