macro recherche+cumul

  • Initiateur de la discussion stef94
  • Date de début
S

stef94

Guest
Bonjour
Qui peut trouvez une solution à mon problème!
Je voudrais donc une macro qui:
- Puisse me rechercher 'carottes' présent dans toutes les feuilles excel.
Chaque mot 'carottes' trouvé comporte une cellule de droite avec une valeur.

La macro devra faire le cumul de toutes ces valeurs.

Avis aux amateurs!!!
Et merci d'avance
Stéphane
 

Hervé

XLDnaute Barbatruc
bonsoir stef94, le forum

ce type de macro devrait faire le boulot :

Option Explicit
Sub Bouton1_QuandClic()
Dim ws As Worksheet
Dim c As Range
Dim firstaddress As String
Dim nombre As Integer
Dim total As Double

For Each ws In Worksheets
   
With ws
       
Set c = .Cells.Find('carottes', LookIn:=xlValues)
       
If Not c Is Nothing Then
            firstaddress = c.Address
           
Do
                nombre = nombre + 1
                total = total + c.Offset(0, 1)
               
Set c = .Cells.FindNext(c)
           
Loop While Not c Is Nothing And c.Address <> firstaddress
&nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
End With
Next ws

MsgBox 'Nous avons trouvé ' & nombre & ' carottes, représentant un total de : ' & total
End Sub

salut
 
S

stef94

Guest
Bonsoir hervé,
Eh bien je peux dire que vous êtes un roi du visual et je vous en remercie.
Je voudrais savoir, quelle modif je dois faire si les valeurs sont en dessous de la cellule 'carottes' et non plus à droite.
Et pour compliquer le tout je voudrais faire un choix de mes produits par une liste déroulante 'carottes', 'kiwi'etc...
Merci d'avance
Stéphane
 

Hervé

XLDnaute Barbatruc
bonsoir stef94, le forum

merci pour le roi, mais l'ossature de cette macro m'a été donné par l'aide de VBA, je suis un roi, oui mais des fainéants :)

pour revenir à ton souci, je suppose que ta liste déroulante est une liste de validation se trouvant en cellule A1 de ta feuille active.

sinon il faudra que tu adaptes.

Option Explicit
Sub Bouton1_QuandClic()
Dim ws As Worksheet
Dim c As Range
Dim firstaddress As String
Dim nombre As Integer
Dim total As Double
Dim cherche As String

cherche = Range('a1')

For Each ws In Worksheets
&nbsp; &nbsp;
With ws
&nbsp; &nbsp; &nbsp; &nbsp;
Set c = .Cells.Find(cherche, LookIn:=xlValues)
&nbsp; &nbsp; &nbsp; &nbsp;
If Not c Is Nothing Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstaddress = c.Address
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Do
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nombre = nombre + 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; total = total + c.Offset(1, 0)
'c'est ici que tu dois jouer pour rechercher telle ou telle cellule, regarde dans l'aide
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Set c = .Cells.FindNext(c)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Loop While Not c Is Nothing And c.Address <> firstaddress
&nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
End With
Next ws

MsgBox 'Nous avons trouvé ' & nombre - 1 & ' ' & cherche & ', représentant un total de : ' & total
'le nombre-1 évite que le code compte le carotte de la liste de validation mise en A1
End Sub



salut
 
S

Stef94

Guest
Bonsoir hervé,
Eh bien j'ai essayé pour la liste déroulante mais le problème c'est que la macro me compte ma base de donnée pour ma liste déroulante et ma liste déroulante soit pour ex: 2 carottes.
Pourrions nous faire une recherche + cumul de toutes les feuilles sauf la feuille1 pour mettre la liste déroulante et la base de données dans cette feuille.
Merci d'avance
Stéphane
 

Hervé

XLDnaute Barbatruc
bonsoir stef, le forum

c'est pour ca que je rajoutais -1 dans le msgbox final :)

donc, une variante ou on exclus la feuille 1 de la recherche :

Option Explicit
Sub Bouton1_QuandClic()
Dim ws As Worksheet
Dim c As Range
Dim firstaddress As String
Dim nombre As Integer
Dim total As Double
Dim cherche As String

cherche = Sheets('feuil1').Range('a1')

For Each ws In Worksheets
&nbsp; &nbsp;
If ws.Name <> 'Feuil1' Then
&nbsp; &nbsp; &nbsp; &nbsp;
With ws
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Set c = .Cells.Find(cherche, LookIn:=xlValues)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
If Not c Is Nothing Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstaddress = c.Address
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Do
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nombre = nombre + 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; total = total + c.Offset(1, 0)
'c'est ici que tu dois jouer pour rechercher telle ou telle cellule, regarde dans l'aide
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Set c = .Cells.FindNext(c)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Loop While Not c Is Nothing And c.Address <> firstaddress
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp; &nbsp; &nbsp;
End With
&nbsp; &nbsp;
End If
Next ws

MsgBox 'Nous avons trouvé ' & nombre & ' ' & cherche & ', représentant un total de : ' & total
'le nombre-1 évite que le code compte le carotte de la liste de validation mise en A1
End Sub

salut
 
S

Stef94

Guest
Bonsoir,
Effectivement, je n'avais pas remarqué le -1 pour ne pas prendre en compte la liste déroulante.Décidement vous êtes vraiment très fort donc je vous demande si vous pouvez améliorer le programme.
Solution -1 efficace que je remplace par -2 (base de donnée+liste).
On oublie l'hisoire de la nom prise en compte de la feuille 1.
Je voudrais donc que lorsque je selectionne 'carottes' dans ma liste déroulante, la bôite de message reste identique et le plus serait de mettre ces valeurs trouvées à côté de ma base de donnée.

Feuille 1

A1: texte liste déroulante D1: texte base de donnée
A2: liste déroulante (carotes, kiwi,etc) D2:carottes
D3:kiwi

E1: texte nous avons trouvé F1: total
E2:Valeur trouvé nbre carottes F2:valeur trouvée total carottes
E3:Valeur trouvé nbre kiwi F3:valeur trouvée total kiwi

Merci d'avance
Stéphane
 
S

stef94

Guest
hervé where are you?

Bonsoir,
Je cherche hervé, il m'avait bien aidé et je suis au terme de mes exigences.hervé êtes vous là ca m'arrangerais bien si vous pouviez trouver une solution à cette macro.
Merci d'avance
Stéphane
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re:hervé where are you?

Bonjour Steph

Je t'encourage à lire ce fil dans son intégralité (les posts de Brigitte et Hervé en particulier) tu verras qu'il y a plein de choses très constructives même si je ne dis pas que tu agis de la même manière (quoique le titre de ton post n'est pas terrible car on n'appelle pas un xldnaute ainsi)

Lien supprimé

Bonne journée

Message édité par: Pascal76, à: 14/09/2005 08:48
 

Hervé

XLDnaute Barbatruc
Re:hervé where are you?

Bonjour stef94, pascal, le forum

merci pascal :)

Stef94, ci dessous ta macro modifié suivant tes explications :

Sub Bouton1_QuandClic()
Dim ws As Worksheet
Dim c As Range
Dim firstaddress As String
Dim nombre As Integer
Dim total As Double
Dim cherche As String
Dim cellules As Range

cherche = Sheets('feuil1').Range('a2')

For Each ws In Worksheets
&nbsp; &nbsp;
'If ws.Name <> 'Feuil1' Then
&nbsp; &nbsp; &nbsp; &nbsp;
With ws
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Set c = .Cells.Find(cherche, LookIn:=xlValues)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
If Not c Is Nothing Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstaddress = c.Address
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Do
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nombre = nombre + 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
If IsNumeric(c.Offset(1, 0)) Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; total = total + c.Offset(1, 0)
'c'est ici que tu dois jouer pour rechercher telle ou telle cellule, regarde dans l'aide
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Set c = .Cells.FindNext(c)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Loop While Not c Is Nothing And c.Address <> firstaddress
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp; &nbsp; &nbsp;
End With
&nbsp; &nbsp;
' End If
Next ws

Select Case cherche
&nbsp; &nbsp;
Case 'carottes'
&nbsp; &nbsp; &nbsp; &nbsp;
Set cellules = Range('e2')
&nbsp; &nbsp;
Case 'kiwi'
&nbsp; &nbsp; &nbsp; &nbsp;
Set cellules = Range('e3')
&nbsp; &nbsp;
'etc.... pour les autres légumes ou fruits
End Select

cellules = nombre - 2
cellules.Offset(0, 1) = total
End Sub


salut
 
S

stef94

Guest
cumul+recherche

Bonsoir,
Super ca marche.
Je te tenais à vous remercier XLDNAUTES et tout particulierement vous hervé car c'est vraiment sympa ce que vous faites pour nous novice.Je vous souhaite une bonne continuation.
Stéphane
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 979
dernier inscrit
bderradji