Boucle rechercher

J0K0 Messages postés 167 Statut Membre -  
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.

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

  1. 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
    0
    1. J0K0 Messages postés 167 Statut Membre 17
       
      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
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > J0K0 Messages postés 167 Statut Membre
       
      "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
    3. J0K0 Messages postés 167 Statut Membre 17
       
      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
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > J0K0 Messages postés 167 Statut Membre
       
      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
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > J0K0 Messages postés 167 Statut Membre
       
      à 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