Cherche tutoriel SUMPRODUCT en VBA

Staple1600

XLDnaute Barbatruc
Bonsoir


Qui aurait:

des exemples d'utilisation de SUMPRODUCT en vba
(utilisation dans Userform avec Evaluate)

des liens à sujets

un tutoriel (la j'en demande peu-etre trop)

En tout cas merci à l'avance à ceux
qui pourront me fournir quelque infos que ce soit.
 

Jam

XLDnaute Accro
Re : Cherche tutoriel SUMPRODUCT en VBA

Salut Staple1600, et tout le monde,

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

Voili voilou et bon courage
 

Staple1600

XLDnaute Barbatruc
Re : Cherche tutoriel SUMPRODUCT en VBA

Bonsoir


Merci à tous

J'ai tenu compte de vos remarques et ajouts

Je bloque encore

Voir la pièce jointe

J'essaye de n'utiliser qu'une seule formule
et de boucler sur les labels

Voir le code
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : Cherche tutoriel SUMPRODUCT en VBA

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
 

Pièces jointes

  • test3d.zip
    24 KB · Affichages: 53
  • test3d.zip
    24 KB · Affichages: 54
  • test3d.zip
    24 KB · Affichages: 51

Staple1600

XLDnaute Barbatruc
Re : Cherche tutoriel SUMPRODUCT en VBA

(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

PS: je cherche toujours comment n'utiliser qu'une seule fois:
'Rep(???) = Evaluate("SumProduct((month(" & rng1 & ")=" & leMois & ")*(" & rng2 & "=""" & tbNom & """)* _
(" & OriginRng & "=""" & chaine(???) & """))")
 

Staple1600

XLDnaute Barbatruc
Re : Cherche tutoriel SUMPRODUCT en VBA

Autres questions
(suivant message Bebere, (merci à lui))

Comment transformer ceci?
Label4.Caption = Evaluate("SumProduct((month(" & Rng1 & ")=" & _
MoisChoisi & ")*(" & Rng2 & "=""" & TbNom & """)*(" & Rng3 & "=""x""))") 'dc
Label5.Caption = Evaluate("SumProduct((month(" & Rng1 & ")=" & _
MoisChoisi & ")*(" & Rng2 & "=""" & TbNom & """)*(" & Rng4 & "=""x""))") 'da

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)

Alors à plus tard.
 

Hervé

XLDnaute Barbatruc
Re : Cherche tutoriel SUMPRODUCT en VBA

bonjour

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)
en espérant t'avoir été utile.

salut
 

Discussions similaires

Statistiques des forums

Discussions
312 339
Messages
2 087 412
Membres
103 541
dernier inscrit
Sebast'o