Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2011, 18h40   #1
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Par défaut Probleme sur un boucle For d'un fichier texte

Bonjour Forum ,
mon problème est le suivant:
je veux parcourir une colonne aprés chaque 30 lignes je fais la moyennes et j'affiche le résultat sur une cellule de ma feuille excel et je continue . Pour cela je fais un boucle pour faire bouger ma cellule dvant contenir le résulta de la moyenne et à ce niveau ya un problème car à la fin rien ne saffiche sur ma feuille excel ;
cette partie du code est la suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
 
    Do While Not (Requete.EOF)
    For j = 1 To 30
        NbEnr = NbEnr + 1 ' On incremente un compteur
        ' supposons que l'on veut faire la moyenne sur la colonne 4 , tous les 30 enregistrements
        total = total + Requete.Fields(3).Value ' on additionne
 
        If NbEnr = 30 Then ' quand le compteur = 30 on affiche la moyenne
            Sheets("New_Business_central").Cells(22, j) = total / NbEnr ' a adapter
            ' on reéinitialise les variables
            NbEnr = 0
            total = 0
        End If
    Next j
        Requete.MoveNext
    Loop
 
End Sub
Cordialement,
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 20h21   #2
Invité régulier
 
Homme
Inscription : décembre 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Côtes d'Armor (Bretagne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 14
Points : 5
Points : 5
Bonjour,
as tu essayé d'afficher dans excel avec ta boucle le contenu du fichier texte au lieu de faire une addition?
ou bien... il faudrait avoir le fichier, sinon impossible de t'aider.

au fait, pourquoi afficher dans la feuille toutes les 30 lignes?
tu affiches ausi les données dans excel?

pour la programmation: un code plus propre "ferait" la même chose
(sauf si des infos sont manquantes)
j et NBEnr font exactement le même comptage:
Code :
1
2
3
4
5
6
7
8
While Not (Requete.EOF)
     total = 0
     For NbEnr = 1 To 30
           total = total + Requete.Fields(3).Value ' on additionne
     Next NbEnr
     Sheets("New_Business_central").Cells(22, NBEnr) = total / NbEnr 
     Requete.MoveNext
Wend

Cordialement,
Pirot
pirot est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 13/12/2011, 20h54   #3
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Peut être comme ceci (la boucle sur j est farfelue)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
If Not Requete.EOF Then
    Requete.MoveFirst
    Do While Not (Requete.EOF)
        NbEnr = NbEnr + 1                        ' On incremente un compteur
        ' supposons que l'on veut faire la moyenne sur la colonne 4 , tous les 30 enregistrements
        Total = Total + Requete.Fields(3).Value  ' on additionne
        If NbEnr = 30 Then                       ' quand le compteur = 30 on affiche la moyenne
            j = j + NbEnr
            Worksheets("New_Business_central").Cells(j, 22) = Total / NbEnr    ' a adapter
            ' on reéinitialise les variables
            NbEnr = 0
            Total = 0
        End If
        Requete.MoveNext
    Loop
End If
Set Requete = Nothing
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 12h12   #4
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Bonjour Forum,Bonjour mercatog,
Avec vos indications suis arriver à faire marcher la boucle sur la variable j.
Cependant je veux pas parcourir toute la colonne je veux sortir de la boucle(de la colonne) quand j=30.
pour cela j'ai fait ce code qui fait pas l'effet souhaité:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
If Not Requete.EOF Then
    Requete.MoveFirst
    Do While Not (Requete.EOF)
        NbEnr = NbEnr + 1                        ' On incremente un compteur
        ' supposons que l'on veut faire la moyenne sur la colonne 4 , tous les 30 enregistrements
        total = total + Requete.Fields(3).Value  ' on additionne
        If NbEnr = 30 Then                       ' quand le compteur = 30 on affiche la moyenne
            j = j + 1
            If j = 31 Then Exit Do
            Worksheets("New_Business_central").Cells(22, j) = total / NbEnr - 1 ' a adapter
            ' on reéinitialise les variables
            NbEnr = 0
            total = 0
        End If
        Requete.MoveNext
    Loop
End If
Set Requete = Nothing
 
 
End Sub
le but du code est de calculer la moyenne aprés chaque 30 lignes et de l'afficher sur une cellule de ma feuille excel. Et d'arreter une fois que j=31 c'est-à-dire une fois que j'atteigne la ligne 900
cordialement,
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 13h04   #5
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Peut être en ajoutant un compteur de lignes

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim Compteur As Integer
 
Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
If Not Requete.EOF Then
    Requete.MoveFirst
    Do While Not Requete.EOF And Compteur <= 900
        Compteur = Compteur + 1
        NbEnr = NbEnr + 1                        ' On incremente un compteur
        Total = Total + Val(Requete.Fields(3).Value)  ' on additionne
        If NbEnr = 30 Then                       ' quand le compteur = 30 on affiche la moyenne
            j = j + 1
            Worksheets("New_Business_central").Cells(22, j) = Total / NbEnr    ' a adapter
            ' on reéinitialise les variables
            NbEnr = 0
            Total = 0
        End If
        Requete.MoveNext
    Loop
End If
Set Requete = Nothing
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 14/12/2011, 15h11   #6
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Merci mercatog j'obtiens à présent l'effet souhaité .
Juste une dernière question :
Je voudrai savoir si c'est possible de faire une moyenne, toujours sur la même colonnes, des lignes se trouvant à une position qui est une multiple de 13.
Cordialement ,
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 15h53   #7
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Tu as la variable Compteur qui compte les ligne
fais par exemple
Code :
If Compteur Mod 13=0 Then 'adapte ici
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 14/12/2011, 17h22   #8
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Merci énormément mercatog pour l'astuce du "mod".
j'ai une toute dernière question .
je parcours la colonne 2 dès que dans cette colonne je croise 13(test) je vais dans la colonne 4 et au niveau de la même ligne je prend la valeur correspondante . A la fin je fait la moyenne correspondante et j'inscris le résultat sur ma feuille excel . ce test est fait sur i=i+13 jusqu'à ce que i= 360.
c'est a dire après 13, je passe à 22 ainsi de suite
J'ai bidouillé ce code( désolé de vous choquer les génies) je suis encore un apprenti

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
If Not Requete.EOF Then
    Requete.MoveFirst
    Do While Not (Requete.EOF) And i <= 360
    i = i + 13
 
        If Requete.Fields(1).Value <> i Then
        Else
        NbEnr = NbEnr + 1
        ' supposons que l'on veut faire la moyenne sur la colonne 4 , tous les 30 enregistrements
        total = total + Requete.Fields(3).Value  ' on additionne
            j = j + 1
            Worksheets("New_Business_central").Cells(22, j) = total / NbEnr   ' a adapter
 
        End If
        Requete.MoveNext
    Loop
End If
Set Requete = Nothing
cordialement,
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 18h44   #9
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
C'est pas clair, j'ai pas compris
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 23h29   #10
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Bonsoir mercatog, mille excuses ! je vais essayer d'être plus clair!
Mon fichier texte est composé de 30 colonnes et de 361000 lignes. Ma 2ieme colonnes contient des numéros entre 0 et 360.Cela permet de donner des numéro aux lignes.
Le but est de faire la moyenne ,au niveau de la colonnes 4, de toutes les lignes numérotées 13.
Ensuite j'affiche le résultat de la moyenne sur ma feuille excel.

Je refais exactement la même choses pour toutes les lignes numérotées 13*k .
Ce qui veut dire qu'aprés le calcul de la moyennes des lignes de numéro 13, On passe au calcul de la moyenne des lignes numéroté 26, puis des lignes numérotés 39,...jusq'au calcul de la moyennes de toutes les lgnes numérotées 351(13*27) en restant sur la colonne 4. A chaque fois j'affiches le résultat de la moyenne sur ma feuille excel
J'ai essayé de commenté le code suivant que j'ai budouillé:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
If Not Requete.EOF Then
    Requete.MoveFirst
    Do While Not (Requete.EOF) 
    For i = 13 To 351 Step 13 ' permet de pouvoir faire un boucle sur  les multiple de 13 entre 13 et 360
        If Requete.Fields(1).Value <> i Then ' permet de repérer les ligne de multiple 13 au niveau de la deuxième colonne
        Else
        NbEnr = NbEnr + 1 ' permet de compter le nombre de lignes avec un numéro 13
        ' supposons que l'on veut faire la moyenne sur la colonne 4 ,
        Total = Total + Requete.Fields(3).Value  ' on additionne ( la valeur du 4ieme colonne dont la ligne est numétoté 13)
            j = j + 1
            Worksheets("New_Business_central").Cells(22, j) = Total / NbEnr   ' permet d'afficher les résultats
 
        End If
 Next i
        Requete.MoveNext
    Loop
End If
Set Requete = Nothing
Si je suis toujours pas clair, je m'en excuse , et en ce moment j'enverrai une illustration sous excel ,
Cordialement
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 12h23   #11
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Bonjour erlerwade

Je n’ai pas tout compris mais si comme la colonne est numérotée et que l’on sait quel est le numéro recherche, pourquoi ne pas intégrer le test dans ton SQL

Code à l’arrache :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
For i = 13 To 351 Step 13
NbEnr = 0
Total = 0
TexteRequete =Select…………………..From…………Where……..=i”
 
Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
 
Do While Not (Requete.EOF) 
NbEnr = NbEnr + 1
Total = Total + Requete.Fields(3).Value 
Requete.MoveNext
Loop
j = j + 1
 
Worksheets("New_Business_central").Cells(22, j) = Total / NbEnr  
 
Next i

Donne ton code SQL (TexteRequete =.........)

Tu dis

Edit :rajouté
Bien sur
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 15/12/2011, 13h04   #12
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Bonjour jean-pierre
Pour illustrer mes explication je joint a ce courriel un fichier excel .
mon sql est le suivant:

Code :
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
Sub stat()
Dim total As Double
Chemin = "C:\Documents and Settings\x223591\Bureau\dossieribou\"
    NomFichier = "Copie de 1_1000_EUR_hw_monthly.txt"
 
    Set Donneestxt = DAO.OpenDatabase(Chemin, False, False, "Text;Database=" & Chemin)
    Set Appli = CreateObject("Scripting.FileSystemObject")
 
    Set Creation = Appli.CreateTextFile(Chemin & "schema.ini", True)
 
    Creation.Write "Format=Delimited(;)" & vbCrLf
    Creation.Write "ColNameHeader = True"
    Creation.Close
 
     TexteRequete = "SELECT Iteration , Period, deflator, constante,nom_rate_0_083yr, nom_rate_0_25yr, nom_rate_0_5yr, nom_rate_0_75yr, nom_rate_1yr, nom_rate_2yr, nom_rate_3yr,nom_rate_4yr, nom_rate_5yr, nom_rate_7yr, nom_rate_10yr, nom_rate_15yr,nom_rate_20yr, nom_rate_25yr,cac_return, cac_return_div, eurostoxx_return, eurostoxx_return_div,immobilier_return, immobilier_return_div, Hedgfund_return, Hedgfund_return_div,privatequity_return, privatequity_return_div, inflation " & _
                        "FROM [" & NomFichier & "]" ' création du Sql
 
Dim Compteur As Integer
 
 
Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
If Not Requete.EOF Then
    Requete.MoveFirst
    Do While Not (Requete.EOF) And j <= 30
    For i = 13 To 351 Step 13 ' permet de pouvoir faire un boucle sur  les multiple de 13 entre 13 et 360
 
         If Requete.Fields(1).Value <> i Then ' permet de repérer les ligne de multiple 13 au niveau de la deuxième colonne
 
        Else
        NbEnr = NbEnr + 1 ' permet de compter le nombre de lignes avec un numéro 13
        ' supposons que l'on veut faire la moyenne sur la colonne 4 ,
        total = total + Requete.Fields(10).Value  ' on additionne ( la valeur du 4ieme colonne dont la ligne est numétoté 13)
               j = j + 1
            Worksheets("New_Business_central").Cells(22, j) = total / NbEnr   ' permet d'afficher les résultats
 
         End If
         Next i
        Requete.MoveNext
    Loop
End If
Set Requete = Nothing
 
End Sub
Fichiers attachés
Type de fichier : xls moyenne.xls (27,0 Ko, 3 affichages)
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 13h23   #13
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Lorsque l’on requête on lit ligne par ligne les champs
La seule boucle que l’on peut faire c’est sur les champs comme on a déjà fait

Ici la solution est de boucler sur la requête, comme je te l’indique plus haut

Ton texte SQL peut être plus cour, puisque les champs sont ciblés

Code :
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
Option Explicit
                                Dim Donneestxt              As DAO.Database
 
                                Dim Chemin                  As String
                                Dim NomFichier              As String
                                Dim TexteRequete            As String
                                Dim Requete                 As Recordset
Sub stat()
                                Dim NbEnr                   As Integer
                                Dim total                   As Double
                                Dim i                       As Double
                                Dim j                       As Integer
Chemin = "C:\Documents and Settings\x223591\Bureau\dossieribou\"
    NomFichier = "Copie de 1_1000_EUR_hw_monthly.txt"
 
    Set Donneestxt = DAO.OpenDatabase(Chemin, False, False, "Text;Database=" & Chemin)
 
    For i = 13 To 351 Step 13
        NbEnr = 0
        total = 0
 
         TexteRequete = "SELECT Period, constante " & _
                            "FROM [" & NomFichier & "] WHERE Period=i"
 
        Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
 
        Do While Not (Requete.EOF)
            NbEnr = NbEnr + 1
            total = total + Requete.Fields(1).Value
            Requete.MoveNext
        Loop
        j = j + 1
         Worksheets("New_Business_central").Cells(22, j) = total / NbEnr
    Next i
End Sub
Devrait le faire
tu dis
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 15/12/2011, 14h28   #14
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Quand j'excute la macro je reçois ce message :
"Trés peu de paramètre. 1 attendu"
et la macro bloque au niveau de cette ligne de code:
Code :
Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 14h53   #15
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Autant pour moi

A prendre
Code :
1
2
         TexteRequete = "SELECT Period, constante " & _
                            "FROM [" & NomFichier & "] WHERE Period=" & i & ""

Tu dis
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 15/12/2011, 16h33   #16
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
La macro tourne bien .
Mais, j'ai ajouté juste après des lignes de codes. Le probléme est que ma boucle sur la variable k qui était censée bouclés sur les résultats des moyennes affichées est fausse.
Je m'arrache les cheveux mais j'y arrive pas .

Code :
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
Option Explicit
                                Dim Donneestxt              As DAO.Database
 
                                Dim Chemin                  As String
                                Dim NomFichier              As String
                                Dim TexteRequete            As String
                                Dim Requete                 As Recordset
Sub stat()
                                Dim NbEnr                   As Integer
                                Dim total                   As Double
                                Dim i                       As Double
                                Dim j                       As Integer
                                Dim k                       As Integer
Chemin = "C:\Documents and Settings\x223591\Bureau\dossieribou\"
    NomFichier = "Copie de 1_1000_EUR_hw_monthly.txt"
 
    Set Donneestxt = DAO.OpenDatabase(Chemin, False, False, "Text;Database=" & Chemin)
 
    For i = 12 To 360 Step 12
        NbEnr = 0
        total = 0
  TexteRequete = "SELECT Period, constante " & _
                            "FROM [" & NomFichier & "] WHERE Period=" & i & ""
 
 
        Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
 
        Do While Not (Requete.EOF)
            NbEnr = NbEnr + 1
            total = total + Requete.Fields(1).Value
            Requete.MoveNext
        Loop
        j = j + 1
         Worksheets("New_Business_central").Cells(22, j) = total / NbEnr
    Next i
 For i = 12 To 360 Step 12
                   For k = 1 To 30
        NbEnr = 0
        total = 0
  TexteRequete = "SELECT Period, constante " & _
                            "FROM [" & NomFichier & "] WHERE Period=" & i & ""
 
 
        Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
 
        Do While Not (Requete.EOF)
            NbEnr = NbEnr + 1
            total = total + (Requete.Fields(1).Value - Worksheets("New_Business_central").Cells(22, k)) ^ 2
            Requete.MoveNext
        Loop
        j = j + 1
         Worksheets("New_Business_central").Cells(23, j) = Sqr(total) / NbEnr
 
                     Next k
    Next i
 
 
 
End Sub
le but cherché est de faire varier k de 1 des que j varie de 12
du cou je pense à enlever la boucle sur k et de poser
k= i/12
Code :
total = total + (Requete.Fields(1).Value - Worksheets("New_Business_central").Cells(22, i / 12)) ^ 2
Merci d'avance Jean -pierre
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 17h09   #17
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Je ne comprends pas le résultat recherché.

Dans
Code :
total = total + (Requete.Fields(1).Value - Worksheets("New_Business_central").Cells(22, k)) ^ 2
Code :
Worksheets("New_Business_central").Cells(22, k)
C’est quoi

Tu veux récupérer les valeurs de tes moyennes et faire une opération avec
Code :
Requete.Fields(1).Value
Et afficher le résultat sous le premier résultat?

Envoi plutôt un ficher Excel en m’expliquant ton résonnement

Tu dis
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 15/12/2011, 17h31   #18
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Oui Jean-Pierre la variable K c'était pour récupérer les moyennes. que j'utilise pour calculer ls variances .
Les variances sur les lignes de valeurs (12 ensuite 24 puis 36.... jusqu'a 360)
J'ai joint à ce courriel un fichier excel explicatif
Merci d'avance
Fichiers attachés
Type de fichier : xls moyenne.xls (30,0 Ko, 6 affichages)
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 09h49   #19
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Bonjour erlerwade ,

Si j’ai bien compris

Code :
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
Option Explicit
 
                                Dim Donneestxt              As DAO.Database
 
                                Dim Chemin                  As String
                                Dim NomFichier              As String
                                Dim TexteRequete            As String
                                Dim Requete                 As Recordset
Sub stat()
                                Dim NbEnr                   As Integer
                                Dim totalA                  As Double
                                Dim totalB                  As Double
                                Dim i                       As Double
                                Dim j                       As Integer
                                Dim k                       As Integer
                                Dim Val()                   As Double ' On déclare un tableau
Chemin = "C:\Documents and Settings\x223591\Bureau\dossieribou\"
    NomFichier = "Copie de 1_1000_EUR_hw_monthly.txt"
 
    Set Donneestxt = DAO.OpenDatabase(Chemin, False, False, "Text;Database=" & Chemin)
 
    For i = 12 To 360 Step 12
    ' Remise à 0 des variables
        NbEnr = 0
        totalA = 0
        totalB = 0
 
        TexteRequete = "SELECT Period, constante " & _
                                   "FROM [" & NomFichier & "] WHERE Period=" & i & ""
        Set Requete = Donneestxt.OpenRecordset(TexteRequete, DAO.dbOpenSnapshot)
 
        Do While Not (Requete.EOF)
            NbEnr = NbEnr + 1 ' On compte le nombre d'enregistrements
            ReDim Preserve Val(NbEnr) ' on redimensionne le tableau
            Val(NbEnr) = Requete.Fields(1).Value ' on stocke les valeurs dans le tableau
            totalA = totalA + Requete.Fields(1).Value ' on somme les valeurs
            Requete.MoveNext
        Loop
        j = j + 1
        totalA = totalA / NbEnr ' on calcul la moyenne
 
        For k = 1 To NbEnr ' on boucle sur le tableau
            totalB = totalB + (Val(k) - totalA) ^ 2 ' on fait la somme du calcul
        Next k
' on affiche les résultats
        Worksheets("New_Business_central").Cells(22, j) = totalA
        Worksheets("New_Business_central").Cells(23, j) = Sqr(totalB) / NbEnr 
    Next i
tu dis
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 16/12/2011, 11h31   #20
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Bonjour Forum, Bonjour Jean-Pierre
Je me rend compte que je dois faire la même que sur la colonne constante sur deux autres colonnes que sont :nom_rate_10yr et nom_rate_25yr du cou sur mon code je remplace la requête par cette nouvelle requête qui est:
Code :
TexteRequete = "SELECT Period, constante, nom_rate_10yr, nom_rate_25yr   " &
_
Mon problème est de faire un boucle sur les colonnes en questions.
pour la colonne constante nous pouvons laisser les resultats des moyennes sur la ligne 22 et les variances sur la ligne 23
pour la colonne :nom_rate_10yr je voudrai affiché les moyenne au niveau de la ligne 29 et les variances au niveau de la ligne 30
pour la colonne :nom_rate_25yr je voudrai affiché les moyenne au niveau de la ligne 36 et les variances au niveau de la ligne 37
Merci confinement
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h39.


 
 
 
 
Partenaires

Hébergement Web