Recupération de variables [Résolu]

Signaler
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010
-
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010
-
Slt, je veux recupérer la variable var(k).J'ai mis en rouge ou je veux l'affecter.Pouvez-vous m'aider?

 Me.Dat_financeurs.DatabaseName = Bdd
With Me.Dat_financeurs.Recordset
Dim var(1 To 20)
For k = 1 To 20
var(k) = ""
NextSet Me.Dat_financeurs.Recordset Db.OpenRecordset("SELECT Financeur.[Nom Financeur] From Financeur Where (((Financeur.[Ref reseau])" & glob_sres & ")) ORDER BY Financeur.[codeFinanceur]")
Set rs3 = Me.Dat_financeurs.Recordset
rs3.MoveFirst
k = 1

    Do Until rs3.EOF
            var(k) = rs3![Nom Financeur]
            rs3.MoveNext
            k = k + 1
 sql_glob_rs = "SELECT [Financeurs_OP].[code ot]& '-' & [Financeurs_OP].[libellé] AS Macrotâches, Financeurs_OP.Budget,Financeurs_OP.Fin1 AS [toto " & var(k) & "],((Financeurs_OP.Fin1)*100/Financeurs_OP.Budget) as [Part fin1 en %], Financeurs_OP.Fin2,(Financeurs_OP.Fin1+Financeurs_OP.Fin2)as [Total Montant],(Financeurs_OP.Budget)-(Financeurs_OP.Fin1+Financeurs_OP.Fin2)as [Reste Budget]"
sql_glob_rs = sql_glob_rs & " From Financeurs_OP INNER JOIN Financeur ON Financeur.[Ref reseau]=Financeurs_OP.[Code Sres] WHERE (((Financeurs_OP.[Code Sres])=" & glob_sres & "))"
Me.Dat_financeurs.RecordSource = sql_glob_rs

    Loop
End With

Me.Dat_financeurs.Refresh
Me.Financeurs.MaxRows = Me.Dat_financeurs.Recordset.RecordCount

25 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
nettoyé, ton code actuel (erronné) est :

Me.Dat_financeurs.DatabaseName = Bdd
With Db.OpenRecordset("SELECT [Nom Financeur],[codeFinanceur] " & _
"FROM [Financeur] " & _
"WHERE ([Ref reseau]=" & glob_sres & ") " & _
"ORDER BY [codeFinanceur] ")
Do Until .EOF
Me.Dat_financeurs.RecordSource= "SELECT [Financeurs_OP].[code ot]& '-' & [Financeurs_OP].[libellé] AS Macrotâches, " & _
"[Financeurs_OP].[Budget], " & _
"[Financeurs_OP].[Fin1] AS [toto " & .Fields(0) & "], " & _
"(([Financeurs_OP].[Fin1])*100/[Financeurs_OP].[Budget]) AS [Part fin1 en %], " & _
"[Financeurs_OP].[Fin2], " & _
"([Financeurs_OP].[Fin1]+[Financeurs_OP].[Fin2]) AS [Total Montant], " & _
"([Financeurs_OP].[Budget])-([Financeurs_OP].[Fin1]+[Financeurs_OP].[Fin2]) As [Reste Budget] "
"FROM [Financeurs_OP] INNER JOIN [Financeur] " & _
"ON [Financeur].[Ref reseau]=Financeurs_OP.[Code Sres] " & _
"WHERE ((([Financeurs_OP].[Code Sres])=" & glob_sres & "))"
.MoveNext
Loop
End With

Me.Dat_financeurs.Refresh
Me.Financeurs.MaxRows = Me.Dat_financeurs.Recordset.RecordCount
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
si tu veux nommer
Fin1 "toto Albert"
et
Fin2 "essai Jean"


ou Albert et Jean son le nom des deux premiers financeurs


Me.Dat_financeurs.DatabaseName = Bdd
With Db.OpenRecordset("SELECT [Nom Financeur],[codeFinanceur] " & _
"FROM [Financeur] " & _
"WHERE ([Ref reseau]=" & glob_sres & ") " & _
"ORDER BY [codeFinanceur] ")
Dim tableau(1 To 20)
ReDim Preserve tableau(1 To .RecordCount)

Do Until .EOF
sNom1 = .Fields("Nom Financeur")
.MoveNext
sNom2 = .Fields("Nom Financeur")

Me.Dat_financeurs.RecordSource = "SELECT [Financeurs_OP].[code ot]& '-' & [Financeurs_OP].[libellé] AS Macrotâches, " & _
"[Financeurs_OP].[Budget], " & _
"[Financeurs_OP].[Fin1] AS [toto " & sNom1& "], " & _
"(([Financeurs_OP].[Fin1])*100/[Financeurs_OP].[Budget]) AS [Part fin1 en %], " & _
"[Financeurs_OP].[Fin2] AS [essai " & sNom2 & "], " & _
"([Financeurs_OP].[Fin1]+[Financeurs_OP].[Fin2]) AS [Total Montant], " & _
"([Financeurs_OP].[Budget])-([Financeurs_OP].[Fin1]+[Financeurs_OP].[Fin2]) As [Reste Budget] " & _
"FROM [Financeurs_OP] INNER JOIN [Financeur] " & _
"ON [Financeur].[Ref reseau]=Financeurs_OP.[Code Sres] " & _
"WHERE ((([Financeurs_OP].[Code Sres])=" & glob_sres & "))"
.MoveNext
Loop
End With

Me.Dat_financeurs.Refresh
Me.Financeurs.MaxRows = Me.Dat_financeurs.Recordset.RecordCount

---------------------


Après, je vais retenter une question que tu évites a chaque fois:

Pourquoi ne remplis tu pas ta grille par toi même, en remplissant chaque case par toi même.
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Renfield?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
tu fais ton k=k+1 avant de te servir de k en lecture, comme indice du tableau var

a voir si l'utilisation d'un tableau est justifiée....

un truc qui me chifonne, également, c'est que tu modifies ton recordset Me.Dat_financeurs.RecordSource pour chaque 'Financeur' , mais cela ne cumule pas les données...
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
C'est pas RenField (déçu ?)

Sur le principe :
Tu fais une requète, puis tu veux utiliser les résultats de cette requète pour en créer une autre. Soit.
Mais une fois que tu as préparé ta nouvelle requète, il faudrait l'exécuter, sinon, elle sera écrasée lors du LOOP suivant !

Ta syntaxe SQL est bizarre.
Comme on n'est pas des profs, mets au propre avant de nous le présenter, on n'est pas très fort en déchiffrage.

Le symbole & ne peut pas être utilisé dans une syntace SQL : Tu as oublié de ressortir de VB ? Que veux-tu faire avec ton symbole '-' en plein milieu ?

Pour une question de lisibilité, utile le symbole _ pour couper une ligne de programme.
Exemple :
sql_glob_rs = _
   "SELECT Toto " & _
   "  From maTable & _
   " Where Toto = 'ddove53'"
C'est beaucoup plus facile à lire ET on voit tout de suite les erreurs

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
je crois que tu tentes de faire

... | ..... | toto Jean | toto Jack | toto Fred | cumul
-----------------------------------------
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Pour répondre à jack, non je suis pas déçu (lol) et le symbole '-' permet de mettre un "tiré" entre les mots.
Renfield tu as tout compri c'est ça que j'essaie de faire, mais je n'y arrive pas:
..   |   ..... | toto Jean  |  toto Jack  | toto Fred | cumul
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

excuz renfield on a posté en mm tps.Je vais essayé ce que tu me donnes.
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Les gars, vous etes les meilleurs.Encore merci Renfield et Jack.
Merci de ta patiente Renfield.
ça fait des jours que je cherche.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
te faut UNE seule requete....
là, t'as une boucle qui ecrase les valeurs les unes après les autres.

plus simple de remplir la grille toi même que de faire ton Bind
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

encore un petit détail:
 "[Financeurs_OP].[Fin1] AS [toto " & .Fields(0) & "], " & _ 'là j'ai ma première donnée du champ
                                           
   "[Financeurs_OP].[Fin2] AS [essai " & .Fields(0) & "], " & _'là j'ai toujours ma première donnée du champ qui est concaténée alors que je veux la deuxième donnée du champ.
??
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
pardon ?
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

la 1ère ligne de code recupère bien la 1ère donnée du champ.
Au niveau de la  2eme ligne de code, je veux recupérer la 2ème donnée du champ au lieu de la 1ère.
Tu as compris ce que je veux dire?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
tu est fort pour te paraphraser ^^
de quelle "première donnée" et "deuxièeme donnée" parles-tu

de quel champ ?
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Si tu regarde le code plus haut,
je veux recupérer la 1ère donnée du champ [Non Financeur], ça c'est fait avec le code suivant:
 "[Financeurs_OP].[Fin1] AS [toto " & .Fields(0) & "], " & _

aprés je veux recupérer la deuxième donnée du meme champ.
Tu vois ce que je veux dire?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
tu n'emploie pas les bon terme, je ne comprend pas ce que tu cherches a faire.
ta requete ne convient pas, de toute facon. je ne l'ai pas corrigée, je l'ai simplifié visuellement.

pourquoi ne remplis tu pas directement la grille, ce serait plus simple, non ?
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Si je reprends ce que j'avais dit au début, c'est var(k) que je veux mettre dans
 [toto " & .....& "]
pour que la valeur dans le champ  [Nom Financeur] change selon la valeur de k.

With Me.Dat_financeurs.Recordset
Dim var(1 To 20)
For k = 1 To 20
var(k) = ""
NextSet Me.Dat_financeurs.Recordset Db.OpenRecordset("SELECT Financeur.[Nom Financeur] From Financeur Where (((Financeur.[Ref reseau])" & glob_sres & ")) ORDER BY Financeur.[codeFinanceur]")
Set rs3 = Me.Dat_financeurs.Recordset
rs3.MoveFirst
k = 1

    Do Until rs3.EOF
            var(k) = rs3![Nom Financeur]
            rs3.MoveNext
            k = k + 1
           
Me.Dat_financeurs.Refresh
Me.Financeurs.MaxRows = Me.Dat_financeurs.Recordset.RecordCount
Me.Dat_financeurs.Refresh

With Db.OpenRecordset("SELECT [Nom Financeur],[codeFinanceur] " & _
                      "FROM [Financeur] " & _
                      "WHERE ([Ref reseau]=" & glob_sres & ") " & _
                     ORDER BY [codeFinanceur] ")
                
   'Do Until .EOF

       Me.Dat_financeurs.RecordSource = "SELECT [Financeurs_OP].[code ot]& '-' & [Financeurs_OP].[libellé] AS Macrotâches, " & _
                                          "[Financeurs_OP].[Budget], " & _
                          "[Financeurs_OP].[Fin1] AS [toto " & .Fields(0) & "], " & _   "(([Financeurs_OP].[Fin1])*100/[Financeurs_OP].[Budget]) AS [Part fin1 en %], " & _
                                  "[Financeurs_OP].[Fin2] AS [essai " & .Fields(0) & "], " & _
       "([Financeurs_OP].[Fin1]+[Financeurs_OP].[Fin2]) AS [Total Montant], " & _                               "([Financeurs_OP].[Budget])-([Financeurs_OP].[Fin1]+[Financeurs_OP].[Fin2]) As [Reste Budget] " & _
                          "FROM [Financeurs_OP] INNER JOIN [Financeur] " & _
                           "ON [Financeur].[Ref reseau]=Financeurs_OP.[Code Sres] " & _
       "WHERE ((([Financeurs_OP].[Code Sres])=" & glob_sres & "))"
       .MoveNext
    Loop
End With

''Me.Dat_financeurs.Refresh
''Me.Financeurs.MaxRows = Me.Dat_financeurs.Recordset.RecordCount
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
le nom du deuxieme representant ?
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

c'est ça l'idée: recupération de la 1ère valeur  de [Nom Financeur] qui est à la 1ère position et l'affecte à Fin1, recupération de la  2eme valeur de [Nom Financeur] qui est à la 2eme position et l'affecte à Fin1.J'espère que je suis clair.

Me.Dat_financeurs.DatabaseName = Bdd
With Db.OpenRecordset("SELECT [Nom Financeur],[codeFinanceur] " & _
                      "FROM [Financeur] " & _
                      "WHERE ([Ref reseau]=" & glob_sres & ") " & _
                      "ORDER BY [codeFinanceur] ")
                 Dim tableau(1 To 20)
              ReDim Preserve tableau(1 To .RecordCount)

    Do Until .EOF
        tableau(.AbsolutePosition) = .Fields("Nom Financeur")
        .MoveNext
        Me.Dat_financeurs.RecordSource = "SELECT [Financeurs_OP].[code ot]& '-' & [Financeurs_OP].[libellé] AS Macrotâches, " & _
                                           "[Financeurs_OP].[Budget], " & _
                                            "[Financeurs_OP].[Fin1] AS [toto " & .AbsolutePosition & "], " & _
                                            "(([Financeurs_OP].[Fin1])*100/[Financeurs_OP].[Budget]) AS [Part fin1 en %], " & _
                                            "[Financeurs_OP].[Fin2] AS [essai " & .AbsolutePosition & "], " & _
                                            "([Financeurs_OP].[Fin1]+[Financeurs_OP].[Fin2]) AS [Total Montant], " & _
                                            "([Financeurs_OP].[Budget])-([Financeurs_OP].[Fin1]+[Financeurs_OP].[Fin2]) As [Reste Budget] " & _
                                            "FROM [Financeurs_OP] INNER JOIN [Financeur] " & _
                                            "ON [Financeur].[Ref reseau]=Financeurs_OP.[Code Sres] " & _
                                            "WHERE ((([Financeurs_OP].[Code Sres])=" & glob_sres & "))"
        .MoveNext
    Loop
End With

Me.Dat_financeurs.Refresh
Me.Financeurs.MaxRows = Me.Dat_financeurs.Recordset.RecordCount
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

sisi, ce que je faits la c'est juste l'affichage au niveau de mon spread.Aprés je vais insérer des données dans mes tables à partir de mon vaspread.