Création d'un onglet en le renommantavec l'affichage d'une c

bonjour a tous et toutes

j'ai un code qui créer un onglet vierge en le nommant S et si S existe alors Il mets S1 et ainsi de suite

je voudrais pourvoir le modifier afin que lors de la création de la feuille son nom soit celui qui est afficher dans la combobox sur l'userform si cela est possible bien sur (et l'option de +1 a chaque fois n'est pas utile) car le but de cet onglet une fois remplie c'est d'etre envoyer dans un dossier nommé sur c:

et il est rempli quand l'userform se ferme

Sub DuplicationFeuilleViergeAvecData()
        Dim Tourne As Long
        Dim Feuille As Worksheet
        Dim SMax As Integer
        'pour toutes les feuille du classeur
        For Each Feuille In ThisWorkbook.Worksheets
        'et si "S" existe
          If Left(Feuille.Name, 1) = "S" And Mid(Feuille.Name, 2) > SMax Then SMax = Mid(Feuille.Name, 2)
        Next
        'on ajoute un onglet après la feuille "Feul1" et il est nommé "S"
        Sheets.Add after:=Sheets("Feuil1")
        ' si"S" existe alors on renomme en "S1" ou "S2"
            ActiveSheet.Name = "S" & SMax + 1

    End Sub

j'ai trouvé d'autres codes sur le net mais pas qui prennent le nom du combobox où d'un textbox

je vais ce que propose le forum une envoyer le post

Bonjour,

et c'est quoi ton problème, tu ne sais pas obtenir la donnée sélectionnée dans un combobox ?

Bonjour,

Pour créer la feuille :

Sub DuplicationFeuilleViergeAvecData(nomF As String)
    If nomF <> "" Then Worksheets.Add(after:=Worksheets("Feuil1")).Name = nomF
End Sub

qui ajoute une feuille et la nomme...

A lancer par :

Private Sub ComboBox1_Change()
    If ComboBox1.ListIndex > -1 Then
        If MsgBox("Voulez-vous insérer une feuille à ce nom ?", vbYesNo + vbQuestion, _
         "Création de feuille") = vbYes Then DuplicationFeuilleViergeAvecData ComboBox1.Value
    End If
End Sub

A adapter selon configuration et si tu estimes ne pas avoir à demander confirmation...

Cordialement.

bonjour PierreJy, M Ferrant

merci beaucoup de vos réponses, mais j'ai chercher depuis et du coup j'ai lancer le post trop vite

bon voici ce que j'ai trouvé qui nomme l'onglet créer par la valeur du combobox

Option Explicit

Private Sub CommandButton1_Click()
Dim Faute As Long
  If Me.ComboBox1 = "" Then Exit Sub
  On Error Resume Next
  Sheets(Me.ComboBox1.Text).Visible = True
  Faute = Err.Number
  On Error GoTo 0
  If Faute > 0 Then
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.Name = Me.ComboBox1
  Else
    MsgBox "Feuille existante"
  End If
End Sub

Private Sub UserForm_Click()

End Sub

Tu disais :

(et l'option de +1 a chaque fois n'est pas utile) car le but de cet onglet une fois remplie c'est d'etre envoyer dans un dossier nommé sur c:

bonsoir Mferrand

oui le but de cet userform est de remplir une feuille a l'aide de texbox, listbox, labels qui se charge par la feuille d'ou ils sont,

il n'y qu'une feuille (devis)donc c'est forcement de cette feuille

afin de transférer certaines lignes tout en créant l'entête, et prenant en compte d'autres paramêtres pour créer un bon de commande qui sera enregistrer sous un dossier au nom du fournisseurs

bon programme en vue

bonsoir a tous et toutes

j'ai un petit soucis avec le code que je remets car je ne sais pas si c'est le même

ce code fonctionne très il créer la feuille en lui donnant le nom qui se trouve dans un combobox, mais le soucis que j'ai c'est quand cette feuille est remplie, enregistrée et effacer pour pouvoir en créer une autre sans avoir fermer le classeur

la 1èere feuille dans vba se nommais Feuil2(Dispano) très bien enregistrement parfait tout bien, création de la seconde feuille

sauf que dans vba elle ne se nomme pas Feuil2(Pointp) mais Feuil3(Pointp)

voir aperçu ci dessous

feuil3 pointp

voici le code

Private Sub CBnewfeuil_Click()

Dim Faute As Long
  If Me.CBlistefournisseurs = "" Then Exit Sub
  On Error Resume Next
  Sheets(Me.CBlistefournisseurs.Text).Visible = True
  Faute = Err.Number
  On Error GoTo 0
  If Faute > 0 Then
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.(Name) = Me.CBlistefournisseurs '<===================essai
    ActiveSheet.Name = Me.CBlistefournisseurs
  Else
    MsgBox "Feuille existante"
  End If

End Sub

j'ai essayé une 2ème ligne mais ca bug, comment faire pour le nom soit renommée en vba comme sur feuille soit pour l'exemple ci dessus Pointp(Pointp)

si vous comprenez mon explication merci

Bonsoir,

Pointp = Name

Feuil3 = CodeName

C'est Name qui est utilisé pour l'identifier, CodeName n'intervient pas !

Cordialement.

bonsoir MFerrant

merci de ta réponse, ca veux dire que codename est inchangeable

donc il vas falloir que je ruse par ailleurs et je risque de tomber en panne d'idée

le but de ce que j'essai de faire c'est de créer une feuille de commande matériel aux divers fournisseurs qui m'ont fait des offres pour faire mon devis

pour l'instant je créer cette feuille en la renommant au nom du fournisseur qui est sélectionné dans la combobox et dans le même temps, lui injecté une entête au nom de ce fournisseur

après j'injecte les lignes d'articles choisis dans la listbox et correspondant a ce fournisseur, puis j'appui sur transférer et cela vas dans l'onglet qui as été créer et dans le même temps enregistre la feuille sous C: puis supprimer l'onglet dans le classeur

ça as bien fonctionne pour le 1er et le suivant ça as bugger ensuite car le 2 est devenu 3

c'est ce que n'avais pas pensé, comme il n'y a qu'une feuille dans ce classeur, dans ma petite tête j'ai penser que la création-suppression n'incrémenterai pas vba et j'ai eu tord face a la puissante informatique

si tu où quelqu'un as une idée en attendant que je modifie le classeur pour venir le mettre en ligne

edit voici le fichier exemple

merci de ta réponse, ca veux dire que codename est inchangeable

Je n'ai pas dit ça !

J'ai dit que tu ne l'utilisais pas (à ce que tu as montré) et que donc on ne voit pas pourquoi il interviendrait ?

bonjour Mferrand

merci de ta réponse qui m'as fait chercher des réponses sur codename et voici ce que j'ai trouvé mais qui bug

ActiveSheet.Parent.VBProject.VBComponents(ActiveSheet.CodeName).Properties("_CodeName") = "Feuil2"
ActiveSheet.Name = "Feuil2"
    'ActiveSheet.Name = Me.CBlistefournisseurs

en fait le codename restait toujours sur "Feuil2" ca devrai le faire

Bonjour,

A voir et "habiller" :

Private Sub CBnewfeuil_Click()
    With ThisWorkbook
        .Worksheets.Add after:=.Worksheets(.Worksheets.Count)
        ActiveSheet.Name = Me.CBlistefournisseurs
        .VBProject.VBComponents(ActiveSheet.CodeName).Name = "FeuilRef"
    End With
End Sub

Mais je n'ai toujours pas compris où était ton utilisation...

Bonjour Mferrand

merci de ta réponse mais j'ai un bug avec cette ligne , même en ayant changer en Feuil2 la terminaison

.VBProject.VBComponents(ActiveSheet.CodeName).Name = "FeuilRef"
erreur

une fois reçu l'accord du devis comme par exemple dans ce devis il me faut du placos, de l'electricité, qui ne sont pas vendus avec celui de la salle de bains, je voudrais pouvoir sélectionner les lignes correspond a l'électricité et les envoyer dans un bon de commande

et pareil pour le placos et la salle de bains

Là à voir dans tes paramètres de macros (centre de confidentialité) : Accès approuvé au modèle d'objet du projet VBA doit être coché.

Dans la foulée, dans l'éditeur VBA, Menu Outils : Références : cherche Microsoft Visual Basic for Applications Extensibility 5.3, et tu la coches.

Cordialement.

bonjour Mferrand

les paramètres macros et références sont déja activer saus que le paramètres macros s'est décoché, ai je annulé au lieu de valider ??

toujours est'il que maintenant le bug est a l'enregistrement de la feuille avec une erreur 9 ou l'indice n'appartient pas a la sélection

Sub test()

    Dim Chemin As String, Fichier As String
    Chemin = "C:\Facturation\base\doc_fournisseurs\"
    Sheets(2).Copy
    Fichier = Sheets(2).Range("E1") & ".xlsx" '<============a cette ligne 
With ActiveWorkbook
    .SaveAs Filename:=Chemin & Fichier
    .Close
    End With
    'Call Supprimer
    End Sub

mais aussi surement cause du choix dans chemin

bon je reviens ce soir

bonsoir/bonjour a tous et a Mferrand

bon il est tôt le matin mais la veille la soirée a été longue et productive car j'ai finalement réussi a faire ce que je voulais

en partie grâce a toi MFerrant

bonne suite a vous

Rechercher des sujets similaires à "creation onglet renommantavec affichage"