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

  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 703
    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 703
    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 703
    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 703
    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

  8. #8
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    leg vaut ce qui est prévu. elle vaut ce que je rentre dans ma textbox
      0  0

  9. #9
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    je viens de faire un essais.
    si je met 2 ça marche et si je met 3 ça ne marche plus
      0  0

  10. #10
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    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 703
    Par défaut
    mais rien ne marche
    = toujours erreur d'éxectution 13 ? Si oui, sur quelle ligne exactement (dans chaque cas)?

    Est-ce que leg est bien un Integer et pas un Long? Un Integer est compris entre -32 768 et 32 767 cf. : http://silkyroad.developpez.com/VBA/LesVariables/#LII-C)
      0  0

  11. #11
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    en fait mon onglet Element est d'origine programmer avec 2 legs prêts à remplir. Je demande à l'ouverture combien il y a de leg. si c'est 2 je ne touche à rien si c'est plus de 2 je copie le premier leg que je colle en dessous du 3eme et ainsi de suite.

    je pense qu'on se rapproche du problème
      0  0

  12. #12
    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
    Ma question était :
    Quelle est la valeur de leg lorsque plantage ?
    et tu lui a donné pour réponse :
    leg vaut ce qui est prévu. elle vaut ce que je rentre dans ma textbox
    Incroyable ...

    Cela me rappelle une blague. Elle consiste à dire que l'on va deviner un nombre auquel on invite quelqu'un à penser et à exhiber un petit bout de papier sur lequel on a écrit "EXACT" lorsqu'il donne sa réponse, en preuve de ce que l'on avait bien deviné.
      0  0

  13. #13
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    Citation Envoyé par riaolle Voir le message
    = toujours erreur d'éxectution 13 ? Si oui, sur quelle ligne exactement (dans chaque cas)?

    Est-ce que leg est bien un Integer et pas un Long? Un Integer est compris entre -32 768 et 32 767 cf. : http://silkyroad.developpez.com/VBA/LesVariables/#LII-C)
    oui toujours la même erreur quand je met 3 dans ma textbox sur la ligne

    par contre quand je met 2 ça fonctionne


    pour information les legs seront toujours des entiers qui varieront entre 2 et 6
      0  0

  14. #14
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    Citation Envoyé par unparia Voir le message
    Ma question était :

    et tu lui a donné pour réponse :

    Incroyable ...

    Cela me rappelle une blague. Elle consiste à dire que l'on va deviner un nombre auquel on invite quelqu'un à penser et à exhiber un petit bout de papier sur lequel on a écrit "EXACT" lorsqu'il donne sa réponse, en preuve de ce que l'on avait bien deviné.

    désolé unparia j'ai fait une précision sur le message renvoyé
      0  0

  15. #15
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    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 703
    Par défaut
    Je ne comprends pas bien, est-ce que la cellule Target contient la valeur de leg? Car sinon, il n'y a aucun rapport entre leg et la ligne formule = Target.Value.
    Si oui, pourquoi passes-tu par la variable leg et leg_s si la valeur est dans la cellule Target?
    Pourquoi déclares-tu formule comme un String si la valeur dans la cellule Target est un entier? Et ensuite dans les Select Case tu peux écrire des entiers, et pas des chaines de caractère. J'ai l'impression que tu fais la même chose si Target est différent de 1 et 2 (vide, 0, ou > 2). Si tu utilises des entiers tu pourras faire les cas :
    • 1
    • 2
    • else
      0  0

  16. #16
    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
    Ne jamais "jouer" avec la trop grande permissivité de VBA
    Tes clauses de select case sont acceptées par vba lorsque la valeur est parfaitement définie et que l'on mélange torchons et serviettes (numériques et chaînes de caractères)
    car : exemple
    retournera True (Vrai)
    mais problèmes éventuels lorsque ce n'est pas le cas. Or tu ne prévois comme vraiment définies, que les valeurs (ou strings) "0", "1", et "2".
      0  0

  17. #17
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    comme tu le dit bien c'est brouillon est pour cause je suis en train d'apprendre le VBA et des fois ce n'est ps facile ça ne fait que 2 mois que j'y suis.

    mais si j'ai toutes ces bizarrerie c'est par que j'ai modifié et re-modifier pour cette erreur 13 car je ne sais pas d'ou ça peut venir.


    au départ mon code était comme ca:

    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
     
                Select Case Target.Value
     
                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
                End Select
                Range(tableau_R(m)).Select
                k = k + 21
                Worksheets("Element").Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
            End If
    ce qui me donnait une erreur 13, donc toujours la même.
    alors je suis passé par une variable, formule, pour voir.
    alors ma target.value est le nombre de passager que j'aurai sur mon vol.

    comme mon avion ne comporte que 6 places normalement case va jusqu'a 6 mais je l'ai fait courte pour le forum.

    je veux, en fait protéger les feuilles pour que les gens qui vont se servir du fichier ne sème pas la zizanie.

    mais ça ma l'air compliqué...
      0  0

  18. #18
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    Citation Envoyé par unparia Voir le message
    Ne jamais "jouer" avec la trop grande permissivité de VBA
    Tes clauses de select case sont acceptées par vba lorsque la valeur est parfaitement définie et que l'on mélange torchons et serviettes (numériques et chaînes de caractères)
    car : exemple
    retournera True (Vrai)
    mais problèmes éventuels lorsque ce n'est pas le cas. Or tu ne prévois comme vraiment définies, que les valeurs (ou strings) "0", "1", et "2".
    dnas mes cases je permet en fait:

    "0", "1" , "2", "3", "4", "5", "6", "" et <>""
      0  0

  19. #19
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    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 703
    Par défaut
    As-tu bien compris la différence Integer/String?
    As-tu essayé de faire tes Select Case avec des entiers?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select Case Target.Value
        Case 1
            '...
        Case 2
            '...
        Case Else
            '...
    End Select
      0  0

  20. #20
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    oui je viens de le faire et c'est pareil. Je ne pense pas que c'est de ce coté qu'il faut chercher car, quand je met 2 dans ma textbox ça marche, et quand je met 3 ça ne marche plus.

    quand je colle mon troisième leg je pense que c'est là le soucis car forcément je touche à la cellule qu'il doit surveiller.

    dans ma boucle for j'ai donc si leg = 3:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For j = 1 To leg_s
            tableau_R(j) = "$B$" & 9 + x
            x = x + 21
        Next
    ranges B9, B30 et B51 à surveiller

    mais pendant le temps que je la surveille je met en forme mon 3eme leg sur mon worksheet("Element"), celui même ou il y a ma surveillance.
      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, 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