OVH Cloud OVH Cloud

Insertion automatique de lignes dans des tableaux

21 réponses
Avatar
Sunburn
Bonjour,
j'ai deux demandes un peu similaire, donc je vais faire la plus complexe, et
l'autre j'essaierais d'adapter :
j'ai un onglet qui comporte plusieurs tableaux simples :
colonnes de A à J, cellules C à F fusionnées, sans aucune formules, et une
ligne total en dessous (pour les colonnes G et H)
Je voudrais dans ces tableaux, qu'une ligne s'insère automatiquement, avec
la meme mise en forme, afin, qu'il existe toujours une ligne vide dans chacun
des tableaux, avec un minimum de 3 lignes tout de même.
il faut peut être nommé les tableaux.

Voilà, je met le lien de mon onglet si ça peut aider.
Yann

10 réponses

1 2 3
Avatar
Sunburn
Ben voilà, c'est parfaitement parfait !!!!
rien a dire de plus, c'est parfait ......
Merci beaucoup.
YANN

"FFO" a écrit :

Rebonjour à toi

Content de t'avoir satisfait

Sur ce lien ton fichier avec un petit bouton "Nettoyage"

Actives le et dis moi ce que tu en penses !!!!

http://www.cijoint.fr/cjlink.php?file=cj200812/cijkzzqk3J.xls



Avatar
Sunburn
Re,
donc vraiment bien ta macro nettoyage.
par contre, comment puis-je indiquer que cette macro est valable uniquement
pour 2 onglets "60_21" et "90_13" ?? (j'ai essayé un truc,mais pas sur)
MERCI
-----
'nettoyage des feuilles à tableaux 60.21 et 90.31
Sub Nettoyage()
sheets("60_21", "90_13") 'ça j'ai essayé, mais je suis pas sur ..
i = 0
Do While Range("A9").Offset(i, 0).Row < Range("D65535").End(xlUp).Row
If Range("A9").Offset(i, 0).Interior.ColorIndex = 36 Then
n = n + 1
End If
If Range("A9").Offset(i, 0).Interior.ColorIndex <> 36 Then
n = 0
End If
If n > 3 Then
Range("A9").Offset(i, 0).EntireRow.Select
Selection.Delete
i = i - 1
End If
i = i + 1
Loop
Range("A1").Activate
End Sub
------
Avatar
FFO
Rebonjour à toi

Heureux que celà te convienne
Cette macro fonctionne sur la feuille active
Tu peux donc cibler manuellement la feuille à traiter
Si tu veux traiter plusieurs feuilles en même temps automatiquement tu peux
pour tes Onglets cités rajouter ces lignes :

For j = 1 to Sheets.Count
If Sheets(j).Name = "60_21" or Sheets(j).Name = "90_13" then
Sheest(j).Activate
i = 0
Do While Range("A9").Offset(i, 0).Row < Range("D65535").End(xlUp).Row
If Range("A9").Offset(i, 0).Interior.ColorIndex = 36 Then
n = n + 1
End If
If Range("A9").Offset(i, 0).Interior.ColorIndex <> 36 Then
n = 0
End If
If n > 3 Then
Range("A9").Offset(i, 0).EntireRow.Select
Selection.Delete
i = i - 1
End If
i = i + 1
Loop
Range("A1").Activate
End If
Next

Attention ce code se repère sur la couleur des lignes que tu m'as fourni
pour fonctionner correctement
Il est donc important d'avoir ce format de lignes pour tous les Onglets à
traiter

Fais des essais et dis moi !!!!
Avatar
Sunburn
Ok, bon ça va être impecable.
oui, pas de soucis,la couleur est la même.

Par contre, pour le code qui est sur la feuille (pour l'ajout des lignes),
en fait, sur mon classeur, les feuilles sont verouillées.
donc je suppose qui faut déprotéger au début et protéger à la fin de la
macro ?
de quel type ?
worksheet.protect
et worksheet .unprotect
??
MERCI. Yann

"FFO" a écrit :

Rebonjour à toi

Heureux que celà te convienne
Cette macro fonctionne sur la feuille active
Tu peux donc cibler manuellement la feuille à traiter
Si tu veux traiter plusieurs feuilles en même temps automatiquement tu peux
pour tes Onglets cités rajouter ces lignes :

For j = 1 to Sheets.Count
If Sheets(j).Name = "60_21" or Sheets(j).Name = "90_13" then
Sheest(j).Activate
i = 0
Do While Range("A9").Offset(i, 0).Row < Range("D65535").End(xlUp).Row
If Range("A9").Offset(i, 0).Interior.ColorIndex = 36 Then
n = n + 1
End If
If Range("A9").Offset(i, 0).Interior.ColorIndex <> 36 Then
n = 0
End If
If n > 3 Then
Range("A9").Offset(i, 0).EntireRow.Select
Selection.Delete
i = i - 1
End If
i = i + 1
Loop
Range("A1").Activate
End If
Next

Attention ce code se repère sur la couleur des lignes que tu m'as fourni
pour fonctionner correctement
Il est donc important d'avoir ce format de lignes pour tous les Onglets à
traiter

Fais des essais et dis moi !!!!


Avatar
Sunburn
re,
ne tiens pas compte de mon dernier post, pas de soucis, c'est OK.
c'est juste que j'avais supprimer mes cellules fusionnées, mais le temps que
je réfléchisse.........
:°)
YANN

"FFO" a écrit :

Rebonjour à toi

Heureux que celà te convienne
Cette macro fonctionne sur la feuille active
Tu peux donc cibler manuellement la feuille à traiter
Si tu veux traiter plusieurs feuilles en même temps automatiquement tu peux
pour tes Onglets cités rajouter ces lignes :

For j = 1 to Sheets.Count
If Sheets(j).Name = "60_21" or Sheets(j).Name = "90_13" then
Sheest(j).Activate
i = 0
Do While Range("A9").Offset(i, 0).Row < Range("D65535").End(xlUp).Row
If Range("A9").Offset(i, 0).Interior.ColorIndex = 36 Then
n = n + 1
End If
If Range("A9").Offset(i, 0).Interior.ColorIndex <> 36 Then
n = 0
End If
If n > 3 Then
Range("A9").Offset(i, 0).EntireRow.Select
Selection.Delete
i = i - 1
End If
i = i + 1
Loop
Range("A1").Activate
End If
Next

Attention ce code se repère sur la couleur des lignes que tu m'as fourni
pour fonctionner correctement
Il est donc important d'avoir ce format de lignes pour tous les Onglets à
traiter

Fais des essais et dis moi !!!!


Avatar
FFO
Rebonjour à toi

Change le code de la feuille ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Offset(1, 0).Interior.ColorIndex = xlNone And
Target.Interior.ColorIndex = 36 And Cells(Target.Row, Target.Column) <> ""
Then
ActiveSheet.Unprotect ("Mot de passe")
Formule1 = Range("D" & Target.Row + 1).Formula
Formule2 = Range("E" & Target.Row + 1).Formula
Target.EntireRow.Copy
Target.Offset(1, 0).EntireRow.Insert Shift:=xlDown
Target.Offset(1, 0).ClearContents
Target.Offset(-1, 0).EntireRow.Copy
Target.EntireRow.PasteSpecial Paste:=xlPasteFormats
Range("D" & Target.Row + 2).Formula = Split(Range("D" & Target.Row +
2).Formula, ":")(0) & ":" & Mid(Split(Range("D" & Target.Row + 2).Formula,
":")(1), 1, 1) & Mid(Split(Range("D" & Target.Row + 2).Formula, ":")(1), 2,
Len(Mid(Split(Range("D" & Target.Row + 2).Formula, ":")(1), 2)) - 1) + 1 & ")"
Range("E" & Target.Row + 2).Formula = Split(Range("E" & Target.Row +
2).Formula, ":")(0) & ":" & Mid(Split(Range("E" & Target.Row + 2).Formula,
":")(1), 1, 1) & Mid(Split(Range("E" & Target.Row + 2).Formula, ":")(1), 2,
Len(Mid(Split(Range("E" & Target.Row + 2).Formula, ":")(1), 2)) - 1) + 1 & ")"
ActiveSheet.Protect ("Mot de passe")
End If
End Sub


Soit tu le remplaces soit tu rajoutes les 2 lignes :

ActiveSheet.Unprotect ("Mot de passe")
ActiveSheet.Protect ("Mot de passe")

au bon endroit
Le Mot de passe n'est pas obligatoire

Il faudra rajouter ces 2 lignes pour la Macro "Nettoyage" ainsi :

For j = 1 to Sheets.Count
If Sheets(j).Name = "60_21" or Sheets(j).Name = "90_13" then
Sheest(j).Activate
ActiveSheet.Unprotect ("Mot de passe")
i = 0
Do While Range("A9").Offset(i, 0).Row < Range("D65535").End(xlUp).Row
If Range("A9").Offset(i, 0).Interior.ColorIndex = 36 Then
n = n + 1
End If
If Range("A9").Offset(i, 0).Interior.ColorIndex <> 36 Then
n = 0
End If
If n > 3 Then
Range("A9").Offset(i, 0).EntireRow.Select
Selection.Delete
i = i - 1
End If
i = i + 1
Loop
Range("A1").Activate
ActiveSheet.Protect ("Mot de passe")
End If
Next

J'espère avoir répondu à tes attentes
Dis moi !!!
Avatar
Sunburn
Re,
tout a fait, mes attentes et mes espérances sont comblées.
merci encore.
YANN

"FFO" a écrit :

J'espère avoir répondu à tes attentes
Dis moi !!!



Avatar
Sunburn
re,
au fait, comment faire pour que une fois exécutée, la cellule qui copie le
format ne clignotte plus ???
un 'Application.CutCopyMode = False peut suffire ?
Merci.
YANN

"FFO" a écrit :

Rebonjour à toi

Change le code de la feuille ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Offset(1, 0).Interior.ColorIndex = xlNone And
Target.Interior.ColorIndex = 36 And Cells(Target.Row, Target.Column) <> ""
Then
ActiveSheet.Unprotect ("Mot de passe")
Formule1 = Range("D" & Target.Row + 1).Formula
Formule2 = Range("E" & Target.Row + 1).Formula
Target.EntireRow.Copy
Target.Offset(1, 0).EntireRow.Insert Shift:=xlDown
Target.Offset(1, 0).ClearContents
Target.Offset(-1, 0).EntireRow.Copy
Target.EntireRow.PasteSpecial Paste:=xlPasteFormats
Range("D" & Target.Row + 2).Formula = Split(Range("D" & Target.Row +
2).Formula, ":")(0) & ":" & Mid(Split(Range("D" & Target.Row + 2).Formula,
":")(1), 1, 1) & Mid(Split(Range("D" & Target.Row + 2).Formula, ":")(1), 2,
Len(Mid(Split(Range("D" & Target.Row + 2).Formula, ":")(1), 2)) - 1) + 1 & ")"
Range("E" & Target.Row + 2).Formula = Split(Range("E" & Target.Row +
2).Formula, ":")(0) & ":" & Mid(Split(Range("E" & Target.Row + 2).Formula,
":")(1), 1, 1) & Mid(Split(Range("E" & Target.Row + 2).Formula, ":")(1), 2,
Len(Mid(Split(Range("E" & Target.Row + 2).Formula, ":")(1), 2)) - 1) + 1 & ")"
ActiveSheet.Protect ("Mot de passe")
End If
End Sub


Soit tu le remplaces soit tu rajoutes les 2 lignes :

ActiveSheet.Unprotect ("Mot de passe")
ActiveSheet.Protect ("Mot de passe")

au bon endroit
Le Mot de passe n'est pas obligatoire

Il faudra rajouter ces 2 lignes pour la Macro "Nettoyage" ainsi :

For j = 1 to Sheets.Count
If Sheets(j).Name = "60_21" or Sheets(j).Name = "90_13" then
Sheest(j).Activate
ActiveSheet.Unprotect ("Mot de passe")
i = 0
Do While Range("A9").Offset(i, 0).Row < Range("D65535").End(xlUp).Row
If Range("A9").Offset(i, 0).Interior.ColorIndex = 36 Then
n = n + 1
End If
If Range("A9").Offset(i, 0).Interior.ColorIndex <> 36 Then
n = 0
End If
If n > 3 Then
Range("A9").Offset(i, 0).EntireRow.Select
Selection.Delete
i = i - 1
End If
i = i + 1
Loop
Range("A1").Activate
ActiveSheet.Protect ("Mot de passe")
End If
Next

J'espère avoir répondu à tes attentes
Dis moi !!!



Avatar
FFO
Rebonjour à toi

Tu peux effectivement mettre cette ligne de code en fin
Celà devrait convenir

Au plaisir
Avatar
Sunburn
oui oui, ça marche bien, pour une fois que je trouve un truc .... :°))
YANN

"FFO" a écrit :

Rebonjour à toi

Tu peux effectivement mettre cette ligne de code en fin
Celà devrait convenir

Au plaisir


1 2 3