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

VBA Access Discussion :

Déclarer une constante VbCrLf autrement


Sujet :

VBA Access

  1. #1
    Invité
    Invité(e)
    Par défaut Déclarer une constante VbCrLf autrement
    Bonjour

    Comme vous le savez tous, la constante vbCrLf correspond à Chr(13) & Chr(10)

    Je cherche comment on peut déclarer une autre constante qui aura le même effet que cette combinaison de Chr(), et sans utiliser les constantes VB , pour l'inclure dans une chaine de texte, comme la constante vb du même nom.

    Merci

    Philippe
    Dernière modification par Invité ; 19/01/2009 à 11h40.

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Par défaut
    Tu peux créer tes propres constantes je crois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const TonSeparateurPerso As String = Chr(1) & chr(2)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    J'ai déjà testé, mais Chr() est une fonction qui renvoie une valeur, on ne peut donc pas l'utiliser lors de la déclaration d'une constante.

    Cela aurait été trop simple.

    Philippe

  4. #4
    Membre chevronné Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Par défaut
    Bonjour,

    Peut être en passant par un byte. Un caractère est un octet ayant une certaine valeur (ASCII) pour un octet donné on a la valeur du CR et pour un autre octet le LN. (le 13eme et le 10eme dans le tableau) Je pense qu'on peut récupérer assez facilement les valeurs de la table ASCII apres il suffirait de déclarer deux byte (ou un tableau de byte) le remplir avec la bonne valeur et le tout sous forme de constante.

    je sais pas si ca ca marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public const CR as byte = 013 ' ce n'est pas la bonne valeur c'est pour illustrer
    public const LF as byte = 010 ' ce n'est pas la bonne valeur c'est pour illustrer
     
    public const CRLN(2) as byte = { CR, LF } 'Notre couple de deux caractères.
    Je pense qu'avec un petit cast ca devrait passer

  5. #5
    Membre chevronné Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Par défaut
    Pour la table ASCII :

    http://www.table-ascii.com/

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    C'est bien essayé, mais cela ne fonctionne pas, car cela renvoie la valeur.

    Philippe

  7. #7
    Membre chevronné Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Par défaut
    C'est surement via un pointeur en hexa mais j'arrive pas a trouver lequel ni le bon

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const Ce As String * 2 = &H13 & &H10

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re

    C'est possible, les autres constantes en VB sont souvent des entiers Longs, là c'est très facile pour faire une déclaration de constante avec un autre nom, mais pour ces Chr(13) et Chr(10) je me triture le cerveau.

    Philippe

  9. #9
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Par défaut
    En tout cas, si tes chr() font partie de cette liste, tu peux les combiner (grace à leur nom de constante) dans une seule constante perso:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    vbCrLf Chr(13) + Chr(10) Combinaison des caractères de retour chariot et de saut de ligne 
    vbCr Chr(13) Caractère de saut de paragraphe 
    vbLf Chr(10) Caractère de saut de ligne 
    vbNewLine Chr(13) + Chr(10)  ou, sur Macintosh, Chr(13) Caractère de saut de ligne spécifique à la plate-forme ;choix en fonction de la plate-forme 
    vbNullChar Chr(0) Caractère ayant la valeur 0 
    vbNullString Chaîne ayant la valeur 0 Différent d'une chaîne de longueur nulle ("") ; permet l'appel de procédures externes 
    vbObjectError -2147221504 Les numéros d'erreur définis par l'utilisateur doivent être supérieurs à cette valeur. Par exemple :
    Err.Raise Number = vbObjectError + 1000 
    vbTab Chr(9) Caractère de tabulation 
    vbBack Chr(8) Caractère de retour arrière 
    vbFormFeed Chr(12) Inutilisé sous Microsoft Windows ou sur Macintosh 
    vbVerticalTab Chr(11) Inutilisé sous Microsoft Windows ou sur Macintosh
    genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const TonConst As String = vbCr & vbLf

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par willcartley Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const TonConst As String = vbCr & vbLf
    Non, car tu utilises des constantes Vb, hors je ne veux aucune constante VB.

    Ne cherchez pas à savoir pourquoi, c'est comme cela, je ne sais pas si c'est possible, mais je veux redéfinir les constantes vb avec un autre nom.

    Philippe

  11. #11
    Membre chevronné Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Par défaut
    J'ai remarqué que les codes clavier sont bloqués en desous du 32 (non inclus), c'est a dire que si l'on tape dans la fenetre du code Alt + 48 ca correspond au caractère 0 ca ca marche mais pour les caractères en desous de 31 le vrai caractère (qui devrait ressembler à un carré vide) est remplacé systématiquement par un point d'interrogation.

    Je me demande si access n'a pas été concus pour nous empêcher d'accèder aux caractères spéciaux.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je sens que cela va pas le faire mon truc

    Comme je l'ai déjà écrit, lorsque l'on remplace une variable de type Long, pas de soucis, mas Chr() renvoi un code ASCII, hors il semble que l'on ne peut le déclarer

    Philippe

  13. #13
    Membre chevronné Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Par défaut
    Héhé ... juste histoire de jetter un peu le flou...

    On peu déclarer une constante de type string contenant du code ASCII
    C'est étrange que l'on ne puisse pas y affecter un caractère spécial (les 30 premiers de la table ASCII)

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tonioyo Voir le message
    Héhé ... juste histoire de jetter un peu le flou...

    On peu déclarer une constante de type string contenant du code ASCII
    C'est étrange que l'on ne puisse pas y affecter un caractère spécial (les 30 premiers de la table ASCII)
    Ce qui m'aiderait beaucoup, car ensuite s'est utilisé comme une chaine, et non comme une constante

  15. #15
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Tu veux cela dans un module ou un module de classe ?
    Peu importe... puisque tu ne peux pas, réfléchissons...
    Une constante, sur le principe, c'est une variable non modifiable dans la suite du programme.
    Pourquoi ne pas créer une propriété en lecture seul (dans le module ou le module de classe... peu importe )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Property Get myCrLf() As String
        myCrLf = Chr(13) & Chr(10)
    End Property
    Après test, ca marche parfaitement bien dans un module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Property Get myCrLf() As String
        myCrLf = Chr(13) & Chr(10)
    End Property
    Function Test()
        MsgBox "première ligne" & myCrLf & "deuxième ligne"
    End Function

  16. #16
    Membre chevronné Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Par défaut
    Très juste, ca rends donc inévitable l'utilisation de la fonction Chr() ou des constantes déjà définies dans Access. Ca serrait interessant de savoir comment la constante vbCrLf est faite (construite / déclarée) dans Access.
    Est-elle elle aussi sous forme de propriété ?

  17. #17
    Invité
    Invité(e)
    Par défaut
    Re

    Salut Maxence.

    Je ne pense pas que cela fonctionne.

    Allez je vais cracher le morceau, c'est pour un module de conversion en Ooo de code VB entre autre le fameux vbCrLf, en fait qui interprète du code VB que l'on colle dans Ooo pour que cela fonctionne sans avoir à y retoucher, par le passage de constantes qui interprète la valeur. Cela ne concerne que du code VB classique et non le VBA des différentes suites.

    Citation Envoyé par Tonioyo Voir le message
    Très juste, ca rends donc inévitable l'utilisation de la fonction Chr() ou des constantes déjà définies dans Access. Ca serrait interessant de savoir comment la constante vbCrLf est faite (construite / déclarée) dans Access.
    Est-elle elle aussi sous forme de propriété ?
    D'où la question, comment est crée cela.

  18. #18
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    je crains fort que la constante n'est pas la chaîne renvoyée, mais tout simplement la valeur (keycode) de la touche.
    La fonction chr(VB....) me parait être ensuite n'être qu'interprêtée par Windows. Elle ne me semble pas être une constante en soi mais provoquer un comportement (en fonction de son utilisation), la constante restant la valeur qu'elle utilise et non sa traduction. Le résultat obtenu étant selon ce que je pense celui d'un "message envoyé", soit par SendMessage, soit par SendInput, un peu comme dans ce petit exemple, avec une textbox Text1 et un bouton de commande commande1, la propriété Multiline de la Textbox étant définie à True.
    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 Type KEYBDINPUT
      wVk As Integer
      wScan As Integer
      dwFlags As Long
      time As Long
      dwExtraInfo As Long
    End Type
    Private Type GENERALINPUT
      dwType As Long
      xi(0 To 23) As Byte
    End Type
    Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
     
    Private Sub Command1_Click()
        Text1.SetFocus
        Text1.Text = "a"
        Text1.SelStart = Len(Text1.Text)
        DoEvents
        envoyer 13
        envoyer 10
        DoEvents
        Text1.Text = Text1.Text & "b"
    End Sub
     
    Private Sub envoyer(bKey As Byte)
        Dim GInput(0 To 1) As GENERALINPUT
        Dim KInput As KEYBDINPUT
        KInput.wVk = bKey
        KInput.dwFlags = 0
        GInput(0).dwType = 1
        CopyMemory GInput(0).xi(0), KInput, Len(KInput)
        KInput.wVk = bKey
        KInput.dwFlags = &H2
        GInput(1).dwType = 1
        CopyMemory bKey, bKey, Len(bKey)
        SendInput 2, GInput(0), Len(GInput(0))
    End Sub
    Mais je ne suis pas dans les secrets de l'équipe de M. Bill et peux donc me tromper, c'est évident.

  19. #19
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    rien compris à ton explication Philippe...
    Désolé

  20. #20
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    Il n'y a pas en VB (à ma connaissance) de caractère d'échappement permettant d'écrire un caractère
    de manière littérale à partir de son code ASCII, contrairement à d'autres langages comme C par exemple, où on écrirait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define MON_CRLF "\x0d\x0a"
    Je pense que c'est pour cette raison, que les constantes vbBack, vbCr, vbCrLf, vbFormFeed, vbLf, ...
    font partie de la dll VBE6.DLL (bibliothèque VBA).
    Comme on peut pas les écrire, on ne peut pas les déclarer en VB.
    Le seul moyen d'en disposer, c'est au travers d'une bibliothèque (créée dans un autre langage ?).

    A+

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Déclarer une constante en global
    Par okoweb dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2013, 16h29
  2. Déclarer une constante avec une valeur HEX 0x00110011
    Par z4k4r14 dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2012, 12h07
  3. [Toutes versions] Déclarer une constante de type personnalisée
    Par leDelb dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/07/2010, 09h39
  4. Comment déclarer une constante hors-objet
    Par jimbolelephan dans le forum C#
    Réponses: 13
    Dernier message: 07/07/2008, 09h00
  5. Peut-on déclarer une constante dans un ActionForm
    Par g_g_30 dans le forum Struts 1
    Réponses: 1
    Dernier message: 10/12/2007, 14h34

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