Répéter une action n fois

HelloDy

XLDnaute Junior
Bonjour le forum :)

J'ai des gros tableaux moches à rendre plus jolis et j'aimerais automatiser le processus.
Il faut que je les sépare en "blocs"

J'ai fait un petit truc comme ça :
VB:
'Se rendre au bloc suivant
  Range("A6").Select
  Selection.End(xlDown).Select
   
'Sélectionner la ligne active + insérer 1 ligne
  Rows(ActiveCell.Row).Select
  Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
   
'Se rendre au bloc suivant
  Selection.End(xlDown).Select
  Selection.End(xlDown).Select
   
'Sélectionner la ligne active + insérer 1 ligne
  Rows(ActiveCell.Row).Select
  Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
etc etc...

Oui vous moquez pas c'est tout pourri n'empêche que ça fonctionne :cool:
Mais le problème c'est que parfois il faut répéter ce processus 3 fois, parfois 10, parfois 15, bref, "n" fois.
Et ça je sais pas comment le dire à Excel (qu'il faut qu'il s'arrête une fois qu'on est arrivé au bout du tableau).

Est-ce que quelqu'un peut m'expliquer comment compter le nombre de répétitions nécessaires ainsi que comment écrire une boucle qui se répétera n fois ?

Je joins le fichier incriminé si ça peut aider.

Merci tout plein !


Elo
 

Pièces jointes

  • Tableau moche.xlsx
    11.6 KB · Affichages: 37

vgendron

XLDnaute Barbatruc
Hello
un essai ici
VB:
Sub LaidToBeau()
Application.ScreenUpdating = False
With ActiveSheet 'avec la feuille active
    Fin = .UsedRange.Rows.Count 'on récupère la dernière ligne de la feuille
    For i = Fin To 1 Step -1 'en partant du bas
        If .Range("A" & i) = "Constructeur :" Then 'si on trouve le texte "Constructeur :"
            .Rows(i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 'on insère une ligne
        End If
    Next i
End With
Application.ScreenUpdating = True
End Sub
 

HelloDy

XLDnaute Junior
Merci beaucoup vgendron ça fonctionne :)

Peux-tu m'expliquer à quoi servent les 2 lignes "Application.ScreenUpdating = ", stp ?
J'essaie d'apprendre en même temps :)
Je pense avoir compris le reste et je pourrai m'en re-servir.
 

vgendron

XLDnaute Barbatruc
Application.ScreenUpdating=false
desactive le refresh des feuilles..
ca évite d'avoir des sauts d'écran à chaque fois qu'il insère une ligne

=true: ca réactive le refresh. et tu vois directement le résultat final

Selon le nombre de data, ca peut ne pas changer grand chose, c'est plus une habitude
 

job75

XLDnaute Barbatruc
Bonjour HelloDy, vgendron, le forum,

Pas besoin de boucle :
Code:
Sub Insertion()
On Error Resume Next 'si aucune SpecialCell
Range("A7:A" & Rows.Count).SpecialCells(xlCellTypeConstants, 2).EntireRow.Insert
End Sub
Ou si l'on veut compter :
Code:
Sub Insertion1()
On Error Resume Next 'si aucune SpecialCell
With Range("A7:A" & Rows.Count).SpecialCells(xlCellTypeConstants, 2)
    MsgBox .Count & " lignes insérées..."
    .EntireRow.Insert
End With
End Sub
A+
 

HelloDy

XLDnaute Junior
Bonjour HelloDy, vgendron, le forum,

Pas besoin de boucle :
Code:
Sub Insertion()
On Error Resume Next 'si aucune SpecialCell
Range("A7:A" & Rows.Count).SpecialCells(xlCellTypeConstants, 2).EntireRow.Insert
End Sub
Ou si l'on veut compter :
Code:
Sub Insertion1()
On Error Resume Next 'si aucune SpecialCell
With Range("A7:A" & Rows.Count).SpecialCells(xlCellTypeConstants, 2)
    MsgBox .Count & " lignes insérées..."
    .EntireRow.Insert
End With
End Sub
A+

Bonjour job75 merci pour ton aide :)

Je demandais une boucle parce qu'en fait j'ai de nombreuses choses à ajouter à l'intérieur de cette boucle (des bordures, du gras, déplacer certaines cellules, etc.) et j'essaie de faire ça par moi-même avec mes maigres connaissances.
Et pour le coup j'ai rien compris au code que tu m'as donné :D
 

job75

XLDnaute Barbatruc
Et pour le coup j'ai rien compris au code que tu m'as donné :D
C'est donc le moment d'apprendre : faites une recherche sur le web avec le mot clé SpecialCells.

S'il y a beaucoup de lignes à insérer une boucle prend plus de temps.

Maintenant si l'on veut traiter chaque tableau il faudra de toute façon une boucle :
Code:
Sub MAJ()
Dim c As Range
On Error Resume Next 'si aucune SpecialCell
Range("A7:A" & Rows.Count).SpecialCells(xlCellTypeConstants, 2).EntireRow.Insert
For Each c In Range("A6:A" & Rows.Count).SpecialCells(xlCellTypeConstants, 2)
    With c.CurrentRegion
        .Interior.ColorIndex = 6 'jaune
        .Borders.Weight = xlThin 'bordures
        .Rows(1).Font.Bold = True 'police gras
    End With
Next
End Sub
A+
 

HelloDy

XLDnaute Junior
Ravie de l'apprendre :D
Ca marche nickel en tout cas, merci !

Par contre je ne trouve rien sur SpecialCells... rien d'explicite en tout cas.
Si tu/vous as/avez (c'est mieux le tutoiement sur internet non ?) le temps de m'expliquer ce serait suuuper sympa. N'importe quand par contre, c'est pas pressé.

En tout cas merci pour cette 2ème méthode, ça fait plaisir d'apprendre :)
 

HelloDy

XLDnaute Junior
Oui j'étais tombée sur cet article lors de ma recherche, malheureusement je n'y comprends rien...
Je ne maîtrise pas du tout le vocabulaire utilisé donc ça m'est inaccessible :(
C'est pas très grave, au lieu d'apprendre à faire par moi-même j'utiliserai vos lignes de code si généreusement offertes !
Et si j'ai un jour le temps, j'essaierai d'apprendre tout ça en commençant par la base :)

Merci encore en tout cas !
 

HelloDy

XLDnaute Junior
Bonjour le forum,

Je relance cette discussion parce que je me heurte à un problème similaire mais malgré vos explications, je n'arrive pas à adapter ces solutions à mon nouveau problème... :(

Alors voilà, j'ai un tableau avec dans la colonne A des noms de clients et dans la colonne B diverses infos concernant une vente faite à ce client (infos sur plusieurs lignes).
J'aimerais qu'une fois le tableau rempli, une petite macro fusionne les cellules A3:A6 ; A7:A10 ; A11:A14 ; A15:A18, etc. jusqu'à la dernière ligne non vide.

Mais bon voilà j'y arrive pas !

Little help, please ?
Je joins un fichier qui sera plus explicite.

Merci d'avance ! :)
 

Pièces jointes

  • ClasseurHelloDy.xlsm
    12.5 KB · Affichages: 34

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 010
Membres
101 866
dernier inscrit
XFPRO