Recherche de valeurs (additionnées) sous Excel

Signaler
Messages postés
2
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
25 mai 2007
-
Messages postés
2
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
25 mai 2007
-
 
    Bonjour, je suis un amateur en programmation et je cherche un code ou une manière pour rechercher une valeur, ou une somme de valeurs dans un tableau Excel, par somme je veux dire une somme de cellules (une, deux ou plus).<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 

Je pense que les informations à définir sont les suivantes :

1 - définir une colonne de recherche.

2 - définir une valeur à recherché.

 

La valeur trouvé peut être soit directement la valeur recherché ou soit une addition de valeurs compris dans la colonne de recherche.

 

Dans un premier temps, je pense seulement utiliser l’addition mais peut être que j’utiliserai la soustraction ultérieurement.

 

Merci d’avance pour vos suggestions et votre aide.

3 réponses

Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Salut regarde du côté de la fonction Find (F1)

 Drikce 06 (ForumOfficeEtVBA)
Si la réponse vous convient: Réponse acceptée.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

a part l'addition que je n'ai pas trop compris, pour ce qui est de la recherche paramétrée, je pense que mon snippet pourrait faire l'affaire :

Public Function FindWord(ByVal sWord As String, Optional vPlage As Variant, Optional wSheet As Variant = "ActiveSheet") As String()
        Dim bVerifPlage As Boolean, rStartCell As Range
    If Not wSheet = "ActiveSheet" Then Sheets(wSheet).Select
        'vérification de la feuille à traiter
    If Not IsMissing(vPlage) Then bVerifPlage = True
        'vérification d'une possible
plage
       
        Dim cMyAddress      As New Collection
        Dim sRes()          As String
        Dim ParseRange()    As String
    
    If bVerifPlage = False Then
        ' s'il n'y pas de
plage, on vérifie dans toute la feuille
        Cells.Find(What:=sWord, After:=ActiveCell, LookIn:=xlFormulas,
LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:=False _
            , SearchFormat:=False).Activate: cMyAddress.Add
ActiveCell.Address
        Set rStartCell = ActiveCell
        Do
            Cells.FindNext(After:=ActiveCell).Activate: cMyAddress.Add
ActiveCell.Address
        Loop While ActiveCell.Address <>
Range(rStartCell).Address
        
        ' on
place l'adresse des cellules dans un tableau de données
        ' il sera facile de savoir après quelles cellules
contiennent
        ' les données recherchées. (où
même sélectionner ces cellules)
            ReDim sRes(cMyAddress.Count -
1)
        For i = 0 To cMyAddress.Count - 1
            sRes(i) = cMyAddress.Item(i + 1)
        Next i
    Else
        ' s'il y pas une plage,
on vérifie seulement dedans
            Dim rPlage As Range
        Set rPlage = vPlage
        ' on instancie l'objet (plage) en récupérant sa
valeur
        ParseRange = Split(CStr(rPlage.Address), ":")
        ' ici je récupère la dernière cellule de recherche, afin
de la sélectionner
        ' comme ça, le résultat
sera chronologique (sinon, la recherche s'effectue
        ' depuis la cellule sélectionnée)
        Range(ParseRange(1)).Select
        
        rPlage.Find(What:=sWord, After:=ActiveCell, LookIn:=xlFormulas,
LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:=False _
            , SearchFormat:=False).Activate: cMyAddress.Add
ActiveCell.Address
        Set rStartCell = ActiveCell
        Do
            rPlage.FindNext(After:=ActiveCell).Activate: cMyAddress.Add
ActiveCell.Address
        Loop While ActiveCell.Address <>
Range(rStartCell.Address).Address
        
        ' on place l'adresse des cellules dans un tableau de
données
        ' il sera facile de savoir après
quelles cellules contiennent
        ' les données
recherchées. (où même sélectionner ces cellules)
            ReDim sRes(cMyAddress.Count -
2)
        For i = 0 To cMyAddress.Count - 2
            sRes(i) = cMyAddress.Item(i + 1)
        Next i
    End If
    FindWord = sRes: Set cMyAddress = Nothing: Erase sRes
End Function

Sub Exemple_Utilisation()
    Dim sResult() As String, l As Integer
    
    sResult = FindWord("bonjour", Range("C23:Z114"), "Feuil3")
    '  autres exemples d'utilisation
    'sResult = FindWord("abc", Range("A1:B20"))
    'sResult = FindWord(UserForm1.ComboBox1.Text,
Range("A1:B20"))
    
    For l = 0 To UBound(sResult)
        Debug.Print "-" & sResult(l) & "-"
    Next l
    Erase sResult
End Sub
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++
<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~

Nouveau Forum : Exclusivement Office & VBA
                                                                                                       
Messages postés
2
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
25 mai 2007

deja merci,

je sais l'histoire de l'addition c'était pas trop clair, alors je vais essayer de l'être maitenant:

Tu rentres comme valeur à rechercher "5" dans telle colonne.

Et le resultat t'indique la ligne qui contient 5, mais aussi les lignes qui font 5 en les additionnant : genre 2+3 ou 1+4.
Voila en espérant être plus simple et compréhensible.

Encore merci je suis en plein dedans.

touftoufbic