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 :

Récupérer le nombre de fois ou un caractère apparait [AC-2003]


Sujet :

VBA Access

  1. #1
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut Récupérer le nombre de fois ou un caractère apparait
    Bonjour,

    Je viens de recevoir une base access dont une des tables possède un champs de type mémo.

    les lignes comportent uniquement des 0, des 1 et des 2 sur 298 caractéres.

    Il faudrait que je puisse récupérer pour chaque ligne de la table le nombre de 1 et de 2.

    Tbl_Client
    Id => Champs auto
    Nom => Type Texte
    Comment => Type mémo

    Ce qui donnerait :

    Id Nom Comment
    1 Atchoum 7
    2 Batman 3
    ...
    Si vous aviez des pistes

    Merci


  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    A part utiliser un recordset, je ne vois pas de solution.

    A partir du recordset, tu fais une boucle du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    .....
    do while not MonRecordset.EOF
       For i = 1 to Len(MonRecordset("ChampMemo"))
          if Mid(MonRecordset("ChampMemo"), i, 1) = "1" then
             Nbr1 = Nbr1 + 1
          else if Mid(MonRecordset("ChampMemo"), i, 1) = "2" then
             Nbr2 = Nbr2 + 1
          end if
       Next
       MonRecordset.MoveNext
    Loop

  3. #3
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Merci, je vais essayé dans la journée si j'ai le temps et je re....


  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    salut,
    j'utilise une fonction un peu plus rapide à mon avis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function NbOc(Chaine As String, Ch As String, Optional RC As Boolean = False) As Long
            If RC Then
               NbOc = (Len(Chaine) - Len(Replace(Chaine, Ch, "", , , 0))) / Len(Ch)
            Else
               NbOc = (Len(Chaine) - Len(Replace(Chaine, Ch, "", , , 1))) / Len(Ch)
            End If
    End Function

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    salut tout le monde,
    j'ai trouvé ça, si j'ai bien vu :
    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
    Function CalculOccurence()
    chaine = "00001110022200220011112011122000022010000"
    Caractere1 = "1"
    Caractere2 = "2"
    Dpos = 1
    While Dpos <= Len(chaine) And Caractere1 <> "" And InStr(Dpos, chaine, Caractere1) <> 0
     
      Dpos = InStr(Dpos, chaine, Caractere1) + 1
            Total = Total + 1
        Wend
        Dpos = 1
        While Dpos <= Len(chaine) And Caractere2 <> "" And InStr(Dpos, chaine, Caractere2) <> 0
     
          Dpos = InStr(Dpos, chaine, Caractere2) + 1
             Total = Total + 1
        Wend
     
    End Function
    où :
    s'il y a que des 0 à enlever.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function calcOc()
    chaine = "00001110022200220011112011122000022010000"
    Caractere = "0"
    Dpos = 1
    While Dpos <= Len(chaine) And Caractere <> "" And InStr(Dpos, chaine, Caractere) <> 0
     
      Dpos = InStr(Dpos, chaine, Caractere) + 1
            Total = Total + 1
        Wend
    Nombre1et2 = Len(chaine) - Total
     
     
    End Function
    si ça peut faire,
    à+

  6. #6
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Houlla , bonjour tout le monde,

    jpcheck Je testerai ta fonction dès que je pourrais....

    LE VIEUX, je dois boucler sur les lignes de la table mais merci

    pc75, impeccable.

    Donc le code entier donne :

    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
    Private Sub Commande0_Click()
    Dim rst As DAO.Recordset
    Dim Odb As DAO.Database
    Dim intfic As Integer
    Dim i As Integer
    Dim Nbr1 As Long
     
    Set Odb = CurrentDb
    Set rst = Odb.OpenRecordset("SELECT Champs1, Champs2, Champs3 FROM Table1")
     
    Nbr1 = 0
     
    'Ouverture du fichier texte ou seront insérés les données
    intfic = FreeFile
    Open "C:\Documents and Settings\...Test.txt" For Append As intfic
     
    'Ecriture de l'en-tête
    Print #intfic, "Champs1", "$", "Champs2", "$", "Champs3"
     
    'Parcours du recordset
    Do While Not rst.EOF
       For i = 1 To Len(rst("Champs3"))
          If Mid(rst("Champs3"), i, 1) = "1" Then
             Nbr1 = Nbr1 + 1
             ElseIf Mid(rst("Champs3"), i, 1) = "2" Then
             Nbr1 = Nbr1 + 1
          End If
       Next
     
        'Inscription des lignes
        Print #intfic, rst.Fields("Champs1"), "$", rst.Fields("Champs2"), "$", Nbr1
     
        Nbr1 = 0
     
       rst.MoveNext
     
    Loop
    'Fermeture du fichier
    Close intfic
     
    Nbr1 = 0
    Set rst = Nothing
    DoCmd.Close
    End Sub
    Voilà...

    Merci à tous pour votre participation

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

Discussions similaires

  1. Récupérer les nombres d'une chaine de caractères ?
    Par supman33 dans le forum Débuter
    Réponses: 5
    Dernier message: 21/06/2012, 16h55
  2. [XL-2003] compter le nombre de fois qu'un mot apparait
    Par isodoro dans le forum Excel
    Réponses: 3
    Dernier message: 05/04/2009, 08h24
  3. Réponses: 10
    Dernier message: 06/11/2008, 14h45
  4. Réponses: 4
    Dernier message: 06/12/2007, 16h46
  5. Récupérer un nombre dans une chaîne de caractères
    Par yougoudai dans le forum Général Python
    Réponses: 9
    Dernier message: 23/09/2007, 21h01

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