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...
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))
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
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..
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
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.
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.
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
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