Recherchev et nbsi en vba

bartelele

XLDnaute Junior
Bonjour à tous,

J’ai une base de données en Feuil1 avec lettres (a,b,c) assimilés à une date.

En Feuil2 en B4 j’ai une liste déroulante qui me permet de sélectionner par mois.

Ce que je souhaite faire c’est que lorsqu’on sélectionne « Janvier » dans la liste déroulante, le tableau en Feuil2 s’acrémente avec les lettres associés au mois en question et la quantité associé en face (pour éviter les doublons).

En sachant qu’on m’oblige de le faire via VBA … et j’y connais un peu rien…:(:mad:::confused:

Je suppose qu’il faudrait faire une boucle entre deux valeurs (premier et derniers jour du mois) pour rechercher ca dans la base de données et ensuite regarder la colonne d’après (comme un recherchev par exemple et un NB.SI pour la quantité) mais j’avoue que là je suis perdu sous vba.

J’ai vraiment besoin d’aide….

J’espère que vous pourrez m’aider, je vous joins un fichier pour l’exemple….


Merci d’avance.
 

Pièces jointes

  • Classeur1.xlsx
    13.7 KB · Affichages: 56
  • Classeur1.xlsx
    13.7 KB · Affichages: 63
  • Classeur1.xlsx
    13.7 KB · Affichages: 63

Modeste

XLDnaute Barbatruc
Re : Recherchev et nbsi en vba

Bonsoir bartelele,

Que tu sois obligé de travailler en vba ne doit pas te conduire à nous contraindre nous-mêmes à en assumer les conséquences :rolleyes: Il faudra accepter de te retrousser les manches à un moment quelconque.

Je ne sais trop à quoi servait le bouton que tu as prévu puisque tu disais que le code devait s'exécuter au changement dans la liste déroulante.
J'ai commenté le code, pour te donner un point de départ, ai prévu un petit test ou deux, mais il t'appartient maintenant de tester, adapter, modifier, etc ...

Tout ça, en imaginant que je n'ai pas compris de travers!?

Edit: Modification apportée à la pièce jointe: un commentaire mal placé provoquait une erreur.
Merci à DoubleZéro :) pour sa vigilance!
 

Pièces jointes

  • bartelele.xlsm
    21.5 KB · Affichages: 45
Dernière édition:

bartelele

XLDnaute Junior
Re : Recherchev et nbsi en vba

Merci Modeste pour ton aide.

Désolé du retard j'étais en déplacement... Du coup j'ai essayé de me retrousser les manches ^^

J'avances un peu (j'ai découvert countif :rolleyes:) mais j'ai un souci...

J'ai rajouté une nouvelle condition en plus de la date, j'ai l'impression que mon code est logique mais j'ai pas la logique vba ;)

Ya un gros bug ...

Si tu peux me donner une piste ce serait super !

Merci d'avance.

ps : le bouton c'est parce que j'ai deux conditions, ca laisse le temps de choisir.
 

Pièces jointes

  • bartelele2.xlsm
    24.7 KB · Affichages: 50
  • bartelele2.xlsm
    24.7 KB · Affichages: 49
  • bartelele2.xlsm
    24.7 KB · Affichages: 50

Modeste

XLDnaute Barbatruc
Re : Recherchev et nbsi en vba

Bonsoir bartelele,

Visiblement, en déplacement, tu réfléchis beaucoup ... au point que j'ai un peu de mal à comprendre et m'y retrouver :confused:
Ce que tu veux, c'est qu'en fonction des choix faits au niveau de la date et de "l'article", le programme (puisque tu es toujours obligé de travailler par macro) compte le nombre de fois où un siège, une vitre, une porte ou une ceinture figurent dans la liste?
Si j'ai bien compris, teste la pièce jointe (j'ai ajouté "à la volée" des situations supplémentaires dans ta liste en feuille1, sinon c'était un peu pauvre) A ce sujet, tu nous expliqueras pourquoi il y avait chaque fois une ligne vide entre les éléments de ta liste?

Donc teste ... et dis-nous,
 

Pièces jointes

  • bartelele2.xlsm
    24.4 KB · Affichages: 53
  • bartelele2.xlsm
    24.4 KB · Affichages: 49
  • bartelele2.xlsm
    24.4 KB · Affichages: 67

bartelele

XLDnaute Junior
Re : Recherchev et nbsi en vba

Merci Modeste ! :)
Tu as tout à fait compris, c'est exactement ce que j'essaie de faire depuis 3 jours... Comme tu l'as vu je suis débutant et j'ai pas tout compris à ce que tu as fait...:(

Est ce que tu peux m'expliquer avec un commentaire ce que ca signifie pour que je puisse m'améliorer ?

En tout cas je te remercie de ton aide et de ta patience :rolleyes:

------

Dim Model As String
Dim Cells3 As Range
Set liste = CreateObject("scripting.dictionary")
Target = Worksheets("Feuil2").Range("B4") 'defini target pour ce chemin
Model = Worksheets("Feuil2").Range("A6") 'defini model pour ce chemin

ActiveWorkbook.Sheets("Feuil2").Range("A7:B1000").ClearContents 'efface le contenu

For Each Cells3 In Worksheets("Feuil1").Range("B5:B" & Worksheets("Feuil1").Range("B1000").End(xlUp).Row) 'pour chaque cellule dans la feuil1 collone B
If IsDate(Cells3) Then 'si les cellules sont des dates
If Month(Cells3) = Month(Target) Then 'si les dates correspondent au mois selectionner dans la liste deroulante
If Cells3.Offset(0, 1) = Model Then 'si la cellule à droite de la date est égalle à l'article selectionner dans la liste deroulante
If Not liste.exists(Cells3.Offset(0, 2).Value) Then
liste(Cells3.Offset(0, 2).Value) = liste(Cells3.Offset(0, 2).Value) + 1
Else
liste(Cells3.Offset(0, 2).Value) = liste(Cells3.Offset(0, 2).Value) + 1
End If
End If
End If
End If
Next
If liste.Count > 0 Then
Worksheets("Feuil2").Range("A7").Resize(liste.Count, 1) = Application.Transpose(liste.keys)
Worksheets("Feuil2").Range("B7").Resize(liste.Count, 1) = Application.Transpose(liste.items)
End If
End Sub

-----

Pour 2012 YTD du coup je supose qu'il fait que je dise quelque chose comme ca ? ou c'est complètement déconnant?

If target = "2012 YTD" then
year(cells3) = year(01/01/2012)
end if


Merci encore pour ton aide ! :)
 

Modeste

XLDnaute Barbatruc
Re : Recherchev et nbsi en vba

Bonjour bartelele,

En commentant le code ci-dessous, je me suis aperçu qu'on pouvait le simplifier un brin:
VB:
Sub options()

Dim Model As String
Dim Cells3 As Range
Set liste = CreateObject("scripting.dictionary") 'voir l'aide pour Dictionary
Target = Worksheets("Feuil2").Range("B4") 'pas indispensable, mais figurait dans ton code
Model = Worksheets("Feuil2").Range("A6") 'idem

ActiveWorkbook.Sheets("Feuil2").Range("A7:B1000").ClearContents 'ça, tu avais compris

For Each Cells3 In Worksheets("Feuil1").Range("B5:B" & Worksheets("Feuil1").Range("B1000").End(xlUp).Row)
'on parcourt la plage, en feuil1, de B5 à la dernière cellule non-vide de la même colonne (en "remontant" depuis B1000)
    If IsDate(Cells3) Then 'si on veut pouvoir extraire le mois, mieux vaut qu'il s'agisse d'une date
        If Month(Cells3) = Month(Target) Then 'on compare les mois des deux dates
            If Cells3.Offset(0, 1) = Model Then 'si la cellule juste à droite de la date contient l'article cherché
                liste(Cells3.Offset(0, 2).Value) = liste(Cells3.Offset(0, 2).Value) + 1
                'pour l'élément du Dictionary correspondant à la clé "vitre", "porte", ... on ajoute 1 à l'élément
            End If
        End If
    End If
Next
If liste.Count > 0 Then 'pour éviter une erreur si liste est vide
    Worksheets("Feuil2").Range("A7").Resize(liste.Count, 1) = Application.Transpose(liste.keys)
    Worksheets("Feuil2").Range("B7").Resize(liste.Count, 1) = Application.Transpose(liste.items)
End If
End Sub

Pour plus d'infos sur le sujet, voir chez JB, notamment.
 

raphde

XLDnaute Nouveau
Re : Recherchev et nbsi en vba

Bonjour,

Débutant en VBA je rencontre un petit soucis auquel vous allez surement pouvoir m'éclairer.
J'ai un fichier Excel avec lequel en :

- Feuille 2 je dispose d'un historique quotidien de tout les appels entrants/sortant.
- Feuille 3 je dispose de la base client avec plusieurs numéro pour un client.

Ce que je souhaiterais, c'est que si jamais un des numéros d'un client (Base client) figure dans l'historique des appels Entrants/Sortants, a ce moment la qu'il renseigne en Collonne K (Feuil 3)

J'ai pensé à faire un RECHERCHEV pour chaque colonnes des numéros de téléphones (Tel1-Tel2-Tel3....) mais ca reste trop long et peut efficace.

Si une personne pourrait m'éclairer la dessus.

Ci joint Fichier

Je vous remercie.

Cordialement,

RD
 

Pièces jointes

  • Test appels.xlsm
    48.2 KB · Affichages: 147

Discussions similaires

Réponses
14
Affichages
643

Statistiques des forums

Discussions
312 216
Messages
2 086 344
Membres
103 193
dernier inscrit
tedelio