Comment Reccuperer le nom de la feuille cree par VBA.

lele79

XLDnaute Nouveau
Bonjour le forum,

je vous sollicite encore une fois afin de permettre d'avancer.

Je tranfere des donnee entre deux classeurs.
- Le premier Classeur est rempli le deuxieme vide, jusque la, ca va!
- je m'appele mon code pour transferer la premieres feuille du Classeur1 a premiere feuille du classeur2 mais avant je creer la feuille sur le classeur 2 et la nomme, en faisant appelle a un inputbox, jusque la ca marche encore
- et la je bloque, car je voudrai reccuperer le nom de la feuille nouvellement creee pour identifier la destination lors du trasfere des donnees.

Voici le code pour la creation de la feuille:

Code:
Sub CreateNewWorksheet()

     Dim Sheet As Worksheet, check As Variant

    Workbooks("SMT_TEMPLATEref").Activate
    On Error GoTo errHandler

  'creating a new excel worksheet
      nom = InputBox("Nommer votre feuille")
      Set Sheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))

     With Sheet
         .Name = nom
     End With
     Exit Sub

errHandler:

    'if error due to duplicate worksheet detected

     If Err.Number = 1004 Then
         'display an options to user
         check = MsgBox("Worksheet called " & nom & " is already exist, " & "click yes to continue creating new Worksheet and delete the old one, " & "or click no to go to the old worksheet.", vbOKCancel, "Duplicate Worksheet")
        If check = vbOK Then
            'delete the old worksheet
             Application.DisplayAlerts = False
             Worksheets(nom).Delete
             Application.DisplayAlerts = True
             'rename and activate the new worksheet
            With Sheet
                .Name = nom
            End With
         Else
             'cancel the operation, delete the new worksheet
             Application.DisplayAlerts = False
             Sheet.Delete
             Application.DisplayAlerts = True
            'activate the old worksheet
             Worksheets(nom).Activate
         End If
  End If
 End Sub


voici l'entete de mon code faisant appelle a la Macro ci-dessus:

Code:
Sub Transfer_AIS_AIC_BDM()

    Dim Nam As String, Des As String
    Dim Max As Long, Min As Long, una As String
    Dim Uni As String, Pro As String, Typ As String, namlg As String
    On Error GoTo erromsg
    
    'si Classeur 1, feuille 1 est active alors
    If ActiveSheet.Name = "AIS_AIC_BDM" Then
        Set w1 = ActiveSheet
         Call Module1.CreateNewWorksheet
         'Identification du classeur 2 avec le nom de la feuille creee juste avant
        Set w2 = .......?
   End If
    lastLine = w1.Cells(65532, 16).End(xlUp).Row

et je boque sur cette ligne:
Code:
Set w2 = .......?

j'espere que je me suis bien esprimer sur ma requete sinon n'hesitez pas de me soliciter pour plus d'info.

en vous remerciant par avance,


lele79.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Comment Reccuperer le nom de la feuille cree par VBA.

Bonjour le fil, bonjour le forum,

Juste une remarque. Je trouve étrange voire même dangereux de donner comme nom à une variable un mot clé de Visual Basic. Je suis même surpris que ce soit accepté !

Code:
Dim Sheet As Worksheet

Dim sh as Worksheet (par exemple) me semblerait plus judicieux...
 

Lermiton

XLDnaute Nouveau
Re : Comment Reccuperer le nom de la feuille cree par VBA.

Bonjour le forum

Je ne saisis pas très bien ce que tu veux faire, lele79.

S'il s'agit de copier dans un "classeur 2" vierge une feuille du "classeur 1" et de renommer dans le "classeur 2" la feuille copiée, il est inutile de créer la "feuille destination" dans "le classeur 2" avant d'effectuer la copie, et il suffit de renommer la feuille active avec "ActiveSheet.Name = "

S'il s'agit de copier des données et non pas la totalité de la feuille, il faut d'abord créer la "feuille destination" et la nommer comme ci-dessus.

Je reprends la remarque de Robert : il est en effet dangereux d'utiliser comme nom de variable des mots clef du VBA. Évite donc les noms de variable comme "Sheet", "Max", "Min". Et, pour vérifier que le nom de variable choisi n'est pas un mot clef du VBA, il suffit de le saisir d'abord en minuscule : si "max" devient "Max" après un saut à la ligne suivante, c'est qu'il s'agit d'un mot clef.

Enfin, le fait de demander la saisie du nom de feuille sans contrôler ce qui a été saisi provoquera une erreur si l'utilisateur ne saisit aucun nom ou s'il saisit des caractères invalides pour un nom de feuille, ou un nom trop long. Il faut donc contrôler ce qui a été saisi. Un code comme celui-ci pourrait convenir :
Code:
Sub Saisir_Nom_de_Feuille()
    Dim Nom As String
    Dim Msg As String
    
reprise:
    Nom = InputBox("Saisissez un nom pour la feuille copiée", "COPIE DE FEUILLE")
    Msg = Validation(Nom)
    If Msg <> "" Then
        If MsgBox(Msg, 53, "ATTENTION") = vbCancel Then
            Exit Sub
        Else
            GoTo reprise
        End If
    End If
    
End Sub

Function Validation(Chaine As String) As String
    Dim i As Integer

    If Len(Chaine) = 0 Then
        Validation = "Vous n'avez pas saisi de nom de feuille !"
    ElseIf Len(Chaine) > 31 Then
        Validation = "Un nom de feuille ne doit pas dépasser 31 caractères !"
    Else
        For i = 1 To Len(Chaine)
            Select Case Mid(Chaine, i, 1)
                Case ":", "/", "\", "?", "*", "[", "]"
                    Validation = "Les caractère "":"" ""\"" ""/"" ""?"" ""*"" ""["" ""]"" sont interdits pour un nom de feuille !"
                    Exit For
            End Select
        Next
    End If
    
End Function

Bonne journée.
 

lele79

XLDnaute Nouveau
Re : Comment Reccuperer le nom de la feuille cree par VBA.

Bonjour a tous, le forum,

je m'excuse pour ma reponse tardive!


Pierrot93, merci ! franchement j'étais vraiment allé loin, mais vraiment tres loin....;)
Set w2 = ActiveSheet

Ceci marche a merveille!

Robert et Lermiton, merci pour vos conseils sur les mots clés de VB. J'ai changé sur vos conseils les noms des variables que j'utilisais (Max, Min, Sheet).

Lermiton:

S'il s'agit de copier des données et non pas la totalité de la feuille, il faut d'abord créer la "feuille destination" et la nommer comme ci-dessus.

Oui, c'est ca que je veux faire, sinon merci pour ton code!, je test ton je te reviens la dessus.

Mais en tout cas ca marche, la proposition de pierrot93.

PLus, j'avance dans ce projet et je me pose des question comme, dernierement comment selectionné la derniere feuille, maintenant, je me dis comment, ne pas se basé sur le nom du classeur car sur mon code de creation de nouvelle feuille, je fais appelle a ce classeur en rouge (Classeur 2):

Code:
Sub CreateNewWorksheet()

     Dim Sheet As Worksheet, check As Variant

    [COLOR="red"]Workbooks("SMT_TEMPLATEref").Activate[/COLOR]
    On Error GoTo errHandler

Mon classeur 1 etant un Template tandis que l'autre est crée a chaque fois que je veux faire un transfert donc le nom de ce classeur change. Ainsi, ma question est, comment puis-je m'en passé du nom de ce deuxieme classeur?. Deja es-ce possible de faire ca sur VB?

voila, en vous remerciant,

Cordialement,

lele79
 

Discussions similaires

Réponses
5
Affichages
190

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote