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
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 ?
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
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.
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
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
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é
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
Ravie de l'apprendre
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
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
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.
Sub fusion()
debut = 3
For n = 4 To Range("A" & Rows.Count).End(xlUp).Row
If Range("A" & n) <> "" Then
Range("A" & debut & ":A" & n).MergeCells = True
debut = n + 1
End If
Next
End Sub