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 :

sendkey + date jour = incompatible !?


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
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut sendkey + date jour = incompatible !?
    salut,

    Je cherche à imprimer une feuille xls en Pdf.
    lorsque l'imprimante me demande le nom du fichier pdf à générer, je souhaiterais y taper la date du jour.
    dans le vba je récupère la date mais je n'arrive pas à l'utiliser avec le sendkeys.

    j'ai "incompatibilité de type" avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    myday = now 
    d = Day(myday)
    mo = Month(myday)
    y = Year(myday)
    'h = Hour(myday)
    'min = Minute(myday)
     
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Générateur de pdf", Collate:=True
    AppActivate ("Enregistrer sous")
    Application.Wait now + TimeValue("00:00:05")
     
    Application.SendKeys d + "_" + mo + "_" + y
    par contre si je met qu'une donnée dans le sendkeys (le jour par exemple) ça fonctionne.

    help, svp

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    A première vue, ce qui coince ce sont tes "+"
    Le signe de concaténation est le "&"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.SendKeys d & "_" & mo & "_" & y

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    exact, je viens de m'en apercevoir, merci m'sieur.

    du coup j'ai encore une question.
    Si maintenant je veux récupérer dans une variable le résultat taper par le sendkeys, est ce possible ?

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Oula...je vois que tu as de la lecture

    Pour répondre à ta question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim myday As Date, d As Byte, mo As Byte, y As Integer
    Dim X As String
     
    myday = Now
    d = Day(myday)
    mo = Month(myday)
    y = Year(myday)
     
    X = d & "_" & mo & "_" & y
     
    Application.SendKeys X
    End Sub

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    et pour taper un "%" par sendkeys ?

    (quand y en a plus y en a encore ...,

    c bon j'ai rien dit sendkeys "{%}"


    mais si maintenant je veux imprimer mon fichier dans le dossier %userprofile%\mes documents

    si j'envoi dans les sendkeys %userprofile% çà pointe sur le dossier c:\documents and settings\local service%

    et non pas c:\documents and settings\toto\mes documents !!
    comment retrouver la variable %userprofile% de Windows ?

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    OUF !

    j'allais dire vois aide vba à : SendKeys, instruction

    L'instruction SendKeys attribue une signification spéciale au signe plus (+), au signe insertion (^), au signe pourcentage (%), au tilde (~) et aux parenthèses ( ). Pour indiquer l'un de ces caractères, placez-le entre accolades ({}). Par exemple, pour indiquer le signe plus, tapez {+}. Bien que les crochets droits ([ ]) n'aient aucune signification particulière dans l'instruction SendKeys, vous devez les placer eux aussi entre accolades. En effet, dans d'autres applications, ils ont une signification spéciale à prendre en compte en cas d'échange dynamique de données (DDE). Pour indiquer des accolades, utilisez les caractères {{} et {}}.
    Arf !

    Didier

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    nicovbs, Fring a raison , je ne sais le temps déjà que tu as passé sur ton pb, mais si tu bricoles à chaque fois le truc ressurgiras sous une autre forme, pour la même raison et la perte de temps jouera au facteur exponentiel (les nerfs, eux, souffrent).

    Les fonctions utilisées renvoient par défaut une Variant.
    Si tu déclares bien tes variables de façon explicite, tu peux faire des choses en connaissance de cause (attention au contexte qui se limite à l'exemple ici*).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub plop()
    Dim myday As Date 'as string serait aussi OK
    Dim d As String
    Dim mo As String
    Dim y As String
     
    myday = Now
    d = Day(myday)
    mo = Month(myday)
    y = Year(myday)
     
     Cells(8, 2) = d + " " + mo + " " + y
    End Sub
    Là ça marche, c'est OK (* tes variables ne sont plus des dates)

    Si tu enlèves les espaces " ", Ok idem sauf que données accolées, mais du coup expressions de même type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub plop4()
    Dim myday As Date
    Dim d As Date
    Dim mo As Date
    Dim y As Date
     
    myday = Now
    d = Day(myday)
    mo = Month(myday)
    y = Year(myday)
     
     Cells(8, 2) = d + mo + y
    End Sub
    (si tu remets les espaces " ", boum, voir le texte de l'aide plus bas...)

    Là ça marche encore dans les sens ou l'on n'a pas de message d'erreur , par contre le résultat obtenu est à surveiller car il ne correspond pas forcément aux attentes
    Rien d'anormal cependant, Excel a fait, comme la plupart du temps ce qu'on lui demandait...

    Pour comprendre place dans 3 cellules vierges formatées en date les données suivantes : 23 06 2008 et dans une quatrième, fait la somme de ces 3 là = même résultat 29/07/1905

    Si maintenant tu fais la même chose avec 3 cellules vierges formatées en texte.. Tu obtiens 2037, Excel = encore OK avec lui-même...

    Donc en y allant à tâtons entre les règles des opérateurs bien définies (cf plus loin), les déclarations de variables et les résultats des manip de dates le planning va être chargé.

    Un raccourci, souvent précieux = la touche F1 sous vba : (plus Dev.Com bien sûr !) qui te donnera par exemple pour "+, opérateur":


    Remarques

    L'utilisation de l'opérateur + ne permet pas toujours de distinguer si le résultat sera une addition ou une concaténation de chaînes. Pour éliminer toute ambiguïté et écrire un code plus clair, utilisez l'opérateur & pour les concaténations.

    Si une des deux expressions au moins n'est pas de type Variant, les règles ci-dessous s'appliquent :

    Condition Résultat
    Les deux expressions sont des types de données numériques (Byte, Boolean, Integer, Long, Single, Double, Date, Currency ou Decimal) Addition.
    Les deux expressions sont de type String Concaténation.
    Une expression est d'un type numérique et l'autre est de type Variant, sauf Null Addition.
    Une expression est de type String et l'autre est de type Variant, sauf Null Concaténation.
    Une expression est un Variant de type Empty Renvoi de l'expression restante, sans modification, en argument result.
    Une expression est une donnée de type numérique et l'autre est de type String L'erreur Type incompatible survient.
    L'une des deux expressions a la valeur Null L'argument result a la valeur Null.



    Si les deux expressions sont de type Variant, les règles ci-dessous s'appliquent :

    Condition Résultat
    Les deux expressions de type Variant sont numériques. Addition.
    Les deux expressions de type Variant sont des chaînes. Concaténation.
    Une expression de type Variant est numérique et l'autre est une chaîne. Addition.



    Dans le cas d'additions simples avec des expressions ne contenant que des types de données numériques, le type de données de l'argument result correspond généralement à celui de l'expression la plus précise. Les types de données numériques sont classés dans l'ordre de précision croissant suivant : Byte, Integer, Long, Single, Double, Currency et Decimal. Le tableau suivant détaille les exceptions à cette règle :

    Condition Type de l'argument result
    Addition de types Single et Long Type Double.
    L'argument result est un variant de type Long, Single ou Date excédant la plage de valeurs acceptées. Conversion en variant de type Double.
    L'argument result est un variant de type Byte excédant la plage de valeurs acceptées. Conversion en variant de type Integer.
    L'argument resultest un variant de type Integer excédant la plage de valeurs acceptées. Conversion en variant de type Long.
    Ajout d'une valeur de type Date à tout autre type de données. Type Date.



    Si l'une des deux expressions a la valeur Null, l'argument result est Null. Si les deux expressions sont Empty, l'argument resultest de type Integer. Cependant, si une seule expression est Empty, l'autre expression est renvoyée sans modification en argument result.

    Note L'ordre de précision de l'addition et de la soustraction diffère de celui de la multiplication.
    cordialement,

    Didier

Discussions similaires

  1. [Dates] Problème de date : jours ouvrés notamment
    Par rob2-9 dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2006, 13h46
  2. différence durée entre date jour/date champ
    Par debdev dans le forum Access
    Réponses: 9
    Dernier message: 30/11/2005, 16h55
  3. [Dates] Jour Mois anné, heure minute et seconde...
    Par SangKou dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2005, 08h34
  4. Recordset et Date : Types incompatibles !
    Par priest69 dans le forum Access
    Réponses: 5
    Dernier message: 08/11/2005, 10h38
  5. date - > jour
    Par coucoucmoi dans le forum SQL
    Réponses: 7
    Dernier message: 26/03/2004, 12h08

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