MACRO LOOP + Insertion d'une ligne vierge

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 !

steugeu

XLDnaute Nouveau
Bonjour à toutes et à tous, je me présente je m'appelle Cyril.
Voici ma question :
Dans la feuil1 colonne A j'ai :

A1 : B500
A2 : B500
A3 : B500
A4 : B600
A5 : B600

etc...etc....

Je souhaite créer une macro qui controle chaque ligne et a partir du moment où il voit que la cellule est différente de celle du dessus, il insère 1 ligne vierge. (en gros ça serait pour que la présentation soit plus belle)
au final ça ferait ça :

A1 : B500
A2 : B500
A3 : B500

A4 : B600
A5 : B600



Savez-vous comment faire ?
D'avance merci !
 
Dernière édition:
Re : MACRO LOOP + Insertion d'une ligne vierge

Bonjour steugeu,

Je te propose cette petite macro que je viens de faire à l'instant. Bon tu verras c'est assez simple, du moins je l'espère.


Code:
For x = 1 To 100 'une boucle où x va de 1 à 100 - "scan" des 100ères lignes
    
    ' si la valeur de la cellule suivante est différente de la valeur de la cellule scannée [...]
    If Range("C" & x + 1).Value <> Range("C" & x).Value Then
        Range("C" & x + 1).Select 'alors on sélectionne la cellule suivante
        Selection.EntireRow.Insert 'et on insère une nouvelle ligne
        x = x + 1 'et on incrémente x !!
    End If

Next x


Je l'ai testé sur la colonne "C" mais c'était uniquement à titre d'exemple. Libre à toi de modifier ce code. Tu te demandes peut être pourquoi j'incrémente x de 1 dans la condition: tout simplement car si on trouve que la valeur d'une cellule (que l'on scanne) est différente de la valeur de la cellule suivante il faut augmenter x. Sinon au prochain passage dans la boucle la cellule suivante devient la cellule qu'on scanne mais vu qu'on a rajouter une ligne donc la cellule suivante est forcément vide d'où le fait qu'il faille sauter la cellule suivante. Désolé pour l'explication pas claire. 😛
 
Re : MACRO LOOP + Insertion d'une ligne vierge

Bonjour,

Une solution d'exécution plus rapide car elle insère toutes les lignes d'un seul coup :

Code:
Sub Separe()
Dim cel As Range, ins As Range
For Each cel In Range("A2", [A65536].End(xlUp))
  If cel <> "" And cel.Offset(-1) <> "" And cel <> cel.Offset(-1) _
    Then Set ins = Union(IIf(ins Is Nothing, cel, ins), cel)
Next
If Not ins Is Nothing Then ins.EntireRow.Insert
End Sub
A+
 
Re : MACRO LOOP + Insertion d'une ligne vierge

Et du coup une autre question se pose à moi !!!
par exemple :
colone A = 0
colonne B = 0
Colonne C = 0

Colonne D = total A+B+C
je dois faire quoi comme formule dans mes cellules pour que :
si A+B+C est inférieur à 0, alors la cellule est "" (plutot que de m'indiquer que A+B+C = 0.00
 
Re : MACRO LOOP + Insertion d'une ligne vierge

Re,

Ben pour insérer 2 lignes, en insérer 2 😛

Code:
Sub Separe()
Dim cel As Range, ins As Range
For Each cel In Range("A2", [A65536].End(xlUp))
  If cel <> "" And cel.Offset(-1) <> "" And cel <> cel.Offset(-1) _
    Then Set ins = Union(IIf(ins Is Nothing, cel, ins), cel)
Next
If Not ins Is Nothing Then ins.EntireRow.Insert: ins.EntireRow.Insert
End Sub
Pour la 2ème question utilisez la fonction SI.

Je vous laisse chercher car c'est élémentaire, mais revenez si vous n'y arrivez pas.

A+
 
Re : MACRO LOOP + Insertion d'une ligne vierge

Salut.

Humm je sais pas si j'ai bien compris mais en gros tu veux un truc du style:

D1 = A1+B1+C1
D2 = A2+B2+C2
.....................
Dx = Ax+Bx+Cx


Et si Dx est négatif tu n'affiches rien dans la cellule?

Bah dans ce cas je te propose de rajouter ça dans la macro:

Code:
For x = 1 To 100
        ' à partir de ta cellule Dx, tu fais la somme des cellules Ax, Bx et Cx
        ' le RC[-3] indique que tu pars de la 3ème cellule 
        '(sur la meme ligne) avant la cellule où tu places la formule
        ' le RC[-1] indique que tu vas jusqu'à la cellule
        '(sur la meme ligne) située juste avant la cellule où tu places la formule
        Range("D" & x).FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"

        ' ensuite si la valeur de la cellule est négative
        If Range("D" & x).Value < 0 Then
            Range("D" & x).Value = ""    ' alors on change la valeur et on met rien à la place
        End If
Next x
 
Dernière édition:
Re : MACRO LOOP + Insertion d'une ligne vierge

bon pour ma 2eme question c'est bon j'ai trouvé ! j'avais posé la condition a l'envers en fait !! donc ça c'est ok merci !
par contre qd je lance la macro au sujet de ma 1ère demande, voilà ce qu'il me met :
 

Pièces jointes

  • debogag.JPG
    debogag.JPG
    23.8 KB · Affichages: 104
Re : MACRO LOOP + Insertion d'une ligne vierge

En fait c'est bizarre !!! Dans mon fichier, la macro se fait sur la colonne H, donc dans la macro, à la place de la colonne A j'ai mis H.
SI par exemple je lance la macro comme ça, alors ça me met le message d'erreur. Par contre ! Si je supprime tout ce qu'il y a dans les colonne de A à G et que je lance la macro, alors là ça bug pas !
 
Re : MACRO LOOP + Insertion d'une ligne vierge

Re,

Ah oui, mais quand il y a une cellule vide la macro précédente n'insère pas une 2ème ligne.

Alors utilisez cette macro :

Code:
Sub Separe()
Dim cel As Range, ins As Range
Application.ScreenUpdating = False
On Error Resume Next 'si aucune cellule vide en colonne A
Range("A1", [A65536].End(xlUp)) _
  .SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'supprime les lignes vides
For Each cel In Range("A2", [A65536].End(xlUp))
  If cel <> cel.Offset(-1) _
    Then Set ins = Union(IIf(ins Is Nothing, cel, ins), cel)
Next
ins.EntireRow.Insert: ins.EntireRow.Insert
End Sub
A+
 
Re : MACRO LOOP + Insertion d'une ligne vierge

Re,

Je n'avais pas vu vos posts #9 et #10.

Le message est dû au fait que des cellules "pleines" sortiraient de la feuille quand on insère les lignes.

Il n'y a plus assez de place pour les accueillir.

Appuyez sur la touche F5 => Cellules => Dernière cellule : quelle est la dernière cellule ?

Il y a peut-être des textes vides "" à supprimer dans la feuille...

A+
 
Re : MACRO LOOP + Insertion d'une ligne vierge

oui tout a fait !!!! en fait qd j'ai trouvé ma formule pour calculer que si la somme = 0 alors "rien" en fait je l'ai recopiée jusqu'en bas de la feuille !! Donc la je viens de recopier la formule jusqu'a la ligne 1000.
Alors du coup la macro fonctionne, mais par contre de temps en temps il me rajoute 4 lignes ou 3 ! au lieu de 2 !
 
Re : MACRO LOOP + Insertion d'une ligne vierge

Re,

Si dans votre colonne il y a des cellules avec le texte vide "", Excel considère qu'elles ne sont pas vides (blanks).

Donc la macro du post #11 ne les supprime pas avant l'insertion des lignes.

Pour vous aider d'avantage, il faudrait déposer votre fichier.

A+
 
- 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
4
Affichages
1 K
Retour