XL 2010 VBA : Comment faire une recherche sur une plage "bornée

Phillip

XLDnaute Occasionnel
Bonjour,

J'ai un problème pour écrire un code. Voir l'exemple joint.

Dans ma colonne, j'ai un certain nombre de valeurs, ici tata et toto, et je voudrais que mon code fasse des opérations sur les lignes qui contiennent toto (j'ai fait ce code, il marche, ici n'est pas le problème).

Mon problème est que je n'ai pas toujours le même nombre de lignes contenant toto : donc j'ai pensé "encadrer" mes lignes toto par "debut" et "fin", puis nommer la zone de debut+1 à fin -1 et dans cette zone, faire une boucle for each pour traiter mes lignes toto. Mais je ne sais pas non plus sur quelle ligne vont se trouver "debut" et "fin" puisque avant "debut" j'ai un certain nombre de tata qui peut changer aussi...


j'espère avoir été clair...

merci de votre aide

Cordialement

Phillip
 

Pièces jointes

  • probleme_de_find.xlsx
    8.9 KB · Affichages: 35

vgendron

XLDnaute Barbatruc
Re : VBA : Comment faire une recherche sur une plage "bornée

Bonjour,

j'ai pas tout compris parce que ton code n'apparait pas... mais pour nommer une zone dynamiquement c-a-d qui s'adapte automatiquement au nombre de valeurs

tu fais
Menu formules - section Noms définis: Gestionnaire de noms
nouveau:
nom: TabData (par exemple)
fait référence: =DECALER(Sheet1!$E$1;;;NBVAL(Sheet1!$E:$E))
 

CISCO

XLDnaute Barbatruc
Re : VBA : Comment faire une recherche sur une plage "bornée

Bonjour

Tu ne peux pas faire avec quelque chose du genre
Code:
Sub toto()
For Each c In Range("E1:E1000")
If c = "toto" Then Cells(c.Row, 6) = 4
Next c
End Sub

@ plus

P.S : Bonjour Vgendron
 

Phillip

XLDnaute Occasionnel
Re : VBA : Comment faire une recherche sur une plage "bornée

Pardon...

Voici un bout de code. Ca marche très bien car j'ai défini précisement débuttoto et fintoto, mais je voudrais que ça marche dynamiquement comme exposé ci-dessus

Code:
Sub cherchertoto()




Set debuttoto = Cells(13, 5)
Set fintoto = Cells(39, 5)


Set zonetoto = Range(debuttoto, fintoto)

For Each element In zonetoto
    If element <> "" Then
    compteur = compteur + Cells(element.Row, element.Column - 1).Value
    element.EntireRow.ClearContents
    End If
    
    
Next element

Range("c2").Value = compteur


End Sub
 

vgendron

XLDnaute Barbatruc
Re : VBA : Comment faire une recherche sur une plage "bornée

Hello tous

bon..

toujours pas compris..
à mon avis ton fichier est incomplet.. puisque que tu sembles faire la somme de chiffres situés en colonne D..

essaie avec ce code
Code:
Sub cherchertoto()

For Each element In Range("TabData")
    If element = "toto" Then
    compteur = compteur + Cells(element.Row, element.Column - 1).Value
    element.EntireRow.ClearContents
    End If
Next element

Range("c2").Value = compteur


End Sub

TabData étant la zone dynamique comme défini dans mon précédent post..
 

gosselien

XLDnaute Barbatruc
Re : VBA : Comment faire une recherche sur une plage "bornée

Pas clair...

tu veux effacer/supprimer des lignes et compter ce qui reste ?
explique un peu mieux ton problème et...comme souvent je parie que le fichier originel sera différent de ta liste proposée; il serait préférable de mettre une copie anonymisée du vrai fichier :)


Tu peux nommer la zone avant comme indiqué dans les post précédants

Application.ScreenUpdating = False
' nommer les colonnes
Application.DisplayAlerts = False
Sheets("sheet1").Select
Range("E1").Select
Selection.CurrentRegion.Select
Selection.CreateNames Top:=True, Left:=False, Bottom:=False, Right:=False
Application.DisplayAlerts = True
For Each element In [tous] ' "TOUS" ETANT LE TITRE MIS A LA PREMIERE LIGNE DE TA COLONNE E

bla bla

next


P.
 
Dernière édition:

Phillip

XLDnaute Occasionnel
Re : VBA : Comment faire une recherche sur une plage "bornée

Merci vgendron de ta persévérance...Effectivement, il manque un bout de fichier, mais ça n'est pas grave...Mon problème est de définir ma zone de recherche de toto. Dans mon bout de code, je définis ma zone de recherche statiquement avec
Code:
Set debuttoto = Cells(13, 5)
Set fintoto = Cells(39, 5)


Set zonetoto = Range(debuttoto, fintoto)

1) Je ne sais pas ce que j'ai au dessus de mes cellules toto, ni combien
2) je ne sais pas combien j'ai de lignes toto
3) le nombre de lignes contenant tata par exemple au dessus de mes toto peut changer
4) le nombre de lignes contenant toto peut changer également

Je voudrais par exemple avoir une ligne debut et une ligne fin et entre les deux ça serait ma zone de recherche de toto définie dynamique grâce à debuttoto et fintoto dynamiques.

J'espère avoir été plus clair

merci

Cordialement
 

gosselien

XLDnaute Barbatruc
Re : VBA : Comment faire une recherche sur une plage "bornée

Merci vgendron de ta persévérance...Effectivement, il manque un bout de fichier, mais ça n'est pas grave...Mon problème est de définir ma zone de recherche de toto. Dans mon bout de code, je définis ma zone de recherche statiquement avec
Code:
Set debuttoto = Cells(13, 5)
Set fintoto = Cells(39, 5)


Set zonetoto = Range(debuttoto, fintoto)

1) Je ne sais pas ce que j'ai au dessus de mes cellules toto, ni combien
2) je ne sais pas combien j'ai de lignes toto
3) le nombre de lignes contenant tata par exemple au dessus de mes toto peut changer
4) le nombre de lignes contenant toto peut changer également

Je voudrais par exemple avoir une ligne debut et une ligne fin et entre les deux ça serait ma zone de recherche de toto définie dynamique grâce à debuttoto et fintoto dynamiques.

J'espère avoir été plus clair

merci

Cordialement

Tous ça reste vague..., sorry :)

coucou à mes petits camarades de classe :)
 

vgendron

XLDnaute Barbatruc
Re : VBA : Comment faire une recherche sur une plage "bornée

Bon..
retentative en partant de ma compréhension: à savoir
dans ta colonne E, tu as les mots "début" et "fin" (ou et comment tu les places..???)

la macro commence donc par rechercher ces deux mots
puis défini la zone
et fait ton traitement

Code:
Sub cherchertoto()

With ActiveSheet.Range("E:E")
    Set C = .Find("debut")
    If Not C Is Nothing Then debut = C.Address
    Set C = .Find("fin")
    If Not C Is Nothing Then fin = C.Address
End With

Set zone = Range(debut, fin)

For Each element In zone
    If element = "toto" Then
    compteur = compteur + Cells(element.Row, element.Column - 1).Value
    element.EntireRow.ClearContents
    End If
Next element
Range("c2").Value = compteur
End Sub
 

Paf

XLDnaute Barbatruc
Re : VBA : Comment faire une recherche sur une plage "bornée

Bonjour à tous,

s'il s'agit de faire des opérations sur les lignes qui contiennent "toto", la solution la plus simple pour les repérer est celle de CISCO au post #3 puiqu'on n'a pas besoin de bornes.

Si uniquement toutes les lignes "toto" sont entre les bornes "debut" et "fin", une solution possible :
Code:
Sub SommeToto()
 Dim LigD As Range, LigF As Range, Plage As Range, PlageT As Range

 Set Plage = Range("E1:E" & Range("E" & Rows.Count).End(xlUp).Row)
 Set LigD = Plage.Find("debut")
 If LigD Is Nothing Then Exit Sub
 Set LigF = Plage.Find("fin")
 If LigF Is Nothing Then Exit Sub
 Set PlageT = Range(LigD.Offset(1, -1), LigF.Offset(-1, -1))
 Range("c2").Value = Application.WorksheetFunction.Sum(PlageT)
 PlageT.EntireRow.ClearContents
End Sub

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 428
Messages
2 088 331
Membres
103 815
dernier inscrit
SANOU ANSELME