Récupérer la valeur d'une texteBox pour renommer une feuille

Bonjour,

J'ai un bouton Activex qui déclenche un userform dans lequel l'utilisateur doit rentrer un nom dans une TextBox. Quand l'utilisateur va cliquer sur "Validate" j'aimerai copier/coller une feuille déjà existante en renommant la nouvelle feuille avec le nouveau nom renseigner dans la textbox. Je souhaiterai rajouter une condition quand aucun nom n'est renseigné avec une fenêtre qui s'affiche "Veuillez renseigner un nom de pièce !".

Si une personne pouvais m'aider à coder cela, ça serait hyper sympa !

image

En vous remerciant par avance de votre aide !

Cordialement

Bonjour

Merci de mettre votre profil de compte à jour en ajoutant votre version excel (2016, 2019, MAC 2019, MAC 2011...)


Pour votre demande, essayez ceci dans votre code

Sheets("feuille à copier").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = Me.TextBox1.Value

- Textbox1 étant le nom de votre textbox
- feuille à copier étant votre "feuille existante" que vous mentionnez dans votre post

Crdlt

Super cela m'aide beaucoup, mais j'aimerai adapter le code sachant que la feuille à copier est masquée ? En effet, avec le code actuel cela ne fonctionne pas, il ne renomme pas la bonne feuille !

Le mieux est de démasquer avant et de remasquer ensuite

essayez comme ceci :

With Sheets("Feuille à copier")
    .Visible = xlSheetVisible
    .Copy After:=Sheets(Sheets.Count)
    .Visible = xlSheetVeryHidden
End With
With ActiveSheet
    .Name = Me.TextBox1.Value
    .Visible = xlSheetVeryHidden
End With

Crdlt

En intégrant votre code, cela me supprime la feuille à copier ! N'y a t-il pas une autre alternative ?

En intégrant votre code, cela me supprime la feuille à copier !

Heu ... non, elle est remasquée. Il n'y a aucune suppression de feuille dans le code

Bonjour azerty4, bonjour Dan,

Je me permet de reprendre ce que Dan a proposé et qui devrai répondre à vos attentes. En effet, je me suis permis de compléter le code en y ajoutant deux vérifications, à savoir : S'assurer que le champ ne reste pas vide et que le nom n'est pas déjà assigné à une autre feuille du classeur (nous évitons ainsi des erreurs d'exécution )

Option Explicit

Private Sub CommandButton1_Click()
Dim Sh As Worksheet, Source As Worksheet

    If Me.TextBox1 = "" Then MsgBox "Please, choose a Part Name.", vbExclamation: Me.TextBox1.SetFocus: Exit Sub 'S'assurer que le textbox ne reste pas vide, sinon message d'information et sortie du programme
    For Each Sh In ThisWorkbook.Worksheets 'Boucler sur toutes les feuilles du classeur pour s'assurer qu'une autre feuille du même nom n'existe pas
        If LCase(Sh.Name) = LCase(Me.TextBox1) Then 'Si une feuille du même nom alors :
            MsgBox "Name already taken, please choose another one.", vbExclamation 'Message d'information
            Me.TextBox1.SetFocus 'Remise du focus sur le textbox (car perdu suite au clic sur le bouton)
            Exit Sub 'Sortie du programme
        End If
    Next Sh

    Set Source = ThisWorkbook.Worksheets("ShToPast") 'Définir la feuille à copier
    Application.ScreenUpdating = False 'Annulation du rafraichissement de l'écran
    Source.Visible = xlSheetVisible 'Rendre visible la feuille à copier
    Source.Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) 'Copier la feuille en dernière position
    ThisWorkbook.ActiveSheet.Name = Me.TextBox1 'Renommer la feuille par la saisie du textbox
    Source.Visible = xlSheetHidden 'Remise à l'état cachée de la feuille source
    Application.ScreenUpdating = True 'Réactivation du rafraichissement de l'écran
End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub
13copypast.xlsm (27.22 Ko)

Bonjour

@Gauthier :
Ok j'avais prévu cela mais trop tôt à ce stade pour le lui proposer, on ne connait pas la structure de son fichier.
A voir si cela ne va pas l'embrouiller (raison pour laquelle je ne suis pas allé plus loin)

Merci GGautier , pour ces explications claires et précises avec le fichiers qui permet de bien comprendre ! Cependant, après avoir renseigné le "Part Name" et cliqué sur "Validate" un message s'affiche, ce qui est normal, mais comment faire pour dire au code "Oui pour tout" ?

image

Peut-être en utilisant Application.DisplayAlerts = False? ce qui donne :

Application.ScreenUpdating = False
Source.Visible = xlSheetVisible
Source.Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
Application.DisplayAlerts = False
ThisWorkbook.ActiveSheet.Name = Me.TextBox1
Application.DisplayAlerts = True
Source.Visible = xlSheetHidden
Application.ScreenUpdating = True

Mais à vrai dire, il me manque une info, comment est généré ce message d'erreur ? et à quel moment dans l'exécution du code ce message apparait ?


Dan, c'est vrai tu as raison, c'est mon coté maniaque qui ressort là

Dan, c'est vrai tu as raison, c'est mon coté maniaque qui ressort là

OK. De mon coté je vous laisse continuer avec Azerty

Ce n'est pas un message d'erreur, mais un message d'informations, pour indiquer que la liste de données dans mon cas "LColor" va être copiée dans la nouvelle feuille. Sachant qu'il y en a d'autres, c'est la raison pour laquelle j'ai un bouton "Oui pour tous".

J'ai du mal à suivre là.... Nous étions sur une problématique concernant le copier/coller d'une feuille en la renommant avec un nom défini par l'utilisateur. Jusque là, ok. Est-ce possible d'avoir plus d'information concernant les actions associées au bouton "validate" ? De quelle liste parle t-on ? Où est-elle ? Où cette liste doit être copiée ?

Je vous joint un fichier test pour mieux comprendre ce que dois exécuter chaque fonctions. Pour info, 2 feuilles sont cachées ce qui est normal.

Quand je clique sur le bouton de la première feuille "Create a New...", un userform apparait, je rentre un nom qui sera celui de la nouvelle feuille.

Ensuite, sur cette nouvelle feuille j'ai un nouveau bouton 'Insert a new item", qui permet d'insérer une nouvelle ligne, mais cela ne fonctionne pas :/ Il fonctionne uniquement dans la page principale "Part".

16test.xlsm (82.86 Ko)

Re

je viens de lire votre post mais ce que vous demandez n'était pas dans votre demande initiale. Bien que c'est Gauthier qui vous suit et comme j'avais intialement proposé quelque chose, faites ceci :

Dans votre code Sub AjouterUneLigne(), modifiez cette ligne

With Sheets("Part").ListObjects(1)

par ceci :

With ActiveSheet.ListObjects(1)

Cordialement

Bonjour Dan,

Merci de votre aide, ça fonctionne mieux maintenant, par contre le numéro d'item ne s'incrémente pas comme il le devrait. Par quel code remplacer cette ligne ?

.Range(1, 1) = WorksheetFunction.Max(Range("TData[ITEM]")) + 1

par contre le numéro d'item ne s'incrémente pas comme il le devrait.

Désolé je n'avais pas regardé plus bas mais vous pouvez modifier la ligne comme suit

 .Range(1, 1) = WorksheetFunction.Max(ActiveSheet.ListObjects(1).ListColumns(1).DataBodyRange) + 1 

NB : Oubliez pas de mettre votre version excel dans votre profil de votre compte

Si ok ->

Crdlt

Impeccable merci. Je viens de me rendre compte que quand j'ajoute un nouvel item la taille et le type de police change dans les cellules suivantes :

image

Je viens de me rendre compte que quand j'ajoute un nouvel item la taille et le type de police change dans les cellules suivantes :

En fait vous avez bien plus simple à faire. Mais à voir si le voulez.
- Allez dans votre feuille PART et positionnez vous sur la cellule A5
- dans le menu EXcel, cliquez sur l'onglet CreationTableau
- dans la rubrique option style...., cochez la case "Ligne Total"

Cela va vous ajoutez la ligne Total en ligne 6 et une liste déroulante dans chaque cellule de cette ligne. Par défaut la liste déroulante est positionnée sur Aucun
Il vous suffit de choisir ce que vous voulez comme résultat.
Exemple en M6, choisissez SOMME et cela vous donnera la somme des montants repris en colonne M

Très bonne idée merci, je ne savais pas qu'on avait la possibilité de faire ça

Enfin, j'aimerai ajouter une condition qui effectue un remplissage des cellules vides en rouge de la colonne item ??

Rechercher des sujets similaires à "recuperer valeur textebox renommer feuille"