Aide macro, arrêter une boucle quand valeur voulue atteinte

Dogde

XLDnaute Nouveau
Bonjour à tous!

J'aurais besoin d'aide pour créer une macro, voici ma situation:

J'ai des données sur 30 ans, en supposant que chaque année compte 360 jours. J'ai donc une première colonne remplie de la cellule 1 a la cellule 10 800 avec 30 fois 1-> 360.
Dans une deuxième colonne, j'ai des 0 et des 1.

J'aimerais que pour chaque année (soit l'année 1, cellules 1 a 360, année 2 cellules 361 a 720 etc...) la macro me donne le premier jour de l'année pour lequel 1 apparaît.

J'espère avoir été assez claire !

Voici ce que j'ai fait pour l'instant:

Code:
Sub Compter()

Dim i As Integer
   For i = 1 To 360
      If Sheets(1).Range("B" & i).Value = 1 Then
      Sheets(1).Range("C1") = Sheets(1).Range("A" & i)
   Next i
   
    For i = 361 To 720
      If Sheets(1).Range("B" & i).Value = 1 Then
      Sheets(1).Range("C2") = Sheets(1).Range("A" & i)
   Next i

End Sub

Le soucis c'est que la boucle ne s’arrête pas à la première valeur atteignant 1, elle fait juste les 360 jours (en exemple, il n'y a que 2 ans)
Merci d'avance pour la lecture!
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Aide macro, arrêter une boucle quand valeur voulue atteinte

Salut Doge et bienvenue sur ce forum ;)

Pour sortie d'une boucle il faut utiliser : Exit For

Et si j'ai bien compris, ce code devrait faire l'affaire
Code:
Sub Essai()
  Dim NbFois As Integer, NbJour As Integer
  For NbFois = 1 To 30
    For NbJour = 0 + ((NbFois - 1) * 360 + 1) To 360 + ((NbFois - 1) * 360)
      If Sheets("IntCol").Range("B" & NbJour).Value = 1 Then
        Sheets("IntCol").Range("C" & NbFois) = Sheets("IntCol").Range("A" & NbJour)
        Exit For  ' Sort de la première boucle
      End If
    Next NbJour
  Next NbFois
End Sub

A+
 
Dernière modification par un modérateur:

Dogde

XLDnaute Nouveau
Re : Aide macro, arrêter une boucle quand valeur voulue atteinte

Bonjour et merci pour ta réponse!!

Juste une question, vu que tu as laissé "C1", cela va remplacer a chaque fois la valeur de C1 alors que je voudrais plutôt avoir 30 cellules, de C1 à C30 avec a chaque fois le premier jour pour lequel 1 est atteint !

Je pense qu'il faudrait donc "C" & NbFois

De plus, a quoi sert Msgbox si mon jour est déjà affiché dans la colonne C (avec 30 jours différents en plus) ?

Toute dernière question, en fait ma feuille s'appelle 'intcol', a la place de sheets(1), je dois mettre intcol ?

Merci encore =)
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Aide macro, arrêter une boucle quand valeur voulue atteinte

Bonjour Dodge et bienvenue, salut Bruno :),
Une autre approche, sous réserve d'inclure une ligne vierge au dessus :rolleyes:
Code:
Sub test()
Dim I As Integer, Cellule As Range
For I = 1 To 30
Set Cellule = Range("B" & ((I - 1) * 360 + 1) & ":B" & I * 360).Find("1", lookat:=xlWhole)
If Not Cellule Is Nothing Then Cells(I, 3) = Cellule.Offset(0, -1)
Next I
End Sub
Bonne soirée :cool:
 
C

Compte Supprimé 979

Guest
Re : Aide macro, arrêter une boucle quand valeur voulue atteinte

Re,
Juste une question, vu que tu as laissé "C1", cela va remplacer a chaque fois la valeur de C1 alors que je voudrais plutôt avoir 30 cellules, de C1 à C30 avec a chaque fois le premier jour pour lequel 1 est atteint !
Je pense qu'il faudrait donc "C" & NbFois
Tout à fait, code modifié

De plus, a quoi sert Msgbox si mon jour est déjà affiché dans la colonne C (avec 30 jours différents en plus) ?
C'était un test pour moi, il faut l'enlever ;)

Toute dernière question, en fait ma feuille s'appelle 'intcol', a la place de sheets(1), je dois mettre intcol ?
C'est préférable, code modifié

A+

Edit : oups, salut JNP ;)
 

JNP

XLDnaute Barbatruc
Re : Aide macro, arrêter une boucle quand valeur voulue atteinte

Re :),
Ou sans insertion de ligne
Code:
Sub test()
Dim I As Integer, Cellule As Range
For I = 1 To 30
Set Cellule = Range("B" & ((I - 1) * 360 + 1) & ":B" & I * 360).Find("1", lookat:=xlWhole, after:=Range("B" & I * 360))
If Not Cellule Is Nothing Then Cells(I, 3) = Cellule.Offset(0, -1)
Next I
End Sub
Bonne soirée :cool:
Ajout : Pas de soucis Bruno, bises à Fanny ;)
 

Discussions similaires

Réponses
4
Affichages
205

Statistiques des forums

Discussions
312 172
Messages
2 085 932
Membres
103 050
dernier inscrit
HAMZA BKA