Boucle rechercher

Fermé
J0K0 Messages postés 163 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 19 juillet 2019 - Modifié le 17 juil. 2019 à 17:58
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 - 19 juil. 2019 à 11:47
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.

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 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
Modifié le 11 juil. 2019 à 08:01
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
0
J0K0 Messages postés 163 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 19 juillet 2019 17
Modifié le 17 juil. 2019 à 17:59
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
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > J0K0 Messages postés 163 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 19 juillet 2019
Modifié le 17 juil. 2019 à 19:07
"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.
0
J0K0 Messages postés 163 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 19 juillet 2019 17
17 juil. 2019 à 19:53
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 ;)
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > J0K0 Messages postés 163 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 19 juillet 2019
17 juil. 2019 à 21:24
c'est surtout pour toi que cela devient plus simple ainsi, pas pour moi.
je suggère que tu développes tes connaissances, peut-être avec des exercices plus simples.
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > J0K0 Messages postés 163 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 19 juillet 2019
17 juil. 2019 à 23:30
à la place des lignes 29 à 31, peut-être:
Sheets("statistiques").cells(6,2) = Sheets("statistiques").cells(6,2).Value _
             + trouve.Offset(57, 0).Value
0