Créer un plan - excel vba
Résoluyg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025 - 6 sept. 2024 à 10:15
- Créer un plan - excel vba
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Créer liste déroulante excel - Guide
- Créer un compte instagram sur google - Guide
- Créer un compte gmail - Guide
2 réponses
Modifié le 6 sept. 2024 à 09:12
bonjour, suggestion:
Option Explicit Sub plan() Dim fl As Worksheet, niveau As Integer, premcel As Range, cel As Range Debug.Print Now() Set fl = Sheets("sans plan") For niveau = 1 To 4 Set cel = fl.[a2] Do While cel <> "" If cel > niveau Then Set premcel = cel Do Set cel = cel.Offset(1) Loop Until cel <= niveau Or cel = "" Debug.Print niveau, premcel.Row, cel.Row - 1 Range(premcel, cel.Offset(-1)).Rows.Group Else Set cel = cel.Offset(1) End If Loop Next niveau End Sub
5 sept. 2024 à 23:33
Ci-dessous le lien de mon fichier
https://www.cjoint.com/c/NIfvFdnLE3F
6 sept. 2024 à 08:00
Je ne vois pas dans ce fichier le code que tu as essayé.
Tu peux t'aider de l'enregistreur de macros pour comprendre comment automatiser la création de plans.
6 sept. 2024 à 08:27
Bonjour,
Je n'ai pas mis le code, car j'ai bloqué dessus.
J'ai fait l'enregistreur pour voir le code pour grouper, mais c'est tout le passage de test que je n'arrive pas à faire.
Ci-dessous mon essai de début de code : (les dernières lignes sont en commentaires, elles proviennent d'un enregistrement que j'ai fait sur un autre fichier, pour voir le code pour grouper)
Sub Plan()
'
' Plan Macro
'
'
Range(A2).Select
Selection.End(xlDown).Select
ActiveCell.Select
derlignetotal = ActiveCell.Row
Range(A2).Select
premlignetotal = ActiveCell.Row
For i = premlignetotal To derlignetotal
premligne = premlignetotal
pligne = 0
For j = premligne To derlignetotal
If Range("A" & j).Value < 4 Then
Range("A" & j + 1).Select
ElseIf Range("A" & j).Value = 4 And pligne = 0 Then
pligne = j
Range("A" & j + 1).Select
ElseIf Range("A" & j).Value = 4 And pligne > 0 Then
Range("A" & j + 1).Select
Else: Rows("premligne:j").Select
Selection.Rows.Group
End If
j = j + 1
Next
' Rows("17:21").Select
' Selection.Rows.Group
' Rows("23:23").Select
' Rows("23:62").Select
' Selection.Rows.Group
' Rows("16:16").Select
' Rows("16:149").Select
' Selection.Rows.Group
End Sub
J'ai voulu faire une première boucle pour balayer tout le fichier, car je pensais faire ensuite d'autres boucles pour les niveaux 1, 2, 3 et 4. Mais déjà dans la boucle pour le niveau 4, je m'y perds pour savoir comment passer à la ligne suivante et ensuite sélectionner toutes les lignes que je veux grouper.
Je ne sais pas si je sui très claire dans mes explications. Désolée.
6 sept. 2024 à 09:24
Tout est très clair, pas de souci.
En fait, les boucles for ne conviennent pas du tout pour ce genre de balayage. Dès que tu as commencé avec une boucle for, tu étais sur une fausse piste.
6 sept. 2024 à 09:31
La différence principale par rapport à ton code, c'est l'utilisation de boucles do au lieu de boucles for.
Je travaille avec des cellules plutôt qu'avec des numéros de lignes, mais c'est un détail, je le fais par facilité.
6 sept. 2024 à 09:57
Merci beaucoup !! :)
ça fonctionne nickel.
Il faut vraiment que je regarde la fonction Do While...Loop, car je ne la connais pas trop et donc je n'y pense pas du tout.
J'ai juste une petite question ; Pourquoi vous mettez Debug.print ? ça sert à quoi exactement ?
En tout cas, merci.
Bonne journée
6 sept. 2024 à 10:15
le debug.print affiche de l'information dans la fénêtre d'exécution (ctl-G dans l'éditeur de code). cela permet de comprendre ce que fait le code.