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 :

Est-il possible de 'généraliser' un case ?


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut Est-il possible de 'généraliser' un case ?
    Bonjour,
    Je voudrais exécuter

    Ceci génère une erreur de syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub tst(A As String)
    Select Case A
    Case like "*bla*"   'provoque l'erreur de syntaxe
    Debug.Print "OK"
    End Select
    End Sub
    Merci déjà pour l'aide.

  2. #2
    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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    bonjour,
    à la place du Like, j'aurais plutôt utilisé Instr()
    mais tout dépend de ce que tu veux faire comme autre test sur ton A...
    tu peux nous en dire un peu plus spt ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

    A priori l'opérateur Like ne fonctionne pas avec le Select Case.

    Essayes une variante pour voir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub tst(A As String)
        Select Case "*" & A & "*"
            Case Is = "*bla*"
            Debug.Print "OK"
        End Select
    End Sub
    Starec

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Merci JPCheck et Starec
    j'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    call tst2("M2C100000")
    Public Sub tst2(A As String)
        Select Case A
         Case InStr(A, "M2C") <> 0
         Debug.Print "OK"
        End Select
    End Sub
    Plus d'erreur de syntaxe, mais le résultat n'est pas correct.
    Pourtant avec une exécution pas à pas, je peux constater que
    InStr(A, "M2C") est égal à 1.
    Je ne comprends pas pourquoi l'instruction
    est sautée.

  5. #5
    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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    est-ce que la méthode est la plus adaptée aussi ?
    je veux dire par là, tu n'as pas répondu à ma question sur l'utilisation de la boucle select case.
    lorsque tu utilises select case il faut que la strucute soit comme ceci en principe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select Case MaFonctionSijeveux(X)
    Case MafonctionSijeVeux(X) = "1"
    ... 'End
    c'est un peu comme si tu faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Test Selon Tomate
    cas Carotte = cuite
    afficher "c'est la loose"
    fin test
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Voici plus de détails (trop peut-être ?)

    Dans mon logiciel comptable, j’ai plusieurs tables (Caisse, Banque, Achats, ...) qui contiennent des champs dont le nom me sert à déclencher des processus.
    Par exemple : (iii varie en général de 1 à 25, nnnnnn = un N° de compte)
    Si le nom est MC3iii, il faut créer un mouvement comptable
    -dans le compte indiqué dans le champ : NC3iii
    -du montant créditeur contenu dans le champ : MC3iii
    -avec le libellé contenu dans le champ : LC3iii
    D'autres processus si MD3iii, MC2iii,MD2iii,MC1iiinnnnnn,Visai ....
    Voici le code actuel
    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
    Public Function CréerLesMvts(LaTable As String)
    Dim Q As QueryDef
    Dim TypeMvts As String
    Dim Rec As DAO.Recordset
    Dim Fld As Field
    Dim Arg1, Arg2, Arg3, Arg5, Arg6 As String
    Dim Arg4 As Long
    Dim Sql As String
    DoCmd.SetWarnings False
    'Vidanger les mvts existants
    TypeMvts = Mid(LaTable, 9, Len(LaTable) - 8)
    'vidange du fichier mvt(i)
    Sql = "DELETE Mvts" & TypeMvts & ".id FROM Mvts" & TypeMvts & ";"
    Set Q = CurrentDb.CreateQueryDef("temp", Sql)
    DoCmd.OpenQuery "temp"
    DoCmd.DeleteObject acQuery, "temp"
    Set Q = Nothing
    'LireLaTable en séquence
    Set Rec = CurrentDb.OpenRecordset(LaTable)
    Do Until Rec.EOF
        'détecter les champs déclencheurs de mouvements et créer le Mvt
         For Each Fld In Rec.Fields
           If Fld = 0 Then GoTo ChampSuivant
            Arg1 = Mid(LaTable, 9, 3)                                    'origine
            Arg2 = Rec("N°extrait")                                      'N°Extrait
            Arg3 = Rec("Date")                                           'Date
         Select Case Fld.Name
                                   '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
          Case "M3D001" To "M3D999" 'je voudrais exprimer comme M3D*
                                   '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            Arg4 = Rec("N" & Right(Fld.Name, Len(Fld.Name) - 1))         'N°Cpte
            Arg5 = ScanSubsti(CStr(Fld.Value * -1), ",", ".")            'Montant avec un .
            Arg6 = Nz(Rec("L" & Right(Fld.Name, Len(Fld.Name) - 1)), " ") 'Libellé
            Call CréerMvts_écrire(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
          Case "M3C001" To "M3C999"
            Arg4 = Rec("N" & Right(Fld.Name, Len(Fld.Name) - 1))         'N°Cpte
            Arg5 = ScanSubsti(CStr(Fld.Value), ",", ".")                 'Montant avec un .
            Arg6 = Nz(Rec("L" & Right(Fld.Name, Len(Fld.Name) - 1)), " ") 'Libellé
            Call CréerMvts_écrire(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
          Case "M2D001000000" To "M2D999999999"
            Arg4 = Mid(Fld.Name, 7, 6)                                   'N°Cpte
            Arg5 = ScanSubsti(CStr(Fld.Value * -1), ",", ".")            'Montant avec un .
            Arg6 = Nz(Rec("L" & Right(Fld.Name, Len(Fld.Name) - 1)), " ") 'Libellé
            Call CréerMvts_écrire(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
          Case "M2C001000000" To "M2C999999999"
            Arg4 = Mid(Fld.Name, 7, 6)                                   'N°Cpte
            Arg5 = ScanSubsti(CStr(Fld.Value), ",", ".")             'Montant avec un .
            Arg6 = Nz(Rec("L" & Right(Fld.Name, Len(Fld.Name) - 1)), " ") 'Libellé
            Call CréerMvts_écrire(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
          Case "M1D001000000" To "M1D999999999"
            Arg4 = Mid(Fld.Name, 7, 6)                                   'N°Cpte
            Arg5 = ScanSubsti(CStr(Fld.Value * -1), ",", ".")            'Montant avec un .
            Arg6 = " "                                                   'Libellé
            Call CréerMvts_écrire(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
          Case "M1C001000000" To "M1C999999999"
            Arg4 = Mid(Fld.Name, 7, 6)                                   'N°Cpte
            Arg5 = ScanSubsti(CStr(Fld.Value), ",", ".")             'Montant avec un .
            Arg6 = " "                                                   'Libellé
            Call CréerMvts_écrire(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
          Case "Visa1" To "Visa9"
            Arg4 = "490021"                                          'N°Cpte
            Arg5 = ScanSubsti(CStr(Fld.Value), ",", ".")             'Montant avec un .
            Arg6 = "Visa"                                                   'Libellé
            Call CréerMvts_écrire(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
            Arg4 = "580000"                                          'N°Cpte
            Arg5 = ScanSubsti(CStr(Fld.Value * -1), ",", ".")           'Montant avec un .
            Call CréerMvts_écrire(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
          End Select
    ChampSuivant:
         Next Fld
    Rec.MoveNext
    Loop
    'créer les contreparties
    Call CréerMvts_contreparties(LaTable)
    DoCmd.SetWarnings True
    End Function
    Est-ce une hérésie d'utiliser un 'Select case' dans cette circonstance ?

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

Discussions similaires

  1. [XL-2010] Est-il possible de sélectionner les cases à côcher d'un TCD en vba?
    Par kythi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/03/2013, 18h40
  2. Réponses: 2
    Dernier message: 20/03/2012, 16h43
  3. CASE WHERE IN est-ce possible ?
    Par SpaceFrog dans le forum Requêtes
    Réponses: 10
    Dernier message: 27/09/2011, 13h40
  4. Réponses: 3
    Dernier message: 08/04/2008, 16h07
  5. Select case est-il possible dans ce cas ?
    Par rangernoir dans le forum Access
    Réponses: 10
    Dernier message: 30/09/2005, 16h06

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