touftoufbic
Messages postés2Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention25 mai 2007
-
24 mai 2007 à 13:48
touftoufbic
Messages postés2Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention25 mai 2007
-
25 mai 2007 à 18:05
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.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 24 mai 2007 à 15:25
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
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~
touftoufbic
Messages postés2Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention25 mai 2007 25 mai 2007 à 18:05
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.