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 :

petit truc simple a part pour moi (concaténation dans une boucle)


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 34
    Points : 38
    Points
    38
    Par défaut petit truc simple a part pour moi (concaténation dans une boucle)
    J'ai un petit probleme de concaténation dans une boucle

    une exemple

    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
    Dim var1 as string
    Dim var2 as string
    Dim var3 as string
    ...
    Dim varX as string
    
    
    Var1 = "Bruit"
    Var2 = "odeur"
    var3 = "Vue"
    ...
    varX =
    
    for a=1 to X
    
    if ("var" & a)<>"" then ..... end if
    next
    Le probleme c'est que mon "var" & a est égal à "Var1" et non a "Bruit" comme je le voudrais


    merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Points : 72
    Points
    72
    Par défaut
    Essaie d'utiliser eval()

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 34
    Points : 38
    Points
    38
    Par défaut
    Non ca ne marche pas eval()

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 122
    Points : 172
    Points
    172
    Par défaut
    Salutations,

    As-tu vu le joli post tout neuf de loufab :

    http://www.developpez.net/forums/d95...-liste-appels/

    En adaptant un peu tu devrais pouvoir trouver une solution je pense.

    Cordialement,

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 34
    Points : 38
    Points
    38
    Par défaut
    ca correspond toujours pas à ce que je veux, il faut partir du principe que je ne peux pas toucher aux données d'entrées (Var1, Var 2, ....)

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 396
    Points : 19 821
    Points
    19 821
    Billets dans le blog
    66
    Par défaut
    Salut,

    Désolé d'être rabat-joie

    Mais pourquoi n'utilises-tu pas un tableau au lieu de n variables ?

    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim var(1 to X) as string
     
    var(1) = "Bruit"
    var(2) = "odeur"
    var(3) = "Vue"
    ...
    var(X) =
    A+

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 34
    Points : 38
    Points
    38
    Par défaut
    C'est par rapport au contexte réel, la je ne vous avais fait qu'un exemple pour illustrer mon problème :

    Code réel :
    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
    Private Sub cmd_phasederisque_Click()
    Dim stDocName As String
    Dim stLinkCriteria As String
        stDocName = "selectionpictogramme"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
        [Form_selectionpictogramme].txt_type_pictogramme = "Risque"
        [Form_selectionpictogramme].txt_unité = Me.Unité
        a = "SELECT nompictorisque1 * FROM [Unité de travail] WHERE [unité] = '" & Me.Unité.Value & "'"
        a = "SELECT nompictorisque2 * FROM [Unité de travail] WHERE [unité] = '" & Me.Unité.Value & "'"
        a = "SELECT nompictorisque3 * FROM [Unité de travail] WHERE [unité] = '" & Me.Unité.Value & "'"
        a = "SELECT nompictorisque4 * FROM [Unité de travail] WHERE [unité] = '" & Me.Unité.Value & "'"
        a = "SELECT nompictorisque5 * FROM [Unité de travail] WHERE [unité] = '" & Me.Unité.Value & "'"
        a = "SELECT nompictorisque6 * FROM [Unité de travail] WHERE [unité] = '" & Me.Unité.Value & "'"
        a = "SELECT nompictorisque7 * FROM [Unité de travail] WHERE [unité] = '" & Me.Unité.Value & "'"
        a = "SELECT nompictorisque8 * FROM [Unité de travail] WHERE [unité] = '" & Me.Unité.Value & "'"

    A ce moment la les variables nompicorisque1 à 8 on une valeur et je veut exploiter leur valeur dans une boucle comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    b= 1
    For a = 1 to 8
        if isnull("nompictorisque" & a) <> 0 then
            me("choix" & b).value = "nompictorisque" & a
            b = b+1
        end if
    next
    
    end sub

    Le code que vous vous voyer en rouge ne fonctionnement pas puisque la valeur de "nompictorisque" & a est "nompictorisque1","nompictorisque2" ..... et non la valeur réel trouver dans mon select

  8. #8
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 16
    Points : 35
    Points
    35
    Par défaut
    Bonjour ,

    Si j'ai bien compris ce que tu voulais dire par là ...
    << Le code que vous vous voyer en rouge ne fonctionnement pas puisque la valeur de "nompictorisque" & a est "nompictorisque1","nompictorisque2" ..... et non la valeur réel trouver dans mon select >>

    Voici une proposition de code :
    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
    Private Sub cmd_phasederisque_Click()
    Dim stDocName As String
    Dim stLinkCriteria As String
    Dim MonRecordset as object '*** Pour manipuler les données
    Dim sql_txt as string
     
        stDocName = "selectionpictogramme"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
        [Form_selectionpictogramme].txt_type_pictogramme = "Risque"
        [Form_selectionpictogramme].txt_unité = Me.Unité
     
    b = 1
    For a = 1 to 8
        sql_txt = "SELECT nompictorisque" & a & " * FROM [Unité de travail] WHERE [unité] = '" & Me.Unité.Value & "' ;"
        set MonRecordset = CurrentDB.openrecordset (sql_txt , dbOpenSnapshot)
    	' *** Toujours tester le retour sinon génération d'erreur quand pas d'enregistrement courant
    	if MonRecordset.recordcount > 0 then
    		MonRecordset.Movefirst ' ** histoire d'être sur d'être positionné sur le premier enregistrement du recordset
    		if MonRecordset.fields("nompictorisque" & a) <> "" then
    			me("choix" & b).value = MonRecordset.fields("nompictorisque" & a)
    			b = b + 1
    		end if	
    	End if
    next
     
    end sub
    En espérant que cela te fasse avancer.

    Une petite remarque générale en passant , les tests de valeur suivants ne retourne pas toujours la même chose et les résultats peuvent générer des "effets de bord" :

    mavar <> "" .... isnull(mavar) = false ... mavar = 0 ...

    Personnellement , j'utilise :
    mavar <> "" --> Pour vérifier qu'une chaine de caractère n'est pas vide
    Isnull(mavar) --> Très rarement , pour vérifier que le code a été traité ou que quelque chose répond au bout (essentiellement pour les objets).
    mavar = 0 --> Uniquement pour les valeurs numériques.

    Bizarrement le test le plus fiable et mon préféré est : mavar <> ""

    Ceci est un point qui m'a titillé pas mal de fois.
    Si quelqu'un a une meilleure approche qu'il n'hésite pas à me la donner.

    A+
    Olivier

Discussions similaires

  1. [Débutant] Concaténer dans une boucle if
    Par preto91 dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/03/2014, 15h32
  2. [XL-2007] Supprimer doublon et concaténer dans une boucle
    Par LaJulie dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/04/2013, 15h46
  3. Concaténation dans une boucle
    Par george33 dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/08/2010, 12h40
  4. Réponses: 5
    Dernier message: 25/08/2008, 14h28
  5. Syntaxe pour un update dans une boucle ..
    Par fmoriet dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 15/11/2007, 09h55

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