A voir également:
- Optimiser un bout de code
- Optimiser son pc - Accueil - Utilitaires
- Code ascii de a - Guide
- Optimiser windows 10 - Guide
- Code puk bloqué - Guide
- Code de déverrouillage oublié - Guide
6 réponses
Pour rendre plus lisible, tu pourrais déjà remplacer les noms de controle de la collection UserForm1.Controls pour des variables initialisées en début de fonction, étant donné que ces noms ne dépendent que du n° de ligne qui ne varie pas:
UserForm1.Controls("Label" & 217 + Colonne) -> UserForm1.Controls(Label217)
Pour mieux faire, je pense qu'il est possible en VB de créer une référence d'un objet déjà existant, c'est à dire:
tu as besoin du controle "Label" & 399 + Ligne", tu crée en début de fonction une variable ctrl399=UserForm1.Controls("Label" & 399 + Ligne).
Voilà, ton code sera déjà moins lourd
UserForm1.Controls("Label" & 217 + Colonne) -> UserForm1.Controls(Label217)
Pour mieux faire, je pense qu'il est possible en VB de créer une référence d'un objet déjà existant, c'est à dire:
tu as besoin du controle "Label" & 399 + Ligne", tu crée en début de fonction une variable ctrl399=UserForm1.Controls("Label" & 399 + Ligne).
Voilà, ton code sera déjà moins lourd
Salut climbfly
Merci de ta réponse, c'est sympa a toi.
Bon j'ai fait des essais en suivant tes conseils, mais ça n'a pas l'air de marcher
donc je suis de nouveau a la case départ.
J'ai eu 3 erreurs
(1) Variable non définie, ne sachant quoi mettre, j'ai essayer avec string, intéger etc
(2) Qualificateur incorrect
(3) Incompatbilité de type
Mon fichier est une compta perso quasi terminé juste que je voulais optimiser
un peu quelques parties du code.
Vu l'heure je te souhaite un bon appétit et merci
Cdlt Ray
Merci de ta réponse, c'est sympa a toi.
Bon j'ai fait des essais en suivant tes conseils, mais ça n'a pas l'air de marcher
donc je suis de nouveau a la case départ.
J'ai eu 3 erreurs
(1) Variable non définie, ne sachant quoi mettre, j'ai essayer avec string, intéger etc
(2) Qualificateur incorrect
(3) Incompatbilité de type
Mon fichier est une compta perso quasi terminé juste que je voulais optimiser
un peu quelques parties du code.
Vu l'heure je te souhaite un bon appétit et merci
Cdlt Ray
Salut Ray,
voila ce que je te propose. Cette version utilise une fonction formatedate, les références à ws sont supprimmés (je pense que c'est = à sheets(compte)), des affectations par défaut ont été définie plutot que de les faire dans les Else
Tu peux aussi définir 2 nouvelle variable pour les controles "Label" & NumLabel et "Label" & 181 + Col
Option Explicit
Public WithEvents Bouton As MSForms.CheckBox ' Variable des 14 CheckBoxs
Public ULab399, ULab217 As MSForms.Label
'************************* VALIDER PRELEVEMENTS MENSUELS + LABELS (1 à 168)
Private function formatDate(expression As String, format As String)
return WorksheetFunction.Proper(Format((expression , "Dddd dd Mmmm yyyy"))
end function
Private Sub Bouton_Click()
Dim Col, Lig, NumLabel As Integer
Lig = Val(Mid(Bouton.Name, 9))
Col = Month(Date) - 1
NumLabel = Lig + (Col * 14)
Set ULab399 = UserForm1.Controls("Label" & 399 + Lig)
Set ULab217 = UserForm1.Controls("Label" & 217 + Col)
// propriétés par défaut
ULab399.Caption = ""
ULab399.BackColor = vbBlue ' Backcolor Bleu Fond "Prélèvements"
ULab217.ForeColor = vbGreen
With Sheets("Compte")
If Bouton.Value = True Then
.Cells(Lig, "A") = 1
If .Cells(Lig, "B") <> "" Then ' Quelque chose d'inscrit en colonne B
ULab399.Caption = formatDate(.Cells(Lig, "B"))
else
ULab399.Caption = formatDate(Date);
voila If
If Val(.Cells(Lig + 1, 5 + Col)) <> 0 Then
UserForm1.Controls("Checkbox" & 1 + Lig - 1).BackColor = &H808080
ULab399.BackColor = &H808080 ' Backcolor Gris fonçé "Prélèvements"
ULab399.ForeColor = vbBlue ' Ecriture en Bleu "Prélèvements"
UserForm1.Controls("Label" & NumLabel).BackColor = &H808080 ' Backcolor Gris fonçé "Labels mois"
.Cells(Lig + 1, 5 + Col).Interior.ColorIndex = 16 ' Fond Gris cellule feuil1(Compte)
End If
Else
UserForm1.Controls("Checkbox" & 1 + Lig - 1).BackColor = vbBlue
UserForm1.Controls("Label" & NumLabel).BackColor = vbBlue ' Backcolor Bleu fonçé "Labels mois"
.Cells(Lig + 1, 5 + Col).Interior.ColorIndex = 4 ' Fond Vert cellule feuil1(Compte)
End If
.Cells(Lig, "B") = ULab399.Caption
UserForm1.Controls("Label" & 181 + Col).Caption = IIf(.Cells(17, 5 + Col) > 0, Format(.Cells(17, 5 + Col), Euro), "") ' Restant dû
ULab217.Caption = Format(Ws.Cells(20, 5 + Col), Euro) ' Solde
If .Cells(20, 5 + Col) < 0 Then
ULab217.ForeColor = vbRed
End If
End With
End Sub
voila ce que je te propose. Cette version utilise une fonction formatedate, les références à ws sont supprimmés (je pense que c'est = à sheets(compte)), des affectations par défaut ont été définie plutot que de les faire dans les Else
Tu peux aussi définir 2 nouvelle variable pour les controles "Label" & NumLabel et "Label" & 181 + Col
Option Explicit
Public WithEvents Bouton As MSForms.CheckBox ' Variable des 14 CheckBoxs
Public ULab399, ULab217 As MSForms.Label
'************************* VALIDER PRELEVEMENTS MENSUELS + LABELS (1 à 168)
Private function formatDate(expression As String, format As String)
return WorksheetFunction.Proper(Format((expression , "Dddd dd Mmmm yyyy"))
end function
Private Sub Bouton_Click()
Dim Col, Lig, NumLabel As Integer
Lig = Val(Mid(Bouton.Name, 9))
Col = Month(Date) - 1
NumLabel = Lig + (Col * 14)
Set ULab399 = UserForm1.Controls("Label" & 399 + Lig)
Set ULab217 = UserForm1.Controls("Label" & 217 + Col)
// propriétés par défaut
ULab399.Caption = ""
ULab399.BackColor = vbBlue ' Backcolor Bleu Fond "Prélèvements"
ULab217.ForeColor = vbGreen
With Sheets("Compte")
If Bouton.Value = True Then
.Cells(Lig, "A") = 1
If .Cells(Lig, "B") <> "" Then ' Quelque chose d'inscrit en colonne B
ULab399.Caption = formatDate(.Cells(Lig, "B"))
else
ULab399.Caption = formatDate(Date);
voila If
If Val(.Cells(Lig + 1, 5 + Col)) <> 0 Then
UserForm1.Controls("Checkbox" & 1 + Lig - 1).BackColor = &H808080
ULab399.BackColor = &H808080 ' Backcolor Gris fonçé "Prélèvements"
ULab399.ForeColor = vbBlue ' Ecriture en Bleu "Prélèvements"
UserForm1.Controls("Label" & NumLabel).BackColor = &H808080 ' Backcolor Gris fonçé "Labels mois"
.Cells(Lig + 1, 5 + Col).Interior.ColorIndex = 16 ' Fond Gris cellule feuil1(Compte)
End If
Else
UserForm1.Controls("Checkbox" & 1 + Lig - 1).BackColor = vbBlue
UserForm1.Controls("Label" & NumLabel).BackColor = vbBlue ' Backcolor Bleu fonçé "Labels mois"
.Cells(Lig + 1, 5 + Col).Interior.ColorIndex = 4 ' Fond Vert cellule feuil1(Compte)
End If
.Cells(Lig, "B") = ULab399.Caption
UserForm1.Controls("Label" & 181 + Col).Caption = IIf(.Cells(17, 5 + Col) > 0, Format(.Cells(17, 5 + Col), Euro), "") ' Restant dû
ULab217.Caption = Format(Ws.Cells(20, 5 + Col), Euro) ' Solde
If .Cells(20, 5 + Col) < 0 Then
ULab217.ForeColor = vbRed
End If
End With
End Sub
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 7/07/2012 à 11:00
Modifié par michel_m le 7/07/2012 à 11:00
Bonjour,
juste un petit passage pour dire que tes variables sont mal déclarées
(peut ^tre ton erreur 1):
Public ULab399, ULab217 As MSForms.Label
ULab399 est ainsi déclarée "variant" mais est ce valable pour un objet ?
il faut écrire
Public ULab399 As MSForms.Label, ULab217 As MSForms.Label
m^me punition pour colas byte, lig as integer
D'autre part pour la fonction formatdate et a moins que return soit une nouveauté 2010 (VBA)
Cette fonction est placée dans un module
Michel
juste un petit passage pour dire que tes variables sont mal déclarées
(peut ^tre ton erreur 1):
Public ULab399, ULab217 As MSForms.Label
ULab399 est ainsi déclarée "variant" mais est ce valable pour un objet ?
il faut écrire
Public ULab399 As MSForms.Label, ULab217 As MSForms.Label
m^me punition pour colas byte, lig as integer
D'autre part pour la fonction formatdate et a moins que return soit une nouveauté 2010 (VBA)
Public Function formatDate(expression As String) As String formatDate = Application.Proper(format(expression, "Dddd dd Mmmm yyyy")) End Function
Cette fonction est placée dans un module
Michel
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Climbfly, michel_m
Merci beaucoup pour vos réponses, ça marche pas trop bien, j'ai un peu toutes sortes d'erreurs et des lignes en rouge
je suis en VBA avec excel 2007
j'ai imprimer vos réponses je regarde encore cette après midi, pour j'ai la dalle
bon app a vous et encore merci
a plus tard Ray
Merci beaucoup pour vos réponses, ça marche pas trop bien, j'ai un peu toutes sortes d'erreurs et des lignes en rouge
je suis en VBA avec excel 2007
j'ai imprimer vos réponses je regarde encore cette après midi, pour j'ai la dalle
bon app a vous et encore merci
a plus tard Ray
6 juil. 2012 à 16:17
Bon voila ce que j'ai réussi a faire, si tu peux me dire si c'est OK et voir svp
si possible de faire mieux.
Merci pour ton aide
A plus tard
Ray