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 :

[VBA] remplacer null par une chaine de caractère


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut [VBA] remplacer null par une chaine de caractère
    Mon souci : je dois générer un fichier texte au format Isabel, donc de longueur fixe. Dans la DB, le champ "prénom" n'est pas toujours rempli (car non requis pour des sociétés). Mais alors la requête plante quand elle tombe sur un champ vide.

    data = data & texte_taille_fixe(payements.Fields("TIE_NOM"), 24) & " " & texte_taille_fixe(payements.Fields("TIE_PRENOM"), 1) & "2"

    Ma question : comment faire pour que quand il tombe sur un champ prénom vide il remplace cette valeur vide par un espace ou par une lettre quelconque?

    Merci d'avance.

  2. #2
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    La fonction Nz() te sera d'une grande utilité je pense

    En espérant t'aider.
    J'aime les gâteaux.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    pour les exports on ne travaille pas sur la table mais sur une requête

    on fera select format(monchamp) as datececi, nz(monchamp,' ') as prénom,
    left(monlibellélong,30) as libellécourt


    etc etc
    Elle est pas belle la vie ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Ah merci... Pourrais-t me dire comment l'utiliser dans cette fonction???

  5. #5
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Citation Envoyé par Bernard123
    Ah merci... Pourrais-t me dire comment l'utiliser dans cette fonction???
    Random te montre une façon de l'utiliser. Sinon tape Nz dans une module de code puis appuies sur la touche F1, ou alors utilise la fonction rechercher du forum ou encore de la FAQ qui regorgent d'exemples.

    Si jamais tu ne trouves pas ton bonheur dis le, on essaiera de te trouver un message passé qui détaille le sujet.
    J'aime les gâteaux.

  6. #6
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT '' + prenom FROM taTable
    'note : ce sont DEUX COTES et non un guillemet
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut merci
    J'ai un autre souci dans ce VBA. Je précise que je suis néophyte et que j'avais reçu l'aide d'un "coach" pour mettre au point ces lignes il y a déjà plus d'un an.

    Le souci est le suivant : il faut générer un trailer qui comprend la somme des paiements, là c'est ok mais aussi la somme des comptes en banque des divers bénéficiaires.

    Or la banque a qui j'ai envoyé un fichier test me dit que le total des comptes n'est pas exact... Et en effet le total est tronqué. J'a

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut merci
    J'ai un autre souci dans ce VBA. Je précise que je suis néophyte et que j'avais reçu l'aide d'un "coach" pour mettre au point ces lignes il y a déjà plus d'un an.

    Le souci est le suivant : il faut générer un trailer qui comprend la somme des paiements, là c'est ok mais aussi la somme des comptes en banque des divers bénéficiaires.

    Or la banque a qui j'ai envoyé un fichier test me dit que le total des comptes n'est pas exact... Et en effet le total est tronqué. J'ai fait l'essai avec un seul bénéficiaire pour tester.

    On voit clairement que les derniers chiffres sont oubliés...

    0000020040721001200407 000210028287474xxxxxxxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx B xxxxxxxxxxx 2 5
    10001 693728700167000000002410Bleunar M2intérêt sur 3 Obligation(s) convertible(s) 5,25 % 04-3
    200010 0
    90002000100000000241000069372870000000402964823

    Voici l'entièreté du code, pourriez-vous me dire où le bas blesse???

    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
    76
    77
    78
    Private Sub Commande15_Click()
    Dim connexion As New ADODB.Connection
    Dim Emetteur As New ADODB.Recordset
    Dim payements As New ADODB.Recordset
    Dim fso As New FileSystemObject
    Dim export As File
    Dim ts As TextStream
    Dim data As String
    Dim trailer As String
    Dim compteur As Integer
    Dim totalmontants As Long
    Dim totalcomptes As Single
     
    ' Ouvrir le fichier texte
    Set export = fso.GetFile(CurrentProject.Path & "\paiement.txt")
    Set ts = export.OpenAsTextStream(ForWriting)
     
    ' Générer le header
    connexion.Open ConnectionString:=CurrentProject.AccessConnection
    Emetteur.ActiveConnection = connexion
    Emetteur.CursorType = adOpenKeyset
    Emetteur.LockType = adLockOptimistic
    Emetteur.Open "select * from T_EMETTEURS where EME_LIBELLECOURT='" & Me.Emetteur.Value & "'"
    Emetteur.MoveFirst
    Dim header As String
    header = "00000"
    header = header & Format(Date, "ddmmyy")
    header = header & Left(Emetteur.Fields("EME_COMPTEBANCAIRE"), 3)
    header = header & "01"
    header = header & Format(Date, "ddmmyy")
    header = header & " 000"
    header = header & Replace(Emetteur.Fields("EME_COMPTEBANCAIRE"), "-", "")
    header = header & Left(Emetteur.Fields("EME_LIBELLELONG"), 26) & String(26 - Len(Left(Emetteur.Fields("EME_LIBELLELONG"), 26)), " ")
    header = header & Left(Emetteur.Fields("EME_ADRESSE"), 26) & String(26 - Len(Left(Emetteur.Fields("EME_ADRESSE"), 26)), " ")
    header = header & "B 10"
    header = header & "BRUXELLES             "
    header = header & "2          5"
    ts.WriteLine (header)
    Emetteur.Close
    connexion.Close
     
    ' Générer les data
    connexion.Open ConnectionString:=CurrentProject.AccessConnection
    payements.ActiveConnection = connexion
    payements.CursorType = adOpenKeyset
    payements.LockType = adLockOptimistic
    payements.Open "T_PAIEMENTSOBLIG_TEMPO"
    payements.MoveFirst
    compteur = 1
    Do
        data = "1" & Format(compteur, "0000") & "                  "
        data = data & Replace(payements.Fields("TIE_CBANCAIREBEL"), "-", "")
        data = data & Format(payements.Fields("interet") * 100, "000000000000")
        data = data & texte_taille_fixe(payements.Fields("TIE_NOM"), 24) & " " & texte_taille_fixe(payements.Fields("TIE_PRENOM"), 1) & "2"
        data = data & texte_taille_fixe(payements.Fields("communication"), 53)
        data = data & "3" & vbCrLf
        data = data & "2" & Format(compteur, "0000") & "0"
        data = data & String(105, " ") & "0" & String(16, " ")
        ts.WriteLine (data)
    totmontants = totmontants + (payements.Fields("interet") * 100)
    totcomptes = totcomptes + CSng(Replace(payements.Fields("TIE_CBANCAIREBEL"), "-", ""))
     
     
        payements.MoveNext
        compteur = compteur + 1
    Loop While Not payements.EOF
    connexion.Close
     
    ' Générer le trailer
    trailer = "9" & Format((compteur - 1) * 2, "0000")
    trailer = trailer & Format(compteur - 1, "0000")
    trailer = trailer & Format(totmontants, "000000000000")
    trailer = trailer & Format(totcomptes, "000000000000000")
    trailer = trailer & "00402964823"
    trailer = trailer & String(81, " ")
    ts.WriteLine (trailer)
     
    ts.Close

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Je pense avoir trouvé kke chose. J'ai remarqué qu'il y a ceci : Dim totalcomptes As Single et qu'ensuite totalcomptes n'est plus repris dans le reste de la syntaxe mais bien totcomptes.

    J'ai donc remplacé les totcomptes par totalcomptes mais sans succès.

    J'ai ensuite modifié single en Long et Csng par CLng mais ça n'allait pas.

    Par contre si je mets Dim totalcomptes As double et totalcomptes = totalcomptes + Cdbl(Replace(payements.Fields("TIE_CBANCAIREBEL"), "-", ""))

    j'obtiens le résultat que j'espère.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Récupérer la position d'une sheet commencant par une chaine de caractères connue
    Par assiec dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2011, 09h44
  2. Réponses: 4
    Dernier message: 25/08/2011, 08h27
  3. Réponses: 2
    Dernier message: 06/03/2009, 08h32
  4. Réponses: 1
    Dernier message: 06/05/2007, 17h42
  5. Réponses: 3
    Dernier message: 26/07/2006, 14h58

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