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 :

Application.InputBox 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
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Mars 2013
    Messages : 29
    Par défaut Application.InputBox incompatibilité de type
    Bonjour à tous.

    Je ne comprends pas pourquoi j'obtiens une erreur d'execution sur la ligne de mon inputbox.
    J'ai dû exécuter la macro une cinquantaine de fois sans que jamais ça ne plante à cet endroit et voici que j'obtiens une erreur d'incompatibilité de type

    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
    Public TabNameSheets() As String
    Dim ChoixSheet As String 'variable STRING, et non numérique, représentant la sheet sélectionnée par l'utilisateur qui recevra le traitement de la macro
    Dim SortieWhile As Boolean 'variable qui teste la valeur de l'InputBox de sélection des sheets
    Dim listeSheets As String
     
    MsgBox prompt:="Veuillez parcourir les différentes feuilles du fichier ""Export_TRS"" pour déterminer celle qui va servir à la mise à jour des carnets."
     
    For z = 1 To nbSheetExportSAP 'nbSheetExportSAP = nb total de sheets dans le classeur
        TabNameSheets(z) = ExportSAP.Worksheets.Item(z).Name
        listeSheets = "Feuille numéro " & z & " = " & TabNameSheets(z) & Chr(10) & listeSheets
    Next
     
        SortieWhile = False
        While SortieWhile = False
        ChoixSheet = Application.InputBox(prompt:="Entrez le numéro de la feuille qui servira à importer les données TRS dans les carnets métro" & Chr(10) & Chr(10) & listeSheets, Title:="Entrer le numéro de la feuille", Type:=1 + 2) 'ATTENTION, ici il s'agit de la MÉTHODE InputBox
            If IsNumeric(ChoixSheet) = True Then 'si la variable STRING ChoixSheet peut être évaluée comme un nombre (ça signifie que le user a bien entré une valeur) alors
                SortieWhile = True               'SortieWhile = true et on peut sortir de la boucle
            End If
            If ChoixSheet = "Faux" Then 'si la variable STRING ChoixSheet est "FAUX" détecte si le bouton annuler ou la croix ont été cliqués. Permet de différencier un clic sur croix ou annuler d'un clic sur ok sans avoir entré de valeur
                ExportSAP.Close SaveChanges:=False
                Exit Sub
            End If
        Wend
    J'ai fait des modifs dans mon code mais pas sur ce pavé qui fonctionnait très bien auparavant.
    Bien avant que cela ne fonctionne, j'avais passé du temps (découvrant qu'il y avait une méthode et une fonction): j'ai bien essayé du 1, du 1+2, du 2 tout seul en respectant le typage de la variable et c'est cette solution qui convenait et fonctionnait parfaitement avant.
    Le 1 tout seul ou le 2 tout seul ne fonctionnent pas...
    Je ne comprends d'ailleurs pas pourquoi puisque les différents type permettent un type de données en entrée.
    Est-ce lié à ma variable qui affiche la liste des sheets du classeur ?

    Merci d'avance pour vos lumières.

    Bonne soirée.

  2. #2
    Expert éminent
    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
    Par défaut
    Bonjour,

    comme pourtant expliqué dans l'aide du message d'erreur, ne pas mélanger torchons & serviettes !
    Soit mauvais type de variable soit mauvais type de la méthode InputBox
    Juste utiliser la fonction au lieu de la méthode !

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  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
    C'est pourtant simple (il suffit d'ouvrir la rubrique Application.InputBox, Méthode de l'aide interne VBA ... et ... de la lire, avant de crier "maman, bobo" )
    fait que type = 3
    Or, le type 3 est inconnu
    Déjà, hein ...
    Quant au reste :
    1) le choix du type adéquat, c'est le développeur qui le fait. Et il ne le fait pas au hasard, mais en fonction de ce qu'il souhaite (parmi quoi, ce qu'il souhaite que retourne la méthode et donc son type)..
    2)
    Je ne comprends d'ailleurs pas pourquoi puisque les différents type permettent un type de données en entrée.
    suffit lire la rubrique mentionnée ci-dessus. Elle me paraît personnellement on ne peut plus claire et je ne saurais sans me "polluer" moi-même et polluer dans la foulée le français, m'exprimer de manière meilleure que celle qui y est utilisée. On ne va tout de même pas me demander de sacrifier on français pour lui préférer une longue série de périphrases pour dire (moins clairement, d'ailleurs) ce que l'on sait dire très précisément en quelques mots !
    Je sors ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Mars 2013
    Messages : 29
    Par défaut
    Bonsoir.

    @Marc: sauf erreur de ma part, il me semble que je ne mélange pas les torchons et les serviettes.
    Et comme, pourtant, expliqué dans mon premier message, j'ai très bien compris ce qu'est un problème d'incompatibilité et que c'est justement ça que je ne comprends pas.
    J'ai typé ma variable en string et la méthode inputBox a été utilisée avec un type de valeur renvoyée correspondant à du string et/ou du integer.
    J'ai passé beaucoup de temps sur cette inputBox et j'ai déjà essayé la fonction InputBox: c'est même elle que j'ai essayé en tout premier. Mais si j'ai laissé tombé, c'est à cause des choix de l'utilisateur (croix/annuler/mauvais type de valeur entrée) qu'il est plus facile de gérer.
    D'ailleurs dans mon code, juste au dessus de la ligne de la méthode InpuBox se trouve la même ligne mais avec la fonction Inputbox désactivée par l'apostrophe.

    @unparia: Je pense qu'il faut que tu arrêtes de vouloir m'aider. Je ne comprends pas cette agressivité.
    Alors, pour la faire courte, j'ai ouvert la rubrique "méthode Application.InputBox" sur MSDN (https://msdn.microsoft.com/fr-fr/lib.../ff839468.aspx) un paquet de fois il y a quelque temps et si toi, par contre, tu avais un peu mieux lu, tu aurais peut-être vu ce qu'il est écrit noir sur blanc, dans la remarque juste avant le tableau des valeurs:

    Remarques
    Les tableaux suivants répertorient les valeurs pouvant être passées dans l'argument Type. Il peut s'agir d'une seule valeur ou d'une somme de valeurs. Par exemple, pour une zone d'entrée qui peut accepter du texte et des nombres, affectez la valeur 1 + 2 à Type.
    C'est bizarre: ça me fait penser à quelque chose...
    Déjà, hein...
    Ça me rappelle vaguement une histoire de paille et de poutre dans l’œil, ou un truc du genre...
    Alors, j'ai trop peu d'expérience pour être critique sur le contenu des pages MSDN, mais j'aurais plutôt tendance à croire ce qui y est écrit.
    Le type adéquat était clair pour moi, en tant que "développeur", et comme je l'ai écrit, j'ai essayé plusieurs types séparément en faisant attention au typage correspondant.
    J'ai passé beaucoup de temps à écrire ce bloc et à me renseigner sur le net.
    Je ne suis pas du genre à crier "maman, bobo" sans prendre la peine de chercher avant surtout que cela a toujours fonctionné jusqu'à maintenant.
    Donc ce genre de commentaire, contre-productif, agressif et où tu écris des choses qui contredisent ce qui est dit dans MSDN en sous-entendant que j'ai "de la m... dans les yeux" et qu'il faut que je lise un peu mieux avant de venir "chialer": évite.
    En tout cas, si ce qui est écrit sur MSDN est faux, ce serait intéressant que tu leur remontes l'erreur, histoire d'éviter à d'autres "bleus du VBA" comme moi de se faire insulter ou molester dans un forum d'entraide, quand ils auront un problème avec l'InputBox.

    Franchement, si vous avez été échaudé par mes réactions à propos de mon autre sujet, abstenez-vous d'intervenir.
    Demandez à quelqu'un de neutre de lire vos réponses et demandez lui si ça ne transpire pas de l'agressivité, limite du mépris, de la condescendance.
    Elle où la bienveillance envers des débutants ?
    Là, vous ne m'apportez rien à part ce mépris gratuit.
    Relisez-vous un peu et si quelqu'un comme moi vous gonfle pour x ou y raisons, abstenez-vous d'intervenir.
    Si ça vous gonfle de voir 10 000 fois les mêmes erreurs de newbie, sans prendre la peine de savoir combien de temps a pu passer le requéreur avant de poster, quel est son parcours, remettez-vous en question.
    Ce n'est pas parce que l'on pose une question que l'on n'a pas passé du temps à chercher et à tester avant de la poser: encore faut-il le demander ou utiliser patience et bienveillance.
    Ça ne sert à rien d'avoir autant d'étoiles qu'on peut en compter un soir d'été et avoir le niveau de Bill Gates pour faire des réponses comme ça.

    Je sors...

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Ton affaire, mise dans une macro marche normalement chez-moi. (Excel 2016)

    Mais, tu ne dis pas si tu as changé de version d'Excel ou de Windows.

    Et puis, ton incompatibilité de type peut être dûe à autre chose que ta réponse, comme des chr(10), par exemple.

    Commence par construire ton invite et ton titre à l'extérieur de l'inputbox et mets juste les variables dans l'InputBox, au lieu des phrases. Si ce sont les chr(10) qui causent problème, le message d'horreur va sortir ailleurs que sur cette ligne-là. Ce n'est pas parce que VBA permet de "compacter" à outrance et de remplacer 3 lignes par une seule que c'est une bonne idée. Surtout quand vient le temps de déboguer

    Ceci dit, je ne vois rien de bien méchant dans les propos de Marc-L et de unparia.

    Et puis, à vrai dire, je suis extrêmement surpris que mon Excel 2016, laisse passer les parenthèses et les paramètres nommés dans la même instruction. Parce que, avec Excel 2010, c'était le plantage assuré.

  6. #6
    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
    De bon matin, pipout64 :
    Tout d'abord : mille excuses en ce qui concerne la lecture de la rubrique Application.InputBox, qui accepte en effet deux types

    Je dois dire à ma décharge que certains aspects du code que tu montrais n'étaient pas pour me mettre dans les meilleures dispositions :
    - on voit par exemple bien que TabNameSheets est une matrice, mais on ne voit nulle part où elle a été dimensionnée ****. Or ton code montre que tu tentes d'y écrire des éléments d'indice z (dont on ignore d'ailleurs également le typage)
    - on ignore (tu ne le précises pas) quelle est la ligne de code dénoncée en bogue
    - on ignore également où et comment a été déclarée et initialisée la variable nbSheetExportSAP
    etc ...
    Voilà. Je te laisse maintenant.

    EDIT :
    **** et d'alleurs :
    Déclarée et non dimensionnée ainsi :
    TabNameSheets() As String
    elle ne peut dés lors être dimensionnée que par une instruction Redim (je le la vois nulle part dans ton code).

Discussions similaires

  1. Annuler InputBox en format date. Incompatibilité de type
    Par Mairequimby dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/12/2009, 15h01
  2. incompatibilité de type
    Par zooffy dans le forum Access
    Réponses: 2
    Dernier message: 13/06/2005, 15h12
  3. Incompatibilité de types dans un formulaire
    Par ahage4x4 dans le forum ASP
    Réponses: 3
    Dernier message: 03/05/2005, 15h39
  4. [XSD] Incompatibilité des types xs:ID et xs:IDREF ?
    Par Cpt.FLAM dans le forum Valider
    Réponses: 6
    Dernier message: 08/04/2005, 14h54
  5. Application Portable sur differents types de BDD
    Par sylvain_2020 dans le forum Décisions SGBD
    Réponses: 11
    Dernier message: 23/09/2003, 12h59

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