Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Copier coller dernière ligne remplie d'un tableau

ascal44

XLDnaute Occasionnel
Bonjour , j'ai un tableau en B7:J54

Je souhaiterais réinscrire les valeures de la dernière ligne (non vide ) en B5. Et cela de façon immédiate sans à avoir à exécuter une macro .

Est ce possible ?

Merci par avance pouir vos idées .
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Toujours aussi peu clair.
"210/12/2023" c'est suivant quel calendrier ?
Vous voulez quoi ? La ligne dont la date en colonne E est la plus récente ?
Si oui, utilisez :
VB:
=INDEX(B$9:B$55;EQUIV(MAX($E$9:$E$55);$E$9:$E$55;0))
Sinon soyez plus explicite.
 

Pièces jointes

  • Classeur1 (1).xlsx
    13.6 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour à tous,

Formule en B5 à tirer vers la droite :
Code:
=SIERREUR(SI(ESTNUM(INDEX(B:B;derlig));INDEX(B:B;derlig);""&INDEX(B:B;derlig));"")
derlig étant le nom défini par :
Code:
=GRANDE.VALEUR(SI(Tableau2<>"";LIGNE(Tableau2));1)
A+
 

Pièces jointes

  • Classeur1.xlsx
    14.3 KB · Affichages: 3

job75

XLDnaute Barbatruc
La solution précédente ne fonctionne pas si le tableau contient des valeurs d'erreur.

Pour les ignorer définir derlig par :
Code:
=GRANDE.VALEUR(SI(ESTNUM(LN(Tableau2<>""));LIGNE(Tableau2));1)
 

Pièces jointes

  • Classeur2.xlsx
    14.6 KB · Affichages: 4

ascal44

XLDnaute Occasionnel
Encore des améliorations à apporter :
Lors de l'exécution de la macro CopierFeuilleMultiple , il faudrait accepter la version du nom " derlg" automatiquement sans avoir a valider pour chaque feuille.
Si l'on exécute une deuxième fois la macro il faudrait pouvoir reprendre l'incrémentation du nom des feuilles pour ne pas avoir 3(2) , 3 (3) , 3 (4) par exemple.

VB:
Sub CopierFeuilleMultiple()
Dim n As Integer, i As Integer
On Error Resume Next
Application.ScreenUpdating = False
    n = InputBox("Combien de copies voulez-vous créer?")
    If n > 0 Then
        For i = 1 To n
            ActiveSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count)
            ActiveSheet.Name = i
            ActiveSheet.[C5] = i
        Next
    End If
End Sub
 

Pièces jointes

  • test.xlsx
    37.3 KB · Affichages: 2
Dernière édition:

job75

XLDnaute Barbatruc
Exécutez :
VB:
Sub CopierFeuilleMultiple()
Dim n As Integer, i As Integer
With [Tableau2].Parent
    .Name = 1
    .Activate
    On Error Resume Next
    n = InputBox("Combien de copies voulez-vous créer?")
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For i = 2 To n: Sheets(CStr(i)).Delete: Next i
    For i = 2 To n
        .Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = i
        ActiveSheet.Move After:=Sheets(CStr(i - 1)) 'tri
        ActiveSheet.Range("C5") = i
    Next i
    .Activate
End With
End Sub
A quoi sert la feuille "Bat" ?

Edit : ajouté ActiveSheet.Move After:=Sheets(CStr(i - 1)) 'tri
 

Pièces jointes

  • test.xlsm
    28.7 KB · Affichages: 0
Dernière édition:

ascal44

XLDnaute Occasionnel
La feuille "Bat" est en quelque sorte une feuille sommaire.
Il faudrait alors reporter les valeures en B7:J7 des feuilles numérotées dans de le tableau correspondant de la feuille " Bat"
Il reste encore à trouver le code pour cela.
 

Pièces jointes

  • Batteri.xls
    116.5 KB · Affichages: 1

job75

XLDnaute Barbatruc
Voyez les 8 formules en C8:J8 de la feuille "Bat", à tirer vers le bas.

Vous êtes sur Excel 2010, pourquoi utiliser un fichier .xls ? La fonction SIERREUR n'est pas acceptée !

J'ai donc converti le fichier en .xlsm.
 

Pièces jointes

  • Batteri.xlsm
    41.6 KB · Affichages: 3

job75

XLDnaute Barbatruc
Bonjour le forum,

Une solution VBA avec cette macro dans le code de la feuille "Bat" :
VB:
Private Sub Worksheet_Activate()
Dim zonecopie$, ncol%, ligdeb&, coldeb%, lig&, w As Worksheet, i&
zonecopie = "B7:J7"
ncol = Range(zonecopie).Columns.Count
ligdeb = 8
coldeb = 2
lig = ligdeb
Application.ScreenUpdating = False
Rows(ligdeb & ":" & Rows.Count).Delete 'RAZ
For Each w In Worksheets
    i = Val(w.Name)
    If i Then
        Cells(lig, coldeb).Resize(, ncol) = w.Range(zonecopie).Value 'copie les valeurs
        lig = lig + 1
    End If
Next
If lig = ligdeb Then Exit Sub
With Cells(ligdeb, coldeb).Resize(lig - ligdeb, ncol)
    .Sort .Columns(1), xlAscending, Header:=xlNo 'tri
    .Interior.Color = RGB(164, 204, 228) 'bleu
    .Borders.Weight = xlThin 'bordures
End With
End Sub
Elle se déclenche automatiquement quand on active la feuille.

A+
 

Pièces jointes

  • Batteri(1).xlsm
    47.3 KB · Affichages: 2

Discussions similaires

Réponses
20
Affichages
724
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…