Boucle rechercher
J0K0
Messages postés
167
Statut
Membre
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
Bonsoir à tous.
Voilà plusieurs jours que je bute sur mon soucis, malgré les recherches ça coince encore ....
J'ai une feuille nouveau où je recherche à la ligne 8 l'année en cours à inscrire dans la feuille statistiques.
S'il trouve 2019 dans nouveau, l'idée est de voir 2 lignes en dessous s'il s'agit de Relevés ou d'une intervention ou d'une formation (liste déroulante avec ces trois choix). puis dans statistique à côté de Relevés il additionne tout ce qu'il trouve, idem pour formation et idem pour intervention ....
Vu l'heure je ne sais pas si je suis assez clair dans ma recherche ...
A ce stade, il trouve la première et s'arrête. Où alors avec findnext trouve les address suivantes mais j'ai l'impression qu'il faudrait faire une boucle .... En tout cas ça ne marche pas ...
Si quelqu'un à une idée ...
merci !
Voici mon code.
Je n'avais que développer Intervention mais il n'additionne pas l'ensemble trouvé ...
Voilà plusieurs jours que je bute sur mon soucis, malgré les recherches ça coince encore ....
J'ai une feuille nouveau où je recherche à la ligne 8 l'année en cours à inscrire dans la feuille statistiques.
S'il trouve 2019 dans nouveau, l'idée est de voir 2 lignes en dessous s'il s'agit de Relevés ou d'une intervention ou d'une formation (liste déroulante avec ces trois choix). puis dans statistique à côté de Relevés il additionne tout ce qu'il trouve, idem pour formation et idem pour intervention ....
Vu l'heure je ne sais pas si je suis assez clair dans ma recherche ...
A ce stade, il trouve la première et s'arrête. Où alors avec findnext trouve les address suivantes mais j'ai l'impression qu'il faudrait faire une boucle .... En tout cas ça ne marche pas ...
Si quelqu'un à une idée ...
merci !
Voici mon code.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'calculs automatiques
If ActiveSheet.Range("C3").Value <> "" Then
annee = ActiveSheet.Range("C3").Value
Set stat = Sheets("nouveau").Range("E8:IV8").Find(What:=annee)
'nextstat = Sheets("nouveau").Range("F8:IV8").FindNext(stat)
If stat Is Nothing Then
MsgBox ("Année non trouvée. Vérifier le format de la date en année AAAA.")
Else
' MsgBox stat.Address 'fonctionne
' Set statnext = Sheets("nouveau").Range("F8:IV8").FindNext(stat) 'fonctionne
' MsgBox statnext.Address 'fonctionne
'Intervention '55
If stat.Offset(2, 0).Value = "Intervention" Then
Sheets("statistiques").Range("B6").Value = ""
Sheets("statistiques").Range("B6").Value = "=" & stat.Offset(57, 0).Value '& "+" & valnext
'Set statnext = Sheets("nouveau").Range("E8:IV8").FindNext(stat)
'nextstat
'Sheets("statistiques").Range("B6").Value = Sheets("statistiques").Range("B6").Value & "+" & statnext.Offset(57, 0).Value
End If
If stat.Offset(2, 0).Value = "Formation" Then
MsgBox ("formation")
'Set statnext = Sheets("nouveau").Range("E8:IV8").FindNext(stat)
'nextstat
End If
If stat.Offset(2, 0).Value = "Relevés" Then
MsgBox ("relevés") & stat.Offset(0, 0).Value
'nextstat
End If
'Set statnext = Sheets("nouveau").Range("E8:IV8").FindNext(stat)
'MsgBox statnext & stat.Offset(0, 0).Value
End If
'Set statnext = Sheets("nouveau").Range("E8:IV8").FindNext(stat)
'MsgBox statnext & ("après")
Else
End If
Set stat = Nothing
Set statnext = Nothing
End Sub
Je n'avais que développer Intervention mais il n'additionne pas l'ensemble trouvé ...
1 réponse
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, merci de choisir le type "basic" quand tu partages du code VBA.
je n'ai pas bien compris ce que tu voulais réaliser. tu sembles tenté par une boucle, as-tu essayé?
as-tu bien mis "option explicit" en début de module?
exemple:Option Explicit Private Sub tt() Dim botte As Range, trouve As Range, annee As String, premier As String annee = "zzz" Set botte = Sheets("nouveau").Range("E8:IV8") Set trouve = botte.Find(What:=annee) If Not trouve Is Nothing Then premier = trouve.Address Set trouve = botte.FindNext(trouve) Do While premier <> trouve.Address Set trouve = botte.FindNext(trouve) Loop End If End Sub-
Bonjour,
Merci pour cette réponse et désolé pour le type du code ... :|
Je ne maîtrise pas encore VBA mais arrive à comprendre pour créer et avancer .... Les boucles ne sont pas du tout maîtrisées ... :(
En effet, un bon commencement mais pas encore à mes fins ....
L'idée est que quand il trouve l'année, il vérifie si dans une cellule spécifique il y a soit Intervention, soit Formation, soit Essai ou soit Relevés puis il met dans une cellule de statistiques la valeur associée, l'idée est de cumuler les valeurs pour en faire un total annuel pour les 4 types ....
Mon code mais il ajoute chaque fois la même valeur ...
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim botte As Range, trouve As Range, annee As String, premier As String 'calculs automatiques If ActiveSheet.Range("C3").Value <> "" Then 'sheets statistiques annee = ActiveSheet.Range("C3").Value 'annee = "zzz" Set botte = Sheets("nouveau").Range("E8:IV8") Set trouve = botte.Find(What:=annee) If trouve Is Nothing Then MsgBox ("Année non trouvée. Vérifier le format de la date en année AAAA.") Else premier = trouve.Address Set trouve = botte.FindNext(trouve) 'intervention If trouve.Offset(2, 0).Value = "Intervention" Then Sheets("statistiques").Range("B6").Value = "" Sheets("statistiques").Range("B6").Value = "=" & trouve.Offset(57, 0).Value '& "+" & valnext End If 'suivant Do While premier <> trouve.Address Set trouve = botte.FindNext(trouve) 'intervention If trouve.Offset(2, 0).Value = "Intervention" Then nbinter = Sheets("statistiques").Range("B6").Value Sheets("statistiques").Range("B6").Value = "" Sheets("statistiques").Range("B6").Value = nbinter & "+" & trouve.Offset(57, 0).Value End If Loop End If Else End If Set botte = Nothing Set trouve = Nothing End Sub
merci pour cette aide -
"il ajoute chaque fois la même valeur": peux-tu être plus précis et plus factuel? quelle ligne de code ne fait pas ce que tu souhaites? quelle valeur est "ajoutée" où? au lieu de quoi?
n'hésite surtout pas à donner un exemple, cela aide parfois à être factuel.
je vois aussi que tu as un peu maltraité le code que j'ai suggéré en #1. en principe, il ne faut rien changer, simplement ajouter du code juste avant la ligne 12. c'est là qu'est le cœur de la boucle.
je ne comprends pas pourquoi tu utilises des formules au lieu de faire les calculs en VBA. -
Pour faire simple,
voici le fichier.
Avec les informations écrites tu devrais comprendre normalement ....
https://www.cjoint.com/c/IGrr0B2u6dg
Pour les calculs en VBA : parce que mes connaissances sont limitées encore .... :D
Merci à toi ;) -
-
-