Optimisations code vba

dhiouf

XLDnaute Occasionnel
Salut tous le monde; le forum

Je veux faire le code suivant pour lire un fichier ini et je n'arrive pas à le rendre plus simple car il faut taper 30 lignes dans l’éditeur vba.
Pouvez-vous m'aider ?
Merci d'avance.

Code:
Private Sub cmdLire_click()

Dim CheminFichierIni As String

CheminFichierIni = "C:\Program Files\Dépenses\depenses.ini"

Worksheets(2).Range("B1") = LitDansFichierIni("Solde épargne", "Année1", CheminFichierIni)
Worksheets(2).Range("B2") = LitDansFichierIni("Solde épargne", "Année2", CheminFichierIni)
Worksheets(2).Range("B3") = LitDansFichierIni("Solde épargne", "Année2", CheminFichierIni)
Etc.
.
.
.
.
.

Worksheets(2).Range("B30") = LitDansFichierIni("Solde épargne", "Année30", CheminFichierIni)
 
End sub
 

Staple1600

XLDnaute Barbatruc
Re : Optimisations code vba

Bonsoir à tous

dhiouf
Tu peux faire une boucle du genre
Code vba:
Private Sub cmdLire_click()
Dim CheminFichierIni As String, i As Byte
CheminFichierIni = "C:\Program Files\Dépenses\depenses.ini"
For i= 1 to 30
Worksheets(2).Cells(i,"B") = _
LitDansFichierIni("Solde épargne", "Année" & i, CheminFichierIni)

Next i
End Sub
 
Dernière édition:

dhiouf

XLDnaute Occasionnel
Re : Optimisations code vba

Re Staple1600

Merci pour ta réponse, ton code marche bien mais si je l'adapte avec le code suivant, excel se plante avec une sablier sur l’écran

Code:
Private Sub cmdLire_click()
Dim CheminFichierIni As String, i As Byte
CheminFichierIni = "C:\Program Files\Dépenses\depenses.ini"
For i= 2000 to 2013 ' lire a partir de l'année 2000 à 2013
Worksheets(2).Cells(i,"B") = _
LitDansFichierIni("Solde épargne", "Année" & i, CheminFichierIni)
Next i
EndSub
 

Staple1600

XLDnaute Barbatruc
Re : Optimisations code vba

Re_____________________________________EDITION: Bonsoir eriic ;)


Essayes alors ainsi pour voir
Private Sub cmdLire_click()
Dim CheminFichierIni As String, i As Long
CheminFichierIni = "C:\Program Files\Dépenses\depenses.ini"
For i= 2000 to 2013 ' lire a partir de l'année 2000 à 2013
Worksheets(2).Cells(i,"B") = _
LitDansFichierIni("Solde épargne", "Année" & i, CheminFichierIni)
Next i
End Sub
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Re : Optimisations code vba

Bonsoir à tous,

Indépendamment du changement de type de variable fait par Staple.

For i= 2000 to 2013 ' lire a partir de l'année 2000 à 2013
Worksheets(2).Cells(i,"B") = ...

tu veux vraiment écrire l'année 2000 en ligne 2000 ? Sinon fait une petite soustraction.

eric
 

dhiouf

XLDnaute Occasionnel
Re : Optimisations code vba

Bonsoir eriiiic; Staple1600

Merci pour vos réponses

j'ai essayer avec

Private Sub cmdLire_click()
Dim CheminFichierIni As String, i As Long
CheminFichierIni = "C:\Program Files\Dépenses\depenses.ini"
For i= 2000 to 2013 ' lire a partir de l'année 2000 à 2013
Worksheets(2).Cells(i,"B") = _
LitDansFichierIni("Solde épargne", "Année" & i, CheminFichierIni)
Next i
End Sub

ça n'a pas marcher, rien est afficher dans la cellule B ?
 

Staple1600

XLDnaute Barbatruc
Re : Optimisations code vba

Bonjour à tous_____________________________EDITION: Bonjour eriic ;)

dhiouf:
Si tu essaies cette macro de test, qu'affiche la MsgBox
Code vba:
Sub test()
Dim CheminFichierIni As String, i As Long]
i=2000
CheminFichierIni = "C:\Program Files\Dépenses\depenses.ini"
Msgbox LitDansFichierIni("Solde épargne", "Année" & i, CheminFichierIni)
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Optimisations code vba

Re

dhiouf: Un suggestion simple pour aider à te dépatouiller de ton souci:

Joins un fichier Excel exemple anonymisé ainsi qu'un fichier depenses.ini
(lui aussi avec des données fictives mais respectant la structure de ton fichier *.ini original)
(NB: N'oublie pas d'inclure ta fonction VBA LitDans FichierIni )
  • Compresses ces deux fichiers dans un fichier *.zip
-> Tu sélectionnes tes deux fichiers simultanément ->
cliques droit Envoyer vers Dossiers Compressés
  • Joins le fichier zip obtenu dans ta discussion ainsi on pourra faire des tests sur nos PC.
 

dhiouf

XLDnaute Occasionnel
Re : Optimisations code vba

Bonsoir à tous; le forum

dans le même sujet, j'ai mesurer le temps d'exécution du code suivant, il fait 2.5 secondes pour être exécuter.

Est-il possible de diminuer le temps d'exécution.
Merci d(avance.

Code:
Private Sub cmdLire_click()
If Range("A33") = 0 Then Exit Sub
On Error Resume Next
Application.ScreenUpdating = False
If ComboBox1.ListIndex > -1 Then ComboBox1.ListIndex = -1
Dim CheminFichierIni As String


    CheminFichierIni = "C:\Program Files\Dépenses\depenses.ini"
    
    Range("K9") = LitDansFichierIni("Solde", "Initial", CheminFichierIni)
    Range("E11") = LitDansFichierIni("Période", "Du", CheminFichierIni)
    Range("E15") = LitDansFichierIni("Pourcentage", "Estimatif", CheminFichierIni)

    Range("E19") = LitDansFichierIni("Janvier", "Virement", CheminFichierIni)
    Range("F19") = LitDansFichierIni("Janvier", "Autre", CheminFichierIni)
    Range("I19") = LitDansFichierIni("Janvier", "Retrait", CheminFichierIni)
    Range("J19") = LitDansFichierIni("Janvier", "Prelevement", CheminFichierIni)
    
    Range("E20") = LitDansFichierIni("Février", "Virement", CheminFichierIni)
    Range("F20") = LitDansFichierIni("Février", "Autre", CheminFichierIni)
    Range("I20") = LitDansFichierIni("Février", "Retrait", CheminFichierIni)
    Range("J20") = LitDansFichierIni("Février", "Prelevement", CheminFichierIni)
    
    Range("E21") = LitDansFichierIni("Mars", "Virement", CheminFichierIni)
    Range("F21") = LitDansFichierIni("Mars", "Autre", CheminFichierIni)
    Range("I21") = LitDansFichierIni("Mars", "Retrait", CheminFichierIni)
    Range("J21") = LitDansFichierIni("Mars", "Prelevement", CheminFichierIni)
    
    Range("E22") = LitDansFichierIni("Avril", "Virement", CheminFichierIni)
    Range("F22") = LitDansFichierIni("Avril", "Autre", CheminFichierIni)
    Range("I22") = LitDansFichierIni("Avril", "Retrait", CheminFichierIni)
    Range("J22") = LitDansFichierIni("Avril", "Prelevement", CheminFichierIni)
    
    Range("E23") = LitDansFichierIni("Mai", "Virement", CheminFichierIni)
    Range("F23") = LitDansFichierIni("Mai", "Autre", CheminFichierIni)
    Range("I23") = LitDansFichierIni("Mai", "Retrait", CheminFichierIni)
    Range("J23") = LitDansFichierIni("Mai", "Prelevement", CheminFichierIni)
    
    Range("E24") = LitDansFichierIni("Juin", "Virement", CheminFichierIni)
    Range("F24") = LitDansFichierIni("Juin", "Autre", CheminFichierIni)
    Range("I24") = LitDansFichierIni("Juin", "Retrait", CheminFichierIni)
    Range("J24") = LitDansFichierIni("Juin", "Prelevement", CheminFichierIni)
    
    Range("E25") = LitDansFichierIni("Juillet", "Virement", CheminFichierIni)
    Range("F25") = LitDansFichierIni("Juillet", "Autre", CheminFichierIni)
    Range("I25") = LitDansFichierIni("Juillet", "Retrait", CheminFichierIni)
    Range("J25") = LitDansFichierIni("Juillet", "Prelevement", CheminFichierIni)
    
    Range("E26") = LitDansFichierIni("Août", "Virement", CheminFichierIni)
    Range("F26") = LitDansFichierIni("Août", "Autre", CheminFichierIni)
    Range("I26") = LitDansFichierIni("Août", "Retrait", CheminFichierIni)
    Range("J26") = LitDansFichierIni("Août", "Prelevement", CheminFichierIni)
    
    Range("E27") = LitDansFichierIni("Septembre", "Virement", CheminFichierIni)
    Range("F27") = LitDansFichierIni("Septembre", "Autre", CheminFichierIni)
    Range("I27") = LitDansFichierIni("Septembre", "Retrait", CheminFichierIni)
    Range("J27") = LitDansFichierIni("Septembre", "Prelevement", CheminFichierIni)
    
    Range("E28") = LitDansFichierIni("Octobre", "Virement", CheminFichierIni)
    Range("F28") = LitDansFichierIni("Octobre", "Autre", CheminFichierIni)
    Range("I28") = LitDansFichierIni("Octobre", "Retrait", CheminFichierIni)
    Range("J28") = LitDansFichierIni("Octobre", "Prelevement", CheminFichierIni)
    
    Range("E29") = LitDansFichierIni("Novembre", "Virement", CheminFichierIni)
    Range("F29") = LitDansFichierIni("Novembre", "Autre", CheminFichierIni)
    Range("I29") = LitDansFichierIni("Novembre", "Retrait", CheminFichierIni)
    Range("J29") = LitDansFichierIni("Novembre", "Prelevement", CheminFichierIni)
    
    Range("E30") = LitDansFichierIni("Décembre", "Virement", CheminFichierIni)
    Range("F30") = LitDansFichierIni("Décembre", "Autre", CheminFichierIni)
    Range("I30") = LitDansFichierIni("Décembre", "Retrait", CheminFichierIni)
    Range("J30") = LitDansFichierIni("Décembre", "Prelevement", CheminFichierIni)
    
    Dim CheminFichierIni1 As String, i As Long
    CheminFichierIni1 = "C:\Program Files\Dépenses\epargne.ini"
    For i = Worksheets(2).Range("A1").Value To Worksheets(2).Range("A2013").Value
Worksheets(2).Cells(i, "B") = LitDansFichierIni("Solde épargne", "Année" & i, CheminFichierIni1)
Next i
    Range("E11").Select
    Application.ScreenUpdating = True
    Worksheets(1).Protect UserInterfaceOnly:=True
If Month(Date) = 1 Then Range("E19").Activate
If Month(Date) = 2 Then Range("E20").Activate
If Month(Date) = 3 Then Range("E21").Activate
If Month(Date) = 4 Then Range("E22").Activate
If Month(Date) = 5 Then Range("E23").Activate
If Month(Date) = 6 Then Range("E24").Activate
If Month(Date) = 7 Then Range("E25").Activate
If Month(Date) = 8 Then Range("E26").Activate
If Month(Date) = 9 Then Range("E27").Activate
If Month(Date) = 10 Then Range("E28").Activate
If Month(Date) = 11 Then Range("E29").Activate
If Month(Date) = 12 Then Range("E30").Activate
Range("E19:F30").Locked = False
Range("I19:J30").Locked = False
Range("K9").Locked = False
Range("E11").Locked = False
Range("E15").Locked = False
Dim Fichier As Variant
Fichier = "c:\Program Files\Dépenses\sauve\depenses-" & Range("D33") & ".ini"
FileCopy "c:\Program Files\Dépenses\depenses.ini", Fichier
Kill "C:\Program Files\Dépenses\sauve\depenses-.ini"
If Range("E11") = "" Then Range("E11").Select

Dim x As Double
x = Application.Sum(Sheets(2).Range("C1").EntireColumn)
Range("H37").Font.ColorIndex = 5
Range("H37").Font.Bold = True
Range("H37").Font.Size = 8
Range("K37").Font.ColorIndex = 5
Range("K37").Font.Bold = True
Range("K37").Font.Size = 8
Range("K37").HorizontalAlignment = xlHAlignLeft
Range("H37") = "Solde total d'épargne du 01/01/" & Sheets(2).Range("A1").Value & " au " & _
Date & " :"
Range("K37") = x
End Sub
 

eriiic

XLDnaute Barbatruc
Re : Optimisations code vba

Bonjour,

Plutôt que de faire 39 accès à ton fichier ini tu pourrais le charger en une fois :
Code:
Workbooks.OpenText Filename:="C:\Program Files\Dépenses\depenses.ini"
puis d'analyser les lignes pour ressortir les infos qui t"intéressent.

Mais as-tu vraiment besoin d'un fichier .ini ?
Tu ne peux pas mettre tous tes paramètres dans une feuille cachée plus simplement ?

eric
 

Discussions similaires

Réponses
5
Affichages
406
Réponses
14
Affichages
670

Statistiques des forums

Discussions
312 345
Messages
2 087 478
Membres
103 556
dernier inscrit
titboine