Insérer nouvelle ligne dans tableau

W

Willy

Guest
Bonsoir à tous,
Je vais essayer d'être clair ( pas facile quand on débute !)

J'ai une feuille qui contient un arrière plan.
j'ai un petit tableau de B10 à I20.
( Ce que j'appelle un petit tableau c'est que chaque cellule de B10 à I20 à le fond coloré en blanc et chaque cellule contient une bordure).
J'ai une procédure qui me permet si besoin d'insérer une ligne à ce tableau, c'est à dire effectue une copie de la ligne précédente avec la mise en forme mais également les formules incrémentées.
Si j'insère une ligne à partir de la dernière ligne, aucun pb l'opération est effectuée correctement me semble t'il.
Par contre ca m... au niveau des formules si j'insère une ligne n'importe ou dans le tableau. celle-ci n'est pas incrémentée mais simplement copiée.
Comment effectuer une insertion de ligne avec mise en forme et formules correctement n'importe ou dans le classeur ?

Voici la procédure que j'utilise :

Sub NouvelleLigneEnBas()

'Lève la protection de la feuille
ActiveSheet.Unprotect Password:="SCENE"

'Place le curseur à la dernière cellule vide
Range("B10").Select
While IsEmpty(ActiveCell) = False
ActiveCell.Offset(1, 0).Activate
Wend

Dim ZtNumLig As Integer
Dim ZtDerCol As Integer

ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol

Next i
ActiveCell.Range("A2").Select

'Remet la protection de la feuille
ActiveSheet.Protect Password:="SCENE", DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Toutes vos idées seront les bienvenues.
Le but que je recherche c'est d'avoir un tableau qui ne contienne que le nombre de ligne écrite pour ne pas avoir à imprimer des lignes vierges.

Peut être serait t'il plus judicieux d'avoir un tableau qui contienne 200 lignes vierges et de supprimer les lignes vierges avant l'impression ?
Pour ma part je trouve cette solution trop rigide, car si j'ai besoin de créer la ligne 201, je me retrouve dans le même problème.
Quand pensez vous ?

Merci de votre aide,
Willy
 
@

@+Thierry

Guest
Bonsoir Willy

Un peu bizarre cette macro déjà ... Ca sert à quoi la boucle où il n'y a rien à faire ??? pour que ça aille moins vite (lol)

Pour l'instant je regarde, mais je n'arrive même pas à copier/coller quoique ce soit avec cette usine à gaz !

Bon je regarderai çà plus tard...
@+Thierry
 
W

Willy

Guest
Bonsoir Thierry,
>Un peu bizarre cette macro déjà ... Ca sert à quoi la boucle où il n'y a rien à faire ??? pour que ça aille moins vite (lol)

Lol, Non en fait lors du message j'ai supprimer les lignes entre la boucles et non la boucle.
Ces lignes m'empêchait de copier une cellule fusionnée.

C'est vrai que pour moi aussi ca me parait usine à gaz pour simplement copier une ligne.
Merci pour ton aide
Willy
Au juste, je peut télécharger avec donwload express et depuis hier je me fait un vrai festival de récupération d'exemple. Un régal
Et sur une de tes démos ( USFFacturationGestionStockV3 )tu empêche l'accès au lignes 1 à 14 quelques soit la manière d'y accéder ( scroll, au clavier )
Je ne connaissait pas cette possibilité dans excel et sauf erreur je n'ai rien trouvé en vba qui permette cette interdiction.
N'y d'ailleur dans les menus d'Excel ?
Comment est ce possible, vain dieu ???
merci, à plus
 
@

@+Thierry

Guest
Re Willy

Bon sans faire des tests vraiment probants sur une vrai feuille contenant des ta de formules... Essaie tout bêtement çà : (en fait c'est exactement le même principe que dans ce code zarbi mais en plus clair !!

Sub InserTionCopy()
Dim L As Integer
L = ActiveCell.Row
ActiveCell.EntireRow.Insert
Sheets(1).Range("A" & L - 1).EntireRow.Copy _
Sheets(1).Range("A" & L)
End Sub

Pour la Démo "USFFacturationGestionStockV3" j'utilise simplement la Méthode :
Sheets(1).Rows("1:14").Hidden = True

Que l'on peut faire depuis Excel avec le menu contextuel ("Row") lorsque l'on est positionné sur les heading des numéro de ligne.

Méthode identique avec les Colonnes
Columns("B:J").Hidden = True (menu contextuel ("Column") idem)

Voilà Willy tu n'es une fois de plus pas venu pour rien sur XLD !!
Bonne Nuit
@+Thierry
 
W

Willy

Guest
Re Bonsoir Thierry
>Voilà Willy tu n'es une fois de plus pas venu pour rien sur XLD !!
Ca c'est sur, je n'y viens jamais pour rien.
Extrêmement instructif.
Bon il me tarde d'essayer ta procédure
Merci encore et bonne nuit également
Willy
 
V

Valérie

Guest
Slt à tous

Oui c'est une solution mois j'aurai fait...

ActiveCell.EntireRow.Copy
ActiveCell.EntireRow.Insert Shift:=xlDown
Application.CutCopyMode = False

pour copier tout simplement (j'aime pas les variables!!! elles m'ont souvent créées des débordements de pile les vilaines..)


@+
Valérie
 
W

Willy

Guest
bonsoir à tous,
Grand merci à Valérie et Thierry pour leur aide.
Effectivement c'est bien plus simple que la procédure usine à gaz
que j'utilisait !!
Par contre quand j'insère une ligne dans mon tableau, c'est une copie de la ligne précédente mais du coup la formule présente dans une des cellules de la ligne est erronée.
Voici la formule de la ligne précédente :

=SI(ET(E15="";F15="");"";I14-E15+F15)
Et voici la formule de la nouvelle ligne :
=SI(ET(E16="";F16="");"";I14-E16+F16)
En fait I14 n'est pas incrémenté
Comment puije corriger cela ?
Merci
William
 
V

Valérie

Guest
Slt à toi William

Si tu n'as qu'une seule formule tu peux rajouter une ligne de code du style

Range("B" & ActiveCell.Row, "B" & ActiveCell.Row + 1).FormulaR1C1 = Range("B" & ActiveCell.Row - 1).FormulaR1C1

tu remplaces bien évidemment le B par la lettre de ta colonne. Car j'ai testé et ce sont pas moins de 2 cellules qui se retrouve avec une formule erronée

@ bientôt
 

Discussions similaires

Statistiques des forums

Discussions
313 066
Messages
2 094 955
Membres
106 136
dernier inscrit
MilieBZH