Comment copier la page active sur une nouvelle feuille ?

Bonsoir membres du forum,

Je recherche la méthode VBA qui me permette de copier les données de la page active sur une nouvelle feuille

en évitant d'y copier les commandes de la page d'origine.

Voici un code qui copie les données sur une nouvelle feuille mais le soucis est qu'il copie aussi
les boutons de commande sur cette nouvelle page ce que je voudrais éviter.

Sub InsererNouvelleFeuilleExcel()
'
' Macro Insérer une nouvelle feuille Excel
'

'
    Range("B1:U30").Select
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    ActiveWindow.SmallScroll Down:=-24
    'Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    Range("B1").Select
    'Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    'ActiveSheet.Paste
End Sub

Cordialement.

Bonjour,

Je ne pense pas qu'il existe une commande pour copier/coller en évitant les boutons, cependant tu peux rajouter une ligne pour supprimer le bouton de commande.

Je sais que ce n'est pas une solution très élégante mais cela peut dépanner :)

Exemple code :

 With ActiveSheet
        .Name = "nom de la feuille avec le bouton à supprimer"
        .Shapes("Nomdetonbouton").Delete
    End With

Bonne journée,

Alexis Euillades.

Bonsoir ,

Comment déclarer cet objet Shapes ?

userform 36

Il y a trois boutons de commandes sur la feuille PARTAGE GLOBAL à ne pas copier sur les nouvelles.

Cordialement.

Bonjour,
Une petite contribution.
A adapter.
Cdlt.

Sub DeleteFormControls()
Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoFormControl Then shp.Delete
    Next shp
End Sub

Bonsoir Jean-Eric,

Merci pour ton aide.

J'ai 3 boutons de commande sur la feuille à copier.

Pourrais tu m'expliquer en commentant les lignes de codes afin que je puisse l'adapter à ma recherche ?

Sub InsererNouvelleFeuilleExcel() ' Macro Insérer une nouvelle feuille Excel
    Sheets.Add After:=Sheets(Sheets.Count)
    Range("B1").Select

    DeleteFormControls

End Sub

Sub DeleteFormControls()
Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoFormControl Then shp.Delete
    Next shp
End Sub

Cordialement.

Bonsoir membres du forum,

Finalement, j'ai adapté le code suivant:

    Sub InsererNouvelleFeuille_Excel()
'
' Macro Insérer une nouvelle feuille Excel
'

'
    Range("B1:U30").Select
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    ActiveWindow.SmallScroll Down:=-24
    Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    Range("B1").Select
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveSheet.Paste
End Sub

Les commandes copiées sont utiles. Plus question de les supprimer.

Ce que je recherche actuellement est de pouvoir renommer par VBA la nouvelle page copiée par le code en question.

Cordialement.

Bonjour morobaboumar, le fil, le forum,

Un essai ...

Sub InsererNouvelleFeuille_Excel()

    ' Macro Insérer une nouvelle feuille Excel et la renommer

    Range("B1:U30").Copy                    ' sélectionne la plage à copier

    Sheets.Add After:=Sheets(Sheets.Count)  ' ajoute une feuille après la dernière feuille

    ' prépare les options de collage des données sur la nouvelle feuille avec les mêmes largeurs de colonne
    ActiveSheet.Range("B1:U30").PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False

    ActiveSheet.Paste                       ' colle les données sur la nouvelle feuille

    ActiveSheet.Name = "Morobaboumar"       ' renomme la feuille

    Application.CutCopyMode = False         ' désactive le mode sélection

    Application.Goto Range("A1"), True      ' positionne la cellue active

End Sub

ric

Bonjour Ric,

Ton code marche mais ne renomme pas comme prévu dans le code.

Par contre il crée les feuilles en double (voir la capture d'écran).

userform 41

Cordialement.

Bonjour morobaboumar, le fil, le forum,

2 points :

1- Il serait utile que tu indiques dans ton profil la version de Excel que tu utilises ...

2- Le nom de la feuille créée ... tu veux sûrement un nom qui change à chaque création d'une nouvelle feuille ... où faudrait-il prendre cette information ?
- dans une feuille ? ... le nom du mois suivant ? ... le nom de la feuille à copier plus un changement ? Ou une boîte de dialogue pour inscrire ton choix ?

Merci de m'expliquer où prendre ce nouveau nom de feuille ... j'attends cela pour modifier le code ...

ric

Bonjour ric,

Version Excel utilisée Excel 2013.

Je souhaite renommer la nouvelle feuille créée avec ce nom exemple: PARTAGE_GLOBAL suivi de la date d'enregistrement (une boîte de dialogue pour inscrire mon choix).

Cordialement.

Bonjour morobaboumar, le fil, le forum,

Pour ta version de Excel ... tu peux l'inscrire dans ton profil ...
Tout au haut de la page Web de ce site, clique sur "Mon compte" ... "Profil et préférences" ... "Mon profil public" ... la première ligne "Version et langue d'Excel" >> tu as droit à 16 caractères ... merci ...

Pour le code : voir si cela convient ...

Public Function FeuilleExiste(FeuilleAVerifier As String) As Boolean
'fonction qui vérifie si la "FeuilleAVerifier" existe dans le Classeur actif
'par Excel-Malin.com ( https://excel-malin.com )

On Error GoTo SiErreur
Dim Feuille
    FeuilleExiste = False
    For Each Feuille In Sheets
        If UCase(Feuille.Name) = UCase(FeuilleAVerifier) Then
            FeuilleExiste = True
            Exit Function
        End If
    Next Feuille
Exit Function

SiErreur:
'    FeuilleExiste = CVErr(xlErrNA)
End Function

Sub InsererNouvelleFeuille_Excel()
    ' Macro Insérer une nouvelle feuille Excel et la renommer
    Dim NomNouvelleFeuille As String
    Dim resultat As String

    resultat = InputBox("Date d'enregistrement ", "Nom de la nouvelle feuille ...", "PARTAGE_GLOBAL_" & Date & "_") 'La variable reçoit la valeur entrée dans l'InputBox

    If resultat <> "" Then 'Si la valeur est différente de "" on affiche le résultat
        NomNouvelleFeuille = resultat
    Else
        Exit Sub            ' si annulé ...
    End If

    FeuilleExiste NomNouvelleFeuille        ' Vérifier si ce nom existe déjà dans les onglets

    If FeuilleExiste(NomNouvelleFeuille) = True Then    ' message si le nom existe déjà
        MsgBox " Ce nom de feuille existe déjà ... !"
        Exit Sub
    End If

    Range("B1:U30").Copy                    ' sélectionne la plage à copier
    Sheets.Add After:=Sheets(Sheets.Count)  ' ajoute une feuille après la dernière feuille

    ' prépare les options de collage des données sur la nouvelle feuille avec les mêmes largeurs de colonne
    ActiveSheet.Range("B1:U30").PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveSheet.Paste                       ' colle les données sur la nouvelle feuille

    ActiveSheet.Name = NomNouvelleFeuille  ' renomme la feuille
    Application.CutCopyMode = False         ' désactive le mode sélection
    Application.Goto Range("A1"), True      ' positionne la cellue active
End Sub

ric

Le code est parfait mais j'ai un messge d'erreur (voir l'image).

userform 42

Cordialement.

Bonjour morobaboumar, le fil, le forum,

Désolé de mon étourderie ... c'est corrigé dans ce code ...

Ce sont les caractères "/" qui sont refusés ...

Pour contourner, je compose la date en mode texte afin d'utiliser les "-" comme séparateurs ... lesquels sont acceptés dans le nom de la feuille ...

Ne modifie que cette macro ...

Sub InsererNouvelleFeuille_Excel()

    ' Macro Insérer une nouvelle feuille Excel et la renommer
    Dim NomNouvelleFeuille As String
    Dim resultat As String, LaDate As String

    LaDate = Day(Date) & "-" & Month(Date) & "-" & Year(Date)  ' compose la date en texte

    resultat = InputBox("Date d'enregistrement ", "Nom de la nouvelle feuille ...", "PARTAGE_GLOBAL_" & LaDate & "_") 'La variable reçoit la valeur entrée dans l'InputBox

    If resultat <> "" Then 'Si la valeur est différente de "" on affiche le résultat
        NomNouvelleFeuille = resultat
    Else
        Exit Sub            ' si annulé ...
    End If

    FeuilleExiste NomNouvelleFeuille        ' Vérifier si ce nom existe déjà dans les onglets

    If FeuilleExiste(NomNouvelleFeuille) = True Then    ' message si le nom existe déjà
        MsgBox " Ce nom de feuille existe déjà ... !"
        Exit Sub
    End If

    Range("B1:U30").Copy                    ' sélectionne la plage à copier
    Sheets.Add After:=Sheets(Sheets.Count)  ' ajoute une feuille après la dernière feuille

    ' prépare les options de collage des données sur la nouvelle feuille avec les mêmes largeurs de colonne
    ActiveSheet.Range("B1:U30").PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveSheet.Paste                       ' colle les données sur la nouvelle feuille

    ActiveSheet.Name = NomNouvelleFeuille  ' renomme la feuille
    Application.CutCopyMode = False         ' désactive le mode sélection
    Application.Goto Range("A1"), True      ' positionne la cellue active
End Sub

ric

Merci infiniment ric,

Résolu !

Cordialement;

Bonjour morobaboumar, le fil, le forum,

Excellent ...

ric
Rechercher des sujets similaires à "comment copier page active nouvelle feuille"