Copie d'un range dans une nouvelle feuille en dernière position

Bonjour,

Je souhaiterais copier un range dans une nouvelle feuille placée en dernière position, actuellement cela fonctionne si je copie

la totalité de la feuille mais dès que je spécifie une plage précise cela ne fonctionne plus.

Voici le code qui fonctionne pour copie de la totalité de la feuille:

[code]Option Explicit

Sub Facturation_Bouton2_QuandClic()

Dim NouveauNom As String

NouveauNom = Range("F38").Value

Application.ScreenUpdating = False

If FExist(NouveauNom) Then

MsgBox "Cette facture existe déjà"

Application.ScreenUpdating = True

Exit Sub

Else

Application.ScreenUpdating = False

Sheets("Facturation").Copy after:=Sheets(Sheets.Count)

ActiveSheet.Name = NouveauNom

End If

Application.ScreenUpdating = True

End Sub

Function FExist(NomF As String) As Boolean ' test si la feuille existe

Application.ScreenUpdating = False

On Error Resume Next

FExist = Not Sheets(NomF) Is Nothing

Application.ScreenUpdating = True

End Function

/code]

J'ai donc remplacé

Sheets("Facturation").Copy after:=Sheets(Sheets.Count)

par

Sheets("Facturation").Range("C2:O81").Copy after:=Sheets(Sheets.Count)

mais ça ne fonctionne pas, idem en sélectionnant le range avec .Select puis en copiant la sélection dans la nouvelle feuille.

Merci pour votre aide.

Dul

Bonjour,

proposition d'adaptation du code

Option Explicit
Sub Facturation_Bouton2_QuandClic()

    Dim NouveauNom As String
    NouveauNom = Range("F38").Value
    Application.ScreenUpdating = False
    If FExist(NouveauNom) Then
        MsgBox "Cette facture existe déjà"
        Application.ScreenUpdating = True
        Exit Sub
    Else
        Application.ScreenUpdating = False
        Sheets.Add after:=Sheets(Sheets.Count)
        With ActiveSheet
            Sheets("Facturation").Range("C2:O81").Copy .Range("c2")
            .Name = NouveauNom
        End With
    End If
    Application.ScreenUpdating = True
End Sub

Function FExist(NomF As String) As Boolean    ' test si la feuille existe
    Application.ScreenUpdating = False
    On Error Resume Next
    FExist = Not Sheets(NomF) Is Nothing
    Application.ScreenUpdating = True
End Function

Bonjour h2so4,

Merci beaucoup, ça fonctionne, mais la mise en page de la nouvelle feuille est modifiée (taille des lignes et des colonnes), serait-il possible de conserver celle de la feuille originale, j'ai ajouté ActiveWindow.Zoom = 40 qui est le même zoom que la feuille originale mais cela n'y change rien.

Dul

Bonjour,

essaie cei

Option Explicit
Sub Facturation_Bouton2_QuandClic()

    Dim NouveauNom As String
    NouveauNom = Range("F38").Value
    Application.ScreenUpdating = False
    If FExist(NouveauNom) Then
        MsgBox "Cette facture existe déjà"
        Application.ScreenUpdating = True
        Exit Sub
    Else
        Application.ScreenUpdating = False
        Sheets("facturation").Copy after:=Sheets(Sheets.Count)
        With ActiveSheet
            .Cells.ClearContents
            Sheets("Facturation").Range("C2:O81").Copy .Range("c2")
            .Name = NouveauNom
        End With
    End If
    Application.ScreenUpdating = True
End Sub

Function FExist(NomF As String) As Boolean    ' test si la feuille existe
    Application.ScreenUpdating = False
    On Error Resume Next
    FExist = Not Sheets(NomF) Is Nothing
    Application.ScreenUpdating = True
End Function

Rebonjour et merci pour ce nouvel essai,

Sur ce code la mise en page est bien conservée (comme dans le tout premier code) mais la feuille est recopiée en intégralité, le range sélectionné n'est pas pris en compte.

Dul

Bonsoir,

je ne peux pas t'aider davantage, car mes tests montrent que ce code fait ce que tu as demandé.

Peut-être est-ce lié à une particularité de ton fichier ? merci de mettre un fichier exemple dans lequel tu peux montrer que cela ne fonctionne pas.

Bonjour,

J'ai donc fait d'autres essais, effectivement ton code fonctionne parfaitement.

La Feuil1 édite des factures et le range ("C2:O53") sert à ne recopier que la facture sur un autre feuille (et pas le bouton qui lance la recopie et qui se trouve en ligne 1, en dehors du range).

J'ai ajouté du texte sur la ligne 1 à coté du bouton, ce texte n'est pas recopié dans la nouvelle feuille lorsque l'on lance ton code mais le bouton l'est.

Aurais-tu une idée pour que le bouton ne soit pas recopié ou bien masqué ? Je suis malheureusement sur mac et la fonction visible.false du bouton n'existe pas sur une feuille (uniquement s'il est dans un userform).

J'ai essayé de supprimer la ligne 1 juste après la recopie mais cela provoque des décalages.

Voici le fichier en PJ.

Dul

5recopie1.zip (122.83 Ko)
Rechercher des sujets similaires à "copie range nouvelle feuille derniere position"