• Initiateur de la discussion Initiateur de la discussion julfe
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

julfe

XLDnaute Nouveau
Bonjour

Je ne crois pas avoir trouvé de soluce à mon problème dans vos forums alors je demande directement. Je lance une macro sur une colonne de données mais elle tourne sans fin jusqu'à la fin du tableau, ce qui m'empêche de rajouter un module supplémentaire pour que la mission de la boucle s'éxécute sur d'autres fichiers.

Voilà la macro :
Do

ActiveCell.Offset(1, 0).Activate 'activer la cellule suivante vers le bas
If ActiveCell > 1000 Then

i = ActiveCell.Row
Range("C" & i & ":C" & i + 640 & "").Select 'sélection de la quantité de données correspondant à une déstabilisation
Selection.Copy ' copie / colle dans une nouvelle feuille

Sheets("liste déstabilisations").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(0, 1).Activate


Sheets("CP ML").Select
Range("C" & i + 640 & "").Select

End If

Loop While ActiveCell.Value < 1000


End Sub

merci à ceux qui peuvent m'aider.
 
Re : arrêter boucle

Bonjour,

comprends pas trop ton code, mais pour sortir d'une boucle do, il faut utiliser :

Code:
Exit Do

pour info, tous les "select" et "activate" ne sont pas nécessaire pour agir sur les objets en vba...

bon après midi
@+
 
Re : arrêter boucle

Bonjour pierrot, bonjour julfe,

Code:
Sub retraitement()
Dim derlig As String
Dim derlig2 As String

Application.ScreenUpdating = False

derlig = Sheets("Nom de ta feuille").Range("A65536").End(xlUp).Row
derlig[COLOR="Red"]2[/COLOR] = Sheets("Nom de ta feuille de destination").Range("A65536").End(xlUp).Row
For i = 2 To derlig 'mettre i = 1 to derlig si tes données à traiter commencent ligne 1
If Cells(i, 1) > 1000 Then
ActiveCell.Copy _
Destination:=Worksheet("nom de ta feuille de destination").Derlig2
Derlig2 = Derlig2 + 1
end if
Next i
End Sub
Je te proposes ca, vu que je n'ai pas d'exemple je n'ai pas pu voir si cela fonctionnait
 
Dernière édition:
Re : arrêter boucle

Bonjour Pierrot
Ça m'aurait étonné aussi que mon code soit propre. Je vais devoir l'expliquer pour qu'on puise m'aider je pense.

Mes données :
Ma colonne est constituée de données d'un format se rapprochant vaguement des battement cardiaques (état stable ... perturbation .... état stable ...perturbation ...).
Il y a environ une vingtaine de "perturbations" dans ma liste, et je sais que cette "perturbation" correspond à une valeur supérieure à 1000 et dure 640 lignes.

Mon objectif :
Je cherche à récupérer ces 20 perturbations pour les arranger dans une nouvelle feuille du document en 20 colonnes consécutives pour traitement ultérieur.

Mon approche :
Donc je demande à ma macro de descendre de ligne en ligne jusqu'à rencontrer une valeur supérieure à 1000, sélectionner les 640 lignes suivantes, les copier/coller dans une nouvelle feuille, revenir à la liste de données en bas des 640 lignes précédemment sélectionnées et recommencer jusqu'à la fin de la liste de données.

C'est là que la bât blesse, je n'arrive pas à arrêter cette macro qui tourne jusqu'à la fin du tableau même quand il n'y a plus de données.

Que puis-je faire ?
 
Re : arrêter boucle

Je te remercie de m'aider et je ne m'attendais pas à ce que mon code soit propre, mais je vais devoir expliquer mon bazar si je veux être compris je pense.

Mes données :
Sur une colonne, un peu comme une série de battement cardiaque (état stable .....perturbation .... état stable ....perturbation ....). Il y a en tout une vingtaines de perturbations séparées d'au moins 640 lignes. Chaque perturbation correspond à une valeur supérieure à 1000 (pic et initialisation de la perturbation).

Mon objectif :
Récupérer les 640 lignes de chacune de ces perturbations pour les ranger dans autant de colonnes dans une unique nouvelle feuille du classeur.

Mon approche :
Ma macro
- descend ligne par ligne jusqu'à repérer une valeur supérieure à 1000,
- sélectionne les 640 lignes suivantes,
- les copie/colle dans une nouvelle feuille qu'elle renomme,
- revient à la fin de la sélection précédente, et recommence.

Mon problème :
La macro tourne même après qu'il n'y ait plus de données dans la colonne et descend jusqu'en bas de tableau avant d'afficher un message d'erreur. Or une fois ces données organisées je vais lancer un traitement dessus, à cause du message d'erreur je ne peux pas.

Je pense que je devrais l'organiser différemment mais je ne trouve pas la bonne approche.

Voilà, j'espère être plus clair, merci de me filer un coup de main je craque un poil là. 😛
 
Re : arrêter boucle

OK désolé pour le doublon et le temps de bidouiller je n'avais pas vu la réponse de GBI.

@GBI je ne comprends pas à quoi servent tes 2 lignes :
derlig = Sheets("Nom de ta feuille").Range("A65536").End(xlUp).Row
derlig = Sheets("Nom de ta feuille de destination").Range("A65536").End(xlUp).Row

Si c'est la manière de définir ce que doit être la dernière ligne ça ne va pas coller car ce n'est pas toujours la même dans mes différents fichiers. Je cherche à ce que la macro s'arrête à la première cellule vide rencontrée.

Mais sinon tu m'ouvres des perspectives de codage propre, je t'enr emercie.
 
Re : arrêter boucle

Yeah !
Merci GBI (j'ai compris ce que tu voulais dire, je vais m'en resservir par la suite) et Pierrot93, ça marche et comme d'habitude c'était simple comme truc.

Petit détail qui ne pose pas de problème, alors que mes données s'arrêtent à la ligne 15360, la macro s'arrête à la ligne 15859. Étrange, mais ça ne m'embête pas plus que ça.

à +
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
345
Réponses
10
Affichages
655
Réponses
18
Affichages
425
Réponses
5
Affichages
705
Retour