Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Insérer on glet par macro

  • Initiateur de la discussion Initiateur de la discussion CLAUDEF
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

C

CLAUDEF

Guest
Bonjour le forum,

J'aimerais dans le fichier joint, créer un nouvel onglet du formulaire "AUTORISATION" aprés l'avoir renseigné et que ce nouvel onglet porte le nom inscrit dans la cellule grisée "NOM & PRENOM" et répeter cette macro à chaque changement de nom.
Je ne sais si c'est possible
D'avance je vous remercie pour votre aide
 

Pièces jointes

Re : Insérer on glet par macro

Bonjour,
Tu ajoutes les lignes ci dessous dans la macro de la feuille autorisation juste apres les declarations (dim):
Dim derfeuil As Integer
derfeuil = Sheets.Count
If Sheets(derfeuil).Name <> Range("d9").Value Then
Sheets("AUTORISATION").Select
Sheets("AUTORISATION").Copy After:=Sheets(derfeuil)
Sheets("AUTORISATION (2)").Select
Sheets("AUTORISATION (2)").Name = Range("d9").Value
End If
Sheets(derfeuil).Activate

Mais attention! tu ne peux avoir 2 feuilles ayant le même nom...

A+ François
 
Re : Insérer on glet par macro

Merci beaucoup, c'est vraiment sympa et ça fonctionne trés bien, c'est exactement ce que je souhaitais, mais le problème c'est que je l'utilise sur un autre fichier, plus lourd que je ne peux joindre et il m'affiche que "une formule ou une feuille que je veux déplacer contient déja le nom "AAAAA"" donc j'ai une embrouille à quelque part qui perturbe la macro.

Oui mais voila, je ne trouve pas... C'est dommage parceque mon fichier est maintenant terminé, il n'y a que ce bug
 
Re : Insérer on glet par macro

Bonjour CLAUDEF, fanfan38

Teste ceci si je comprends bien ton problème:

Avant la copie de la feuille, un test vérifie si cette dernière existe déjà.
Si Non : la feuille est copiée.
Si Oui : un message t'alerte et la copie ne se fait pas.

Il faut rajouté dans un module de code standard la fonction de test de myDearFriend! (excellente petite fonction d'ailleurs)
Code:
Function FeuilExist(Nom As String) As Boolean
'myDearFriend!
    On Error Resume Next
    FeuilExist = Not Sheets(Nom) Is Nothing
End Function

Puis modifié le code de ta feuille AUTORISATION comme ceci :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lgDerCol As Long
    Dim lgCol As Long
    Dim lgDerLig As Long
    Dim lgLig As Long
    Dim lgLigC As Long
       
    If Not Intersect(Target, Range("D9")) Is Nothing And Target.Count = 1 Then
        ' Effacer le contenu des lignes 14 à 28
        Range("C14:F28").ClearContents
        
        lgLigC = 14
        
        With Worksheets("Ambazac")
            ' Rechercher la colonne du nom dans la feuille Ambazac
            lgDerCol = .Cells(2, .Cells.Columns.Count).End(xlToLeft).Column
            For lgCol = 7 To lgDerCol
                ' Le nom est trouvé
                If .Cells(2, lgCol).Value = Range("D9").Value Then
                    ' Rechercher les lignes ayant un X dans la colonne du nom
                    lgDerLig = .Range("A" & .Cells.Rows.Count).End(xlUp).Row
                    For lgLig = 3 To lgDerLig
                        ' La ligne comporte un X dans la colonne
                        If .Cells(lgLig, lgCol) = "X" Then
                            Range("C" & lgLigC).Value = .Range("A" & lgLig).Value
                            lgLigC = lgLigC + 1
                        End If
                    Next lgLig
                End If
            Next lgCol
        End With
            'Teste si la feuille rajoutée existe déjà
            If FeuilExist(Range("d9").Value) = False Then
               Sheets("AUTORISATION").Copy After:=Sheets(Sheets.Count)
               ActiveSheet.Name = Range("d9").Value
               Sheets("AUTORISATION").Activate
               Exit Sub
            Else
               MsgBox "la Feuille " & Range("d9").Value & " existe déjà" & vbCrLf & "Changer le Nom SVP", , "Attention :"
            End If
    End If
           
End Sub

Bon dimanche
 
Re : Insérer on glet par macro

Re,

Une petite modif.
Quand tu crées la nouvelle feuille, tu copies aussi le code VBA de la feuille AUTORISATION dans cette dernière. Ce n'est peut-être pas utile pour la suite de ton programme.
Si cest le cas, modifie la fin du code comme ceci pour supprimer le code de la nouvelle feuille:

Code:
'.../...
If FeuilExist(Range("d9").Value) = False Then
               Sheets("AUTORISATION").Copy After:=Sheets(Sheets.Count)
               ActiveSheet.Name = Range("d9").Value
                   With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
                     .DeleteLines 1, .CountOfLines
                   End With
               Sheets("AUTORISATION").Activate
               Exit Sub
            Else
'.../...

Pour que cela fonctionne, dans VBA, menu Outils/Références déroule la liste jusqu'à :

Microsoft Visual Basic for Applications Extensibility 5.3

et coche la case devant

A+
 
Re : Insérer on glet par macro

Bonjour fanfan38 et merci de m'accorder tout ce temps,
Cela marche parfaitement, la feuille se copie, je retourne sur ma feuille initiale, ce qui est une bonne chose.
J'ai toujours mon message "Une formule ou une feuille que vous voulez déplacer contient le nom "AAA" qui existe déjà sur la feuille destination. Voulez vous utiliser cette version du Nom", en validant par OUI tout se déroule normalement et c'est l'essentiel.
Encore une autre chose si tu peux me renseigner:
Est il possible lorsque la feuille se copie que dans le nom de l'onglet on puisse rajouter 3 lettres, exemple:
"AAAA aut" au lieu de "AAAA" ceci pour repérer les feuilles copiées pour les AUTORISATIONS.
Je te remercie pour ton aide et te souhaite une bonne journée
Claude
 
Re : Insérer on glet par macro

Bonjour Claude,


Sur ton fichier je n'ai pas cette erreur !!

Place toi sur la feuille AUTORISATION, puis menu Insertion/Nom/Définir tu trouveras AAAA dans la liste, et dans la zone de référence =NOM.
=NON ne correspond à rien, le problème vient peut-être de là ??

Pour le nom de la feuille:
Code:
ActiveSheet.Name = Range("d9").Value & " aut"
(Il y a un espace entre " et aut)

A+
 
Re : Insérer on glet par macro

Bonjour,
Pour le nom, j'avoue ne pas avoir cherché beaucoup en effet, c'est aussi simple.
Pour la deuxiéme solution je te remercie, j'avais trouvé la solution avec Concayener à côté des noms mais il faut bien dire que c'était du bricolage.
Je pense maintenant que mon fichier est pratiquement terminé. Je te remercie pour ton aide et ta réactivité, je te souhaite de bonnes fêtes de fin d'année.
Surement à un de ces jours sur le forum
Cordialement

Claude
 
Re : Insérer on glet par macro

Autant pour moi, un petit problème demeure, en effet lorsque je saisie deux même noms "XXXX aut" au lieu d'avoir le message d'erreur demandant de modifier la saisie, j'ai une erreur de code sur la ligne "ActiveSheet.Name = Range("d9").Value & " aut" je ne trouve pas la solution.
 
Re : Insérer on glet par macro

Re,

C'est normal, j'aurai dû y penser.....
Il faut rajouter " aut" au nom sélectionner en D9 pour faire le test.
Donc modifie comme ceci:

Code:
 If FeuilExist(Range("d9").Value & " aut") = False Then
               Sheets("AUTORISATION").Copy After:=Sheets(Sheets.Count)
               ActiveSheet.Name = Range("d9").Value & " aut"
                   With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
                     .DeleteLines 1, .CountOfLines
                   End With
               Sheets("AUTORISATION").Activate
               Exit Sub
            Else
               MsgBox "la Feuille """ & Range("d9").Value & " aut" & """ existe déjà" & vbCrLf & "Changer le Nom SVP", , "Attention :"
               Exit Sub
            End If
    End If

J'ai aussi modifié le message d'alerte pour tenir compte de " aut"
 
Re : Insérer on glet par macro

J'ai maintenant un autre bug sur la ligne "Sheets("HABILITATION").Copy After:=Sheets(Sheets.Count)" et "Sheets("AUTORISATION").Copy After:=Sheets(Sheets.Count)" plus rien ne fonctionne
 
Re : Insérer on glet par macro

Je ne sais si je me fais bien comprendre, je voudrais pour une même personnes dont soit "E10" (Habilitation) ou "D9" (Autorisation) la possibilité de céer deux feuilles l'une "Nom aut" et l'autre "Nom" ça ne doit pas être simple a comprendre surement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
20
Affichages
1 K
L
Réponses
1
Affichages
1 K
L
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…