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+
Version imprimable
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 :Citation:
je désire qu'en cliquant sur un nom un onglet
Code: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:
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:
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.Citation:
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:
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:
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