Boucle rechercher

Messages postés
163
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
19 juillet 2019
-
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é ...
Afficher la suite 

1 réponse

Messages postés
8700
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2019
433
0
Merci
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
yg_be
Messages postés
8700
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2019
433 > J0K0
Messages postés
163
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
19 juillet 2019
-
à la place des lignes 29 à 31, peut-être:
Sheets("statistiques").cells(6,2) = Sheets("statistiques").cells(6,2).Value _
             + trouve.Offset(57, 0).Value
J0K0
Messages postés
163
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
19 juillet 2019
15 -
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 ;)
yg_be
Messages postés
8700
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2019
433 > J0K0
Messages postés
163
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
19 juillet 2019
-
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.
J0K0
Messages postés
163
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
19 juillet 2019
15 -
desolé je n'avais pas vu toutes les réponses.
J'avais modifié les calculs peut après votre réponse ...
lignes remplacées par :
                    nbinter = Sheets("statistiques").Range("B6").Value
Sheets("statistiques").Range("B6").Value = ""
'Sheets("statistiques").Range("B6").Value = nbinter & "+" & trouve.Offset(57, 0).Value
nbintersuite = trouve.Offset(57, 0).Value
Sheets("statistiques").Range("B6").Value = nbinter + nbintersuite


Alors, je comprends doucement que la boucle ne se fait pas. Il cherche la première case, fait le calcul, donne le résultat mais ne passe pas à la suite ...
Je cherche l'erreur mais ne comprends pas ... Je me documente sur les boucles mais ne comprends toujours pas ...

merci ;)
yg_be
Messages postés
8700
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2019
433 > J0K0
Messages postés
163
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
19 juillet 2019
-
merci d'utiliser le type de code "basic" quand tu partages du code VBA.
pourquoi pas simplement:
Sheets("statistiques").cells(6,2).value = Sheets("statistiques").cells(6,2).Value _
             + trouve.Offset(57, 0).Value

pourquoi ne pas partager ton code? tu peux aussi l'exécuter pas à pas pour détecter où cela cloche.
Commenter la réponse de yg_be