Boucle rechercher
J0K0
Messages postés
167
Statut
Membre
-
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 24281 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é ...
A voir également:
- Boucle rechercher
- Rechercher ou entrer l'adresse - Guide
- Rechercher image - Guide
- Rechercher remplacer word - Guide
- Adresse IP locale : comment la trouver facilement - Guide
- Rechercher une chanson - Guide
1 réponse
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
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:
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
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 Submerci pour cette aide
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.
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 ;)
je suggère que tu développes tes connaissances, peut-être avec des exercices plus simples.
Sheets("statistiques").cells(6,2) = Sheets("statistiques").cells(6,2).Value _ + trouve.Offset(57, 0).Value