Bonjour
Je dégaine mon colt encore une fois

Il est inutile de recopier l'ensemble de mon message.
maxime14000 a écrit:ou doit je indiquer la ligne sélectionné à copié car je n'arrive pas a faire fonctionner la programation...??
Il suffit de sélectionner une ligne sur la feuille et lancer la macro. La macro va fonctionner sur toute les feuilles et va insérer et recopier la ligne sélectionnée en dessous.
Exemple, je clic sur le nombre
36 complètement à gauche sur le tableur. L'ensemble de la ligne est sélectionnée et apparaît en surbrillance.
Je lance la macro en cliquant sur le bouton
+ et une ligne est ajoutée en dessous de la 36 avec la copie de la formule présente dans la ligne 36.
La macro
Select_Insert_Copy est affectée au boutons. Et je me répète, elle vérifie uniquement la sélection de plusieurs cellules. Si tu as sélectionné et copier la mauvaise ligne, il suffira de supprimer la nouvelle ligne.
Cela me semble le moyen le plus simple pour toi à reproduire de mois en mois et de classeur en classeur. Une seule macro, simple et un bouton dans une barre d'outils. Pas de zone de nom à reproduire sur d'autre classeur, bref un truc simple qui s’adapte à toute les situations. Ce n'est que mon avis
Un exemple en pièce jointe, la nouvelle barre d'outils s'appelle INSERT ET COPIE
Ajout : Pour le fun... Après quelques galères pour donner un nom incrémenté au plages sur les différentes feuilles. AOo et LibO supporte mal le mélange nombre et lettre sur les noms de plages, une macro pour créer les 93 plages sur les 31 feuilles.
- Code : Tout sélectionner AgrandirRéduire
Sub Creer_NomPlage Dim oDoc As Object Dim Tab() As String, LesFeuilles() As String, RefZone() As String, Destination() As String Dim Nom As String, Zone As String, MaFeuille As Object, Dest As Object oDoc = ThisComponent Tab() = Array("tab_clientscomptes", "tab_depense", "tab_ticketresto") RefZone() = Array("$A$36:$L$37","$A$43:$L$44","$A$29:$L$30") Destination() = Array("$A$36", "$A$43", "$A$29") LesFeuilles() = oDoc.Sheets.ElementNames
For i = 1 to 31 For k = 0 to 2 Nom = Tab(k)&i 'Le Nom de la future Plage Zone = "$" & i & "." & RefZone(k) 'La réference de plage MaFeuille = oDoc.Sheets.GetByName(i) Dest = MaFeuille.GetCellRangeByName(Destination(k)) 'cellule reference de destination If Not oDoc.NamedRanges.HasByName(Nom) Then 'si la plage n'existe pas oDoc.NamedRanges.AddNewByName(Nom,Zone,Dest.CellAddress,0) End if Next k Next i end sub et une des macros adapté de OOotremer971 pour que cela fonctionne sur les 31 feuilles
- Code : Tout sélectionner AgrandirRéduire
Sub AjouterLigneclientcompte Dim oDoc As Object, oRaZone As Object, feuille As Object, ligne_A_recopier As Object Dim lesLignes As Object, colonnes As Object, destination As Object Dim i As Long oDoc = Thiscomponent NomFeuille = oDoc.CurrentController.ActiveSheet.Name oRaZone = oDoc.namedRanges.getByName("tab_clientscomptes" & NomFeuille).getReferredCells().getRangeAddress() feuille = oDoc.Sheets(oRaZone.Sheet) lesLignes = feuille.Rows ligne_A_recopier = feuille.getCellRangeByPosition(oRaZone.startColumn, oRaZone.endRow-1, oRaZone.endColumn, oRaZone.endRow-1) lesLignes.insertByIndex(oRaZone.endRow,1) destination = feuille.getCellByPosition(oRaZone.startColumn, oRaZone.endRow) feuille.copyRange(destination.CellAddress, ligne_A_recopier.RangeAddress) colonnes = Array(1,3,5,7,9) for i = LBound(colonnes) To UBound(colonnes) feuille.getCellByPosition(colonnes(i), oRaZone.endRow).SetString("") next i End Sub . Un nouveau fichier en pièce jointe. J'ai juste testé sur la feuille 1 et 2 donc méfiance |
Cordialement
Luke