Bonjour,
J'ai un souci !
Dans un fichier, se trouve un onglet "noms"
Dans cet onglet il y a une liste de noms. je désire qu'en cliquant sur un nom un onglet soit créé avec ce-dit nom.
Est-ce possible ?
Merci aux experts de ce forum !
A+
Bonjour,
J'ai un souci !
Dans un fichier, se trouve un onglet "noms"
Dans cet onglet il y a une liste de noms. je désire qu'en cliquant sur un nom un onglet soit créé avec ce-dit nom.
Est-ce possible ?
Merci aux experts de ce forum !
A+
Bonjour,
ceci est un evenement dans le code de la feuille :je désire qu'en cliquant sur un nom un onglet
Code : Sélectionner tout - Visualiser dans une fenêtre à part Worksheet_BeforeDoubleClick
un exemple pour selectionner si les noms se trouvent dans la colonne 1 :
il ne reste plus q'au créer la fonction de création d'onglet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim Isect As Range On Error GoTo geserr Application.DisplayAlerts = False Set Isect = Intersect(Range("A:A"), Target) If Not Isect Is Nothing Then If Target.Cells.Count = 1 Then If Target.Value > " " Then Call CreationOnglet(Target.Value) End If End If End If geserr: Application.DisplayAlerts = True If Err.Number > 0 Then Debug.Print Err.Number & " : " & Err.Description & vbCrLf & nom_diag End If End Sub
Une question pour cette fonction, que faire si l'onglet existe déja ?
supprimer et recréer / Ne rien Faire / incrémenter sur le nom ?
bonjour à tous,
En attendant une réponse, un exemple avec une fonction perso a placer dans un module standard (supprime systématiquement un onglet qui porterait le même nom) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 Function CreationOnglet(ByVal MySheet As String, Optional Mydel As Boolean, Optional Mypresence) As Boolean ' ----------------------------------------------------------------------------------' ' Ajout d'une feuille en fin de classeur ' ----------------------------------------------------------------------------------' ' En entree : ' MySheet : Nom de la nouvelle feuille ' MyDel : True pour suppression si existe déja ' MyPresence : Test seulement la presence ' ----------------------------------------------------------------------------------' Dim F1 As Worksheet ' ------------------------------- ' ' Existence de l'onglet ' ------------------------------- ' For Each F1 In Sheets If F1.Name = MySheet Then If Mydel Then F1.Delete Exit For End If If Mypresence = True Then Add_sheet = True Exit Function End If MsgBox "La feuille " & F1.Name & " existe déja", vbInformation, "Classeur " & F1.Parent.Name Exit Function End If Next ' ------------------------------- ' ' Ajout de l'onglet ' ------------------------------- ' Set F1 = Sheets.Add(After:=Sheets(Sheets.Count)) F1.Name = MySheet Add_sheet = True End Function
Merci aalex_38 pour ta réponse.
Concernant un onglet existant, non pas d'onglets du même nom.
A+
Re,
Qu'est-ce que ça veut dire, dans l'exemple donné un onglet est créer si on clique sur le nom, si l'onglet existe dèja, on l'efface.Concernant un onglet existant, non pas d'onglets du même nom.
On clique sur un nom, l'onglet n'existe pas => on le crée OK
On clique sur un nom, l'onglet existe déja Pour moi, il y a au moins 3 possibilités :
- On ne fait rien (et eventuellement on affiche un message pour prévenir).
- On écrase l'ancien onglet et on crée le nouveau (ce que fait l'exemple actuel ).
- On donne un nouveau nom (par exemple le nom + un chiffre).
Excuses moi pour la confusion !
La première solution me paraît idéale.
"On ne fait rien (et eventuellement on affiche un message pour prévenir)"
A+
Dans ce cas là [testé], dans la feuille :
Dans un module standard :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim Isect As Range On Error GoTo geserr Application.DisplayAlerts = False Set Isect = Intersect(Range("A:A"), Target) If Not Isect Is Nothing Then If Target.Cells.Count = 1 Then If Target.Value > " " Then Call CreationOnglet(Target.Value, False, False) End If End If End If geserr: Application.DisplayAlerts = True If Err.Number > 0 Then Debug.Print Err.Number & " : " & Err.Description & vbCrLf & nom_diag End If End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 Function CreationOnglet(ByVal MySheet As String, Optional Mydel As Boolean, Optional Mypresence) As Boolean ' ----------------------------------------------------------------------------------' ' Ajout d'une feuille en fin de classeur ' ----------------------------------------------------------------------------------' ' En entree : ' MySheet : Nom de la nouvelle feuille ' MyDel : True pour suppression si existe déja ' MyPresence : true Test seulement la presence ' ----------------------------------------------------------------------------------' Dim F1 As Worksheet ' ------------------------------- ' ' Existence de l'onglet ' ------------------------------- ' For Each F1 In Sheets If F1.Name = MySheet Then If Mydel Then F1.Delete Exit For End If If Mypresence = True Then Add_sheet = True Exit Function End If MsgBox "La feuille " & F1.Name & " existe déja", vbInformation, "Classeur " & F1.Parent.Name Exit Function End If Next ' ------------------------------- ' ' Ajout de l'onglet ' ------------------------------- ' Set F1 = Sheets.Add(After:=Sheets(Sheets.Count)) F1.Name = MySheet Add_sheet = True End Function
Partager