Tableau et variables de différentes valeurs Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
D
DS3469
Membre habitué
Membre habitué
Messages : 86
Inscrit le : 27 septembre 2014
Version d'Excel : 2010

Message par DS3469 » 29 novembre 2014, 05:46

Bonjour,
Ci-dessous le code de ma macro
Private Sub PRIMES()
Dim ANNEE As Integer
Dim ANNEE_PREC As Integer
Dim NoDerLigne As Integer
Dim TableauNPREC(1 To 12) As Double 'tableau des 12 mois
Dim ChoixFeuille As Worksheet 'Choix de la feuille
Dim NoLigne As Integer
Dim NoMoisNPREC As Integer
Dim MontantNPREC As Double
Dim NATURE As String
Dim PRODUIT As String

Dim I As Integer
Dim MOIS As Integer
Dim datedebnprec As Date
Dim datefinnprec As Date
 
NATURE = "TTT"
PRODUIT = "A"

ANNEE = Sheets("Accueil").Range("AQ1").Value
ANNEE_PREC = ANNEE - 1
Set ChoixFeuille = Worksheets("Feuil1")


'dernière ligne de l'onglet base base
NoDerLigne = ChoixFeuille.Range("A" & Rows.Count).End(xlUp).Row

'On definit les mois de l'année N-1
For MOIS = 1 To 12
datedebnprec = DateSerial(ANNEE_PREC, MOIS, 1)
datefinnprec = DateSerial(ANNEE_PREC, MOIS + 1, 1)

For NoLigne = 2 To NoDerLigne
If ChoixFeuille.Range("AC" & NoLigne) >= datedebnprec And ChoixFeuille.Range("AC" & NoLigne) < datefinnprec And ChoixFeuille.Range("I" & NoLigne) = NATURE And ChoixFeuille.Range("O" & NoLigne) = PRODUIT Then

'parcours de toutes les lignes de l'onglet base
NoMoisNPREC = Month(ChoixFeuille.Range("AC" & NoLigne).Value)
MontantNPREC = ChoixFeuille.Range("D" & NoLigne).Value
TableauNPREC(NoMoisNPREC) = TableauNPREC(NoMoisNPREC) + MontantNPREC
End If

Next NoLigne
Next MOIS
    
'écriture du résultat
For I = 1 To 12
Controls("TextBox" & I + 58).Value = TableauNPREC(I)
Controls("TextBox" & I + 58) = Format(Controls("TextBox" & I + 58), "### ### ##0")
Next I

Dim somme As Long
somme = 0
For I = 1 To 12
somme = somme + Val(Controls("TextBox" & I + 58).Value)
Next I
TextBox71.Value = somme
Controls("TextBox71") = Format(Controls("TextBox71"), "### ### ##0")

Set ChoixFeuille = Nothing

End Sub
Ce code fonctionne bien.
Mon souci se trouve dans la variable "PRODUIT".
Ici PRODUIT= "A".
Il faudrait que je puisse avoir quelque chose du genre:
PRODUIT= "A" or "B" or "C"............ (il peut y avoir 15 valeurs) ou
PRODUIT= Array ("A","B", "C"........)

Mais cela ne fonctionne pas.
J'ai un message "Erreur d'exécution 13 - Incompatibilité de type .

Quelqu'un aurait une idée ?

D'avance Merci.
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'358
Appréciations reçues : 283
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 29 novembre 2014, 06:00

Bonjour,

Pourquoi ne pas passer ton argument par ByVal dans ta procédure ...
Sub Primes(ByVal Produit As String)
Il ne te reste qu'à adapter l'appel à ta macro ...
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
D
DS3469
Membre habitué
Membre habitué
Messages : 86
Inscrit le : 27 septembre 2014
Version d'Excel : 2010

Message par DS3469 » 29 novembre 2014, 06:42

Bonjour,

Merci pour ta réponse.
Je ne peux voir si cela fonctionne car je n'arrive plus à lancer la macro.
J'imagine que c'est ce que tu voulais dire par "adapter l'appel à ta macro.."
Le lancement de la macro se faisait par Userform initialize où je mettais juste le nom de la macro.
Le message d'erreur que j'ai maintenant est "Erreur de compilation - Argument non facultatif"

Je ne connais pas ByVal et comment cela fonctionne.

Merci de ton aide
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'358
Appréciations reçues : 283
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 29 novembre 2014, 07:15

Re,

Effectivement, tu as raison ...

Tu dois adapter dans ta UserForm l'instruction de lancement avec le Produit (qui est donc variable) et qui devenu le paramètre de ta macro ...
Application.Run NomMacro, Paramètre
Si tu rencontres des difficultés, il faudra que tu postes le code de ta UserForm ...
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
D
DS3469
Membre habitué
Membre habitué
Messages : 86
Inscrit le : 27 septembre 2014
Version d'Excel : 2010

Message par DS3469 » 29 novembre 2014, 22:07

Bonjour,

Je coince .

Si j'ai bien compris, avec byval, la macro devient:
Private Sub PRIMES(ByVal Produit As String)
Auparavant, pour lancer ma macro, je la mettais dans Userform initiaze sous forme:
Private Sub UserForm_Initialize()
PRIMES
End Sub
Si je remplace par:
Private Sub UserForm_Initialize()
Application.Run ("PRIMES", "PRODUIT)
End Sub
J'ai un message d'erreur "Attendu: ="
Où est le problème ? (je suis avec excel 2003)

En cherchant une solution, j'ai lu que le "byval" pouvait ralentir l'execution de la macro
Est ce vrai ?

J'aurais à prendre en compte d'autres critères dans d'autres colonnes.
Je mets en pièce jointe un fichier précisant ce que je cherche à titre d'exemple.
Le code mis en début de post fonctionne mais si j'augmente les critères de choix, je coince.
Le fichier joint donne bien les montants mensuels globaux
Mais je souhaite obtenir les montant pour les "vendeurs de jouets" dont la liste peut être longue, concernant les articles de Noel (dont la liste peut être longue).
Je crois que c'est parce que je ne maitrise pas bien les tableau.

Merci de votre aide
EssaiREC.xls
(34.5 Kio) Téléchargé 21 fois
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'358
Appréciations reçues : 283
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 30 novembre 2014, 08:30

Bonjour,

Le fichier que tu as joint ... me laisse très perplexe ... :roll:

Est-ce un fichier très tronqué ... ? Car, je ne comprends pas du tout comment il pourait fonctionner ...???
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
D
DS3469
Membre habitué
Membre habitué
Messages : 86
Inscrit le : 27 septembre 2014
Version d'Excel : 2010

Message par DS3469 » 30 novembre 2014, 12:06

Bonjour,

C'est effectivement un fichier simplifié à titre d'exemple.

La feuille1 sert de base de données.

En l'état, lorsque l'on clique sur le bouton 1, un usf s'ouvre.
On a une "colonne" pour 2013 et une pour 2014.
Chaque "ligne" fait apparaitre l'activité mensuelle, et la dernière le total.
Pour Janvier 2013 on a un résultat de 40.
Ce résultat correspond au montant réalisé en janvier 2013. C'est le code actuel, qui ne prend en compte que la colonne montant et date.
Je souhaiterais modifier le code en prenant en compte la colonne Nom et produit pour répondre à la question du type:
Quel est le montant vendu par les Vendeurs de jouets (= Charles, Bernard,.....=...liste à définir), concernant les produits de noel (=A,B......= liste à définir) pendant le mois de Janvier 2013 ?

Vois tu ce que cherche à faire ?
Merci de ton aide
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'358
Appréciations reçues : 283
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 30 novembre 2014, 12:25

Bonjour,

Je comprends ton objectif final ...

Ma recommendation serait qu'avant de te compliquer la vie ... tu commences par le début ...

De mon point de vue, il serait pertinent d'oublier ta UserForm ... et de te concentrer sur la façon de faire fonctionner le filtrage des données ... :wink:

Ensuite, tu auras tout le temps de programmer l'aspect cosmétique ... si le besoin s'en fait sentir ...
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
D
DS3469
Membre habitué
Membre habitué
Messages : 86
Inscrit le : 27 septembre 2014
Version d'Excel : 2010

Message par DS3469 » 30 novembre 2014, 12:44

Re,

Mon projet est déjà bien avancé, mais je bloque sur ce point et j'aimerais bien le résoudre.
Même par simple curiosité je souhaiterais savoir comment cela se fait.
J'ai un fichier excel qui me donne les résultats, mais cela ne me convient pas

Si tu as une solution, je suis preneur.

Merci
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'358
Appréciations reçues : 283
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 30 novembre 2014, 12:46

Re,

Il n'y a aucune curiosité mal placée ...

La UserForm, pour réaliser ce que tu veux, va avoir besoin d'une macro qui .... effectue le filtrage ... :wink:
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message