Cheyenne_2021
XLDnaute Junior
Bonjour,
1 fichier Excel avec plusieurs onglets.
Pour la création de ligne, il y a une macro sur le 1er onglet, où il est possible de créer plusieurs lignes d’un coup. Les lignes sont créées dans chaque onglet, en début de tableau. Cela se passe bien sur tous les onglets sauf sur un où, à la fin du tableau, les lignes déjà existantes , autant qu’il y en eu de créées, perdent en hauteur de ligne.
Je vous mets une image, la macro.
Je ne peux pas vous mettre le fichier car il est très lourd et contient trop de données confidentielles.
Merci
1 fichier Excel avec plusieurs onglets.
Pour la création de ligne, il y a une macro sur le 1er onglet, où il est possible de créer plusieurs lignes d’un coup. Les lignes sont créées dans chaque onglet, en début de tableau. Cela se passe bien sur tous les onglets sauf sur un où, à la fin du tableau, les lignes déjà existantes , autant qu’il y en eu de créées, perdent en hauteur de ligne.
Je vous mets une image, la macro.
Je ne peux pas vous mettre le fichier car il est très lourd et contient trop de données confidentielles.
Merci
VB:
Dim NumL1 As Integer ' variable globale
Dim Lig As Integer
Sub Ajouter_Ligne_1()
Dim start As Double
start = Timer
Call Initialisation_Variables_Public
'deverouilage de tous les onglets
Onglet_SuiviDi.Unprotect Evaluate("MotPasse")
Onglet_TraitDi.Unprotect Evaluate("MotPasse")
Onglet_Commission.Unprotect Evaluate("MotPasse")
Onglet_Equipement.Unprotect Evaluate("MotPasse")
Onglet_Convention.Unprotect Evaluate("MotPasse")
' Onglet_SuiviTw.Unprotect Evaluate("MotPasse")
' enlever les filtrages sur chaque tableau
If [T_suiviDi].ListObject.AutoFilter.FilterMode Then
[T_suiviDi].ListObject.AutoFilter.ShowAllData
Rows("3:3").Select
Selection.EntireRow.Hidden = True
Rows(3).EntireRow.Hidden = True
End If
If [T_TraitDi].ListObject.AutoFilter.FilterMode Then
[T_TraitDi].ListObject.AutoFilter.ShowAllData
Rows("4:4").Select
Selection.EntireRow.Hidden = True
Rows(4).EntireRow.Hidden = True
End If
If [T_Commission].ListObject.AutoFilter.FilterMode Then
[T_Commission].ListObject.AutoFilter.ShowAllData
Rows("3:3").Select
Selection.EntireRow.Hidden = True
Rows(3).EntireRow.Hidden = True
End If
If [T_Equipement].ListObject.AutoFilter.FilterMode Then
[T_Equipement].ListObject.AutoFilter.ShowAllData
Rows("3:3").Select
Selection.EntireRow.Hidden = True
Rows(3).EntireRow.Hidden = True
End If
If [T_convention].ListObject.AutoFilter.FilterMode Then 'ExcelDownloads
[T_convention].ListObject.AutoFilter.ShowAllData
End If
'
'If [T_suiviTw].ListObject.AutoFilter.FilterMode Then onglet supprime dec2022
' [T_suiviTw].ListObject.AutoFilter.ShowAllData
'Rows("3:3").Select
'Selection.EntireRow.Hidden = True
' Essai autre pour masquer la ligne
'Rows(3).EntireRow.Hidden = True
'End If
Lig = InputBox("combien de lignes voulez-vous creer ?", "création de lignes", 1)
For i = 1 To Lig
' Call Deverrouiller_feuille(ActiveWorkbook.Worksheets("1- Suivi des DI & avis n+1"))
'Call Deverrouiller_feuille(Onglet_TraitDi)
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
'Creation ligne dans 1er onglet
With Sheets("1- Suivi des DI & avis n+1")
colent = Range("T_suiviDi[[#Headers]]").Row 'n° de la derniere ligne de l'entete
'MsgBox ("n° ligne d entete " & colent)
'calcul nouveau n°
decalage = Range("T_suiviDi[[#headers]]").Row 'N° de ligne de mon entete de tableau
[T_suiviDi].ListObject.ListRows.Add (1)
'MsgBox ("decalage" & decalage)
'MsgBox ("range etc " & Range("T_suiviDi[#Num]").Cells(Target.Row - (decalage + 1)).Value) ' n)° de la ligne modifiee
'MsgBox ("range etc " & Ligmod) ' n° de la ligne modifiee
MA = Application.WorksheetFunction.Max(Range("T_suiviDi[NumL]")) + 1 ' recherche la valeur max de toute la colonne
'MsgBox ("MA " & MA)
'MsgBox ("1ere col : " & Range("T_suiviDi[NumL]").Cells(decalage).Value)
Range("T_suiviDi[NumL]").Cells(1) = Format(MA, "000")
NumL1 = Range("T_suiviDi[NumL]").Cells(1)
'MsgBox ("Numl1 " & NumL1)
End With
'
Call Ajouter_Ligne_2
Call Ajouter_Ligne_3
Call Ajouter_Ligne_4
Call Ajouter_Ligne_5
' Call Ajouter_Ligne_6
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Onglet_SuiviDi.Protect Evaluate("MotPasse"), DrawingObjects:=False, Contents:=True, Scenarios:= _
True, AllowSorting:=True, AllowFiltering:=True
Onglet_TraitDi.Protect Evaluate("MotPasse"), DrawingObjects:=False, Contents:=True, Scenarios:= _
True, AllowSorting:=True, AllowFiltering:=True
Onglet_Commission.Protect Evaluate("MotPasse"), DrawingObjects:=False, Contents:=True, Scenarios:= _
True, AllowSorting:=True, AllowFiltering:=True
Onglet_Equipement.Protect Evaluate("MotPasse"), DrawingObjects:=False, Contents:=True, Scenarios:= _
True, AllowSorting:=True, AllowFiltering:=True
Onglet_Convention.Protect Evaluate("MotPasse"), DrawingObjects:=False, Contents:=True, Scenarios:= _
True, AllowSorting:=True, AllowFiltering:=True
' Onglet_SuiviTw.Protect Evaluate("MotPasse"), DrawingObjects:=False, Contents:=True, Scenarios:= _
' True, AllowSorting:=True, AllowFiltering:=True
'Call Verouiller_feuille(ActiveWorkbook.Worksheets("1- Suivi des DI & avis n+1"))
' MsgBox ("La durée ceration de lignes st de : " & Format((Timer - start), "00:00:00.00"))
End Sub
Sub Ajouter_Ligne_2()
'MsgBox ("Numl1 pour n°2 " & NumL1)
With Worksheets("2- Traitement des DI")
decalage_2 = Range("T_TraitDi[[#Headers]]").Row 'n° de ligne de l'entete : 3
'MsgBox ("n° ligne d entete " & decalage_2)
[T_TraitDi].ListObject.ListRows.Add (2)
Range("T_TraitDi[NumL]").Cells(2) = NumL1 ' c'est tjrs la 2eme ligne du tableau qui est créee
End With
'Call Verouiller_feuille(Worksheets("2- Traitement des DI"))
End Sub
Sub Ajouter_Ligne_3() 'Tableau : T_Commission
'Call Deverrouiller_feuille(Worksheets("3- Avis commission & notif"))
'Worksheets("3- Avis commission & notif").Activate
'MsgBox ("Numl1 pour n°3 " & NumL1)
With Worksheets("3- Avis commission & notif")
decalage_3 = Range("T_commission[[#Headers]]").Row 'n° de ligne de l'entete : 3
'MsgBox ("n° ligne d entete " & decalage_3)
[T_Commission].ListObject.ListRows.Add (2)
'Range("T_Commission").Rows(2).Select ' apres la ligne modele masquee
'Selection.EntireRow.Insert copyorigin = xlFormatFromRightOrBelow
Range("T_Commission[NumL]").Cells(2) = NumL1 ' c'est tjrs la 2eme ligne du tableau qui est créee
End With
'Call Verouiller_feuille(Worksheets("3- Avis commission & notif"))
' Worksheets("3- Avis commission & notif").Deactivate ' cree un bug
End Sub
Sub Ajouter_Ligne_4() 'Tableau : T_Equipement
'Call Deverrouiller_feuille(Worksheets("4- Equipement et formations"))
'Worksheets("4- Equipement et formations").Activate
'MsgBox ("Numl1 pour n°3 " & NumL1)
With Worksheets("4- Equipement et formations")
decalage_4 = Range("T_Equipement[[#Headers]]").Row 'n° de ligne de l'entete : 3
'MsgBox ("n° ligne d entete " & decalage_4)
[T_Equipement].ListObject.ListRows.Add (2)
'Range("T_Equipement").Rows(2).Select ' apres la ligne modele masquee
'Selection.EntireRow.Insert copyorigin = xlFormatFromRightOrBelow
Range("T_Equipement[NumL]").Cells(2) = NumL1 ' c'est tjrs la 2eme ligne du tableau qui est créee
End With
'Call Verouiller_feuille(Worksheets("4- Equipement et formations"))
End Sub
Sub Ajouter_Ligne_5() 'Tableau : T_Convention
'Call Deverrouiller_feuille(Worksheets("5- Edition convention"))
'Worksheets("5- Edition convention").Activate
'MsgBox ("Numl1 pour n°5 " & NumL1)
With Worksheets("5- Edition convention")
decalage_5 = Range("T_Convention[[#Headers]]").Row 'n° de ligne de l'entete : 3
' MsgBox ("n° ligne d entete " & decalage_5)
[T_convention].ListObject.ListRows.Add (1)
'Range("T_Convention").Rows(1).Select ' apres la ligne modele masquee
' Selection.EntireRow.Insert copyorigin = xlFormatFromRightOrBelow
'Selection.ListObject.ListRows.Add (1)
Range("T_Convention[NumL]").Cells(1) = NumL1 ' c'est tjrs la 2eme ligne du tableau qui est créee
End With
'Call Verouiller_feuille(Worksheets("5- Edition convention"))
End Sub
Sub Ajouter_Ligne_6() 'Tableau : T_SuiviTw 6- Suivi télétravail onglet supprime DEc 2022
'Call Deverrouiller_feuille(Worksheets("6- Suivi télétravail"))
'Worksheets("6- Suivi télétravail").Activate
'MsgBox ("Numl1 pour n°6 " & NumL1)
'With Worksheets("6- Suivi télétravail")
' decalage_6 = Range("T_SuiviTw[[#Headers]]").Row 'n° de ligne de l'entete : 3
'MsgBox ("n° ligne d entete " & decalage_6)
' [T_suiviTw].ListObject.ListRows.Add (2)
'Range("T_SuiviTw").Rows(2).Select ' apres la ligne modele masquee
'Selection.EntireRow.Insert copyorigin = xlFormatFromRightOrBelow
' Range("T_SuiviTw[NumL]").Cells(2) = NumL1 ' c'est tjrs la 2eme ligne du tableau qui est créee
' End With
'Call Verouiller_feuille(Worksheets("6- Suivi télétravail"))
End Sub
Sub Deverrouiller_feuille(WS As Worksheet)
'MsgBox ("ws name deverouillage :" & WS.Name)
WS.Unprotect Evaluate("MotPasse")
'msgbox ("WS : " & WS)
'MsgBox ("ws name deverouillage :" & WS.Name)
'
' appel : deverouiller_feuille (Worksheet ("nom de la feuille"))
End Sub
Sub Verouiller_feuille(WS As Worksheet)
'WS.Protect Evaluate("MotPasse"), True, True, True
WS.Protect Evaluate("MotPasse"), DrawingObjects:=False, Contents:=True, Scenarios:= _
True, AllowSorting:=True, AllowFiltering:=True
'MsgBox ("ws name verouillage :" & WS.Name)
'MsgBox ("motdepasse : " & Evaluate("MotPasse"))
End Sub