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

Access Discussion :

trier de manière croissante 3 champs via module VBA Pb certaines cellules vide dans résultats [AC-2007]


Sujet :

Access

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut trier de manière croissante 3 champs via module VBA Pb certaines cellules vide dans résultats
    Bonjour,

    j'ai une requête Access contenant 3 colonnes avec des descriptifs (du texte avec ou sans balises html), qui peuvent varier en longueur. Je voulais faire un tri pour récupérer le plus grand. j'ai donc fait une fonction VBA que j'appelle dans Access : LongDesc(texte1;texte2;texte3).
    Je précise qu'il n'y a pas de champs NULL dans ces 3 colonnes.

    J'ai opté pour du VBA car il y a d'autres critères que je souhaite ajouter par la suite et je ne voulais pas avoir trop de colonnes dans Access. Et également par souci de lisibilité je trouve le code VBA plus facile à lire après 1 mois sans y avoir touché.

    Mon code vba est ci-dessous. les variables définies par 4096 et 16580 me permettront de contrôler la longueur des champs par la suite mais pour l'instant elles ne servent pas. Je précise que les variables text1;text2 ont l'air de s'afficher correctement dans ma requête Access (j'ai fait des tests). En revanche text3 me retourne du vide à priori lorsque c'est la plus petite valeur des trois descriptifs. Je sens que la solution est toute bête mais pour l'instant je ne comprends pas et j'ai les yeux qui piquent...

    Si d'ailleurs une âme charitable avait une solution pour faire un code plus simple ou plus rapide, je suis preneur également

    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
     
    Public Function LongDesc(prmText1 As String, prmText2 As String, prmText3 As String) As String
       Dim Text1 As String
       Dim Text2 As String
       Dim Text3 As String
       MaxShortDesc = 4096
       MaxLongDesc = 16580
     
    If Len(prmText1) >= Len(prmText2) Then
    Text1 = prmText1
    Text2 = prmText2
    Else
    Text1 = prmText2
    Text2 = prmText1
    End If
     
    If Len(prmText3) >= Len(Text1) Then
    Text3 = Text2
    Text2 = Text1
    Text1 = prmText3
      Else
        If Len(prmText3) >= Len(Text2) Then
        Text3 = Text2
        Text2 = prmText3
        End If
    End If
     
    LongDesc = Text3
     
    End Function

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Via un tri à bulle, pour trois valeurs c'est sortir l'artillerie pour une mouche mais ça a le mérite d'être une approche standard.

    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
    Public Function LongDesc1(prmText1 As String, prmText2 As String, prmText3 As String) As String
    Dim arr(3) As String
    Dim echange As Boolean
    Dim txtChng As String
     
    arr(0) = prmText1
    arr(1) = prmText2
    arr(2) = prmText3
     
    echange = True
     
    While echange
    echange = False
    For i = 0 To 2
        If Len(arr(i)) < Len(arr(i + 1)) Then
           txtChng = arr(i + 1)
           arr(i + 1) = arr(i)
           arr(i) = txtChng
           echange = True
        End If
    Next
    Wend
    LongDesc1 = arr(0)
     
    End Function
    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

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

Discussions similaires

  1. tri croissant sur champs
    Par milielf dans le forum Access
    Réponses: 1
    Dernier message: 02/08/2006, 11h27
  2. Trier sur une valeur de champs et non sur le nom du champs
    Par kamalkam dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/05/2006, 17h41
  3. [ASE][12.0] Erreur via module ASE
    Par Lps dans le forum Sybase
    Réponses: 9
    Dernier message: 07/12/2005, 11h09
  4. Réponses: 1
    Dernier message: 10/11/2005, 22h00
  5. Comment renommer un champ avec Module BD?
    Par technico dans le forum Bases de données
    Réponses: 4
    Dernier message: 27/01/2004, 21h24

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