XL 2013 [RESOLU] insertion colonne sous condition

fabrice31

XLDnaute Junior
Bonjour,

j'aimerai inserer une colonne vide à chaque changement de mois.
mes mois commencent en I3 jusque NX3 (1 par jour).
j'ai essayé d'adapter un code trouvé pour insérer des lignes mais ..
j'y pompe rien

Sub ins()
lastr = Range("ZZ3").End(xlLeft).Row (je commence loin a droite et je reveins 1 par 1)
For i = lastr To 1 Step -1
nom1 = Cells(i, 1).Value
nom2 = Cells(i + 1, 1).Value
If nom1 <> nom2 Then
Cells(i + 1, 1).Select
Selection.EntireColumn.Insert Shift:=xlRight
End If
Next
End Sub

sur l'onglet '2017', vous avez le résultat voulu (colonne grise) fait a la main.
sur l'onglet '2018', une page test...

si quelqu'un est dispo pour m'expliquer

en vous remerciant

fabrice
 

Fichiers joints

pierrejean

XLDnaute Barbatruc
Bonjour fabrice

A lancer sur la feuille en cours

Code:
Sub inserer_colonnes()
Application.ScreenUpdating = False
lastcol = Cells(2, Columns.Count).End(xlToLeft).Column
For n = 9 To lastcol
    If Month(Cells(2, n + 1)) <> Month(Cells(2, n)) Then
         Cells(2, n + 1).EntireColumn.Insert Shift:=xlRight
         n = n + 1
    End If
Next
Application.ScreenUpdating = True
End Sub
 

fabrice31

XLDnaute Junior
super-(précis/rapide/efficace)

juste pour info, pourquoi:
lastcol = Cells(2, Columns.Count).End(xlToLeft).Column?

et pourquoi 9?

au lieu de dire month <>, cell<> ne suffisait pas?

application.screenupdating?

désolé mais j'aime bien comprendre...

en tout cas merci et à très vite...
 

pierrejean

XLDnaute Barbatruc
Re
Code:
Sub inserer_colonnes()
'pour arreter la mise ajour de l'ecran
Application.ScreenUpdating = False
'avoir le n° de la colonne de la derniere cellule non vide  de la ligne 2
lastcol = Cells(2, Columns.Count).End(xlToLeft).Column
For n = 9 To lastcol
'sur la ligne 2 c'est l'affichage qui donne le mois mais la valeur reste la date complète 
    If Month(Cells(2, n + 1)) <> Month(Cells(2, n)) Then
         Cells(2, n + 1).EntireColumn.Insert Shift:=xlRight
         n = n + 1
    End If
Next
Application.ScreenUpdating = True
End Sub
 

Discussions similaires


Haut Bas