Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Première simplification qui me parait essentielle: Utiliser des nom de variables parlant, par exemple:
Pour variant utiliser varNomDeVariable
Byte -> bNomDeVariable
Integer -> intNomDeVariable
String -> strNomDeVariable
etc...
Cela rend le code beaucoup plus lisible (surtout si on recherche des erreurs de type de variable )
Les noms de chaînes peuvent être définis dans des Constantes.
ex.: Fchaine = "Flyers" devient
Const strFchaine As String ="Flyers"
Quoique dans ton cas il est vrai que l'utilisation d'Array("...","...") serait plus approprié.
L'utilisation des plages nommées est aussi une (fort) bonne idées.
Au lieu de déclarer des variables, il suffit de pointer sur les noms
ex.: au lieu de rng1 = .Range("A2:A25").Address il suffirait d'y mettre un nom genre "Date"
Ensuite dans les fonction Sumproduct tu utilises ces noms ex.:
RepDA = Evaluate("SumProduct((month(" & range("MonNom") & ")="
Pour finir ton code comporte des variables inutilisées:
tbMois, rng5 et rng6
Dans la procédure UserForm_Initialize tu peux écrire:
Code:
For i = 1 To 12
.AddItem UCase(Format(30 * i, "mmmm")) 'cbmois retiré !
Next i
bonjour le fil
liste des mois existant sans doublons pour combobox
liste des noms qui sont dans mois choisi sans doublons pour listbox
3 formules une pour dc,da,origine
à bientôt
(MESSAGE REDIGE AVANT la lecture de la réponse de Bebere)
Bonjour à tous
Voila mes questions du jour
Question 1
Dans les solutions ci-dessous, lesquelles sont les plus pertinentes
et quelles sont mes erreurs?
Question 2
Dans ce genre de situation, quel serait votre code VBA?
(en tenant ou ne tenant pas compte des propositions ci-dessous)
Merci pour vos eclaircissements et conseils avisés.
Bonne journée à tous.
'Dim c As Control
'Dim compteur
'chaine = Array("X", "Flyers", "Annuaire", "Bouche a oreille", "Magasin")
???= je ne sais pas quoi mettre (ou plutot ce que je mets déclenche une erreur ou ne déclenche rien)
SOLUTION 1
'For Each c In Me.Controls
'Select Case Left(c.Name, 3)
'Case "lbR"
'For compteur = 1 To 4
'???.Caption = chaine(compteur)
'Next compteur
'End Select
'Next c
SOLUTION 2
'For Each c In Me.Controls
'Select Case TypeName(c)
'Case "Label"
'For compteur = 1 To 4
'Controls("Label" & compteur).Caption = chaine(compteur)
'Next compteur
'End Select
'Next c
SOLUTION 4
'For Each c In Me.Controls
'Select Case c.Tag
'Case "F", "A", "B", "M"
'For compteur = 1 To 4
'Controls("Label" & compteur).Caption = chaine(compteur)
'Next compteur
'End Select
'Next c
SOLUTION 5
'With Me.Controls
' Select Case TypeName(???)
' Case Is = "Label"
' For compteur = 1 To 4
' Controls("Label" & compteur).Caption = chaine(compteur)
' Next compteur
' End Select
'End With
en utilisant quelquechose du style
Label(i).Caption=Evaluate(....rng(i)=""x""
Bebere, j'ai compris la majorité de ton code
Une question:
comment faire s'il y a des fautes de saisies
ex: fylers ou lieu de Flyers dans la feuille etc
Pourquoi la solution
chaine=Array(... n'est-elle pas bonne?
Merci en tout cas à tous.
Bonne journée
(PS je risque d'être absent du forum d'ici à début novembre)
pour la solution 1 je verrais plutot un truc dans ce style :
Code:
Dim chaine
Dim c As Control
Dim cpt As Integer
chaine = Array("X", "Flyers", "Annuaire", "Bouche a oreille", "Magasin")
For Each c In Me.Controls
Select Case Left(c.Name, 3)
Case "lbR"
c.Caption = chaine(cpt)
cpt = cpt + 1
End Select
Next c
ou plus court :
Code:
Dim c As Control
Dim cpt As Integer
For Each c In Me.Controls
Select Case Left(c.Name, 3)
Case "lbR"
c.Caption = Array("X", "Flyers", "Annuaire", "Bouche a oreille", "Magasin")(cpt)
cpt = cpt + 1
End Select
Next c
Attention un tableau array est en option base 0, c'est à dire que sont premier élément est indéxé 0 et non 1, macro exemple :
Code:
Dim chaine
chaine = Array("X", "Flyers", "Annuaire", "Bouche a oreille", "Magasin")
MsgBox "premier index n° : " & LBound(chaine) & vbNewLine _
& "dernier index n° : " & UBound(chaine)
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.