lien entre cellule d'une liste et onglet correspondant + créer onglet avec nom

emwaj

XLDnaute Nouveau
Bonjour

J'ai fait un fichier de terminologies pour mes études de traductologie.
Il contient un onglet pour chaque thème et dans le futur il aura bcp bcp d'onglets (des dizaines)

dans le premier onglet (disons nommé "general") il y a une liste des thèmes.

Je souhaite faire deux choses (qui je pense sont distinctes l'une de l'autre)

Premièrement:
lorsque je clique sur un des thèmes situé dans la colonne A, ça me mène à l'onglet désiré.

J'ai une macro qui fonctionne, bien qu'un peu tordue. Cependant je suis obligé de la recopier pour chaque thème et l'adapter à chaque ligne (A7 , A8, A9, A10 A11 A12, etc) et étant donné que j'ai des dizaines de thèmes, presque 60, je ne vais pas m'amuser à recopier cette macro 60 fois....
Comment puis je la corriger afin qu'elle s'adapte automatiquement à chaque ligne, et que si par exemple je clique sur A87 automatiquement elle comprend que je veux aller vers l'onglet qui est nommé selon le nom inscrit dans la cellule A87?

La voici :

Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$7" Then GOTOSHEET
End Sub

Private Sub GOTOSHEET()
Worksheets(Range("A7").Value).Visible = True
Worksheets(Range("A7").Value).Activate
Worksheets("shaar").Visible = False
End Sub

Deuxièmement:

chaque onglet est nommé d'après une valeur inscrite dans les cellules de la colonne A de l'onglet "general"

En plus des thèmes déjà existants, je voudrais faire qu'à partir par exemple de la cellule A22 vers le bas, à chaque fois que j’écris un nouveau mot dans une cellule à la prochaine ligne, cela crée automatiquement un nouvel onglet selon un onglet modèle existant.
Mais pas seulement le créer: en fait le copier avec les titres du tableau qui est dans le modèle.
et le plus important, faire que ce nouvel onglet créé porte le nom de la valeur qu'on a rentré dans la liste de l'onglet "general" et que la cellule D5 de ce nouvel onglet soit nommée selon cette même valeur.

exemple:
dans la cellule A74 de l'onglet "general", j'écris le mot "médecine", et immédiatement se crée un nouvel onglet, avec dans sa cellule D5 le mot "médecine" et son nom est écrit pareil , cad "médecine".

avec processus inverse, si j'efface dans la colonne A de l'onglet "general" un terme, s'effacera aussi l'onglet du même nom.

Je sais que c'est compliqué mais j'ai cru voir que c'est possible. Je n'ai seulement pas réussis à trouver comment exactement :(

merci d'avance ....
 

emwaj

XLDnaute Nouveau
Re : lien entre cellule d'une liste et onglet correspondant + créer onglet avec nom

Bonsoir!

Merci pour l'explication, maintenant au moins je comprends ce que je fais ;-)

Voici mon fichier, à jour.
Seulement la fonction pour effacer ne fonctionne plus... :(
 

Pièces jointes

  • fichier terminologies.xlsm
    266 KB · Affichages: 55

Grand Chaman Excel

XLDnaute Impliqué
Re : lien entre cellule d'une liste et onglet correspondant + créer onglet avec nom

Bonjour emwaj,

C'est normal car tu as modifié la macro. La variable sNom contenait au départ le nom de l'onglet contenu dans la colonne 1. Cette variable servait ensuite à effacer l'onglet en question. Maintenant, la variable sNom contient également le contenu de la colonne D, des guillemets et des parenthèses. Normal que la macro ne trouve plus le bon onglet pour l'effacer.

J'ai modifié le code ainsi, ça devrait fonctionner (mais je n'ai pas testé).

VB:
Public Sub EffacerOnglet()
    Dim sRep As String, sNom As String, sOngletEfface As String
    sRep = InputBox("Quelle ligne desirez-vous effacer? (Precisez son numero)")
    
    sNom = "«" & Cells(sRep, 4) & "» " & "(" & "en hebreu:" & " " & Cells(sRep, 1) & " )"
    sOngletEfface = Cells(sRep, 1)
    If MsgBox("EÊtes-vous certain de vouloir effacer l'onglet" & " " & sNom & " " & "ainsi que toutes les donnees qu'il contient ?" & vbCrLf & "Dans l'affirmative, toutes ses donnees seront irremediablement perdues.", vbCritical + vbYesNo) = vbYes Then
        'Application.DisplayAlerts = False
        Sheets(sOngletEfface).Visible = True
        Sheets(sOngletEfface).Delete
        HideAll
        Application.EnableEvents = False
        Sheets(sFeuilleMenu).Rows(sRep).EntireRow.Delete
        
       ' Application.DisplayAlerts = True
    End If
        
End Sub

A+
 

emwaj

XLDnaute Nouveau
Re : lien entre cellule d'une liste et onglet correspondant + créer onglet avec nom

merci
j'ai corrigé mais ça me fait cette fois quelque chose de bizarre.
Ça efface effectivement mais après avoir effacer une ligne, je ne peux plus ajouter d'autres lignes, et seulement si je ferme le fichier excel et le ré-ouvre, je peux de nouveau ajouter des onglets..
 

Grand Chaman Excel

XLDnaute Impliqué
Re : lien entre cellule d'une liste et onglet correspondant + créer onglet avec nom

Bonjour,

Tu dois ajouter une ligne dans la macro EffacerOnglets afin de réactiver les événements (comme quand tu modifies une cellule dans la colonne A)

VB:
Public Sub EffacerOnglet()
    Dim sRep As String, sNom As String, sOngletEfface As String
    sRep = InputBox("Quelle ligne desirez-vous effacer? (Precisez son numero)")
    
    sNom = "«" & Cells(sRep, 4) & "» " & "(" & "en hebreu:" & " " & Cells(sRep, 1) & " )"
    sOngletEfface = Cells(sRep, 1)
    If MsgBox("EÊtes-vous certain de vouloir effacer l'onglet" & " " & sNom & " " & "ainsi que toutes les donnees qu'il contient ?" & vbCrLf & "Dans l'affirmative, toutes ses donnees seront irremediablement perdues.", vbCritical + vbYesNo) = vbYes Then
        'Application.DisplayAlerts = False '<<<<< Tu peux effacer cette ligne
       Sheets(sOngletEfface).Visible = True
        Sheets(sOngletEfface).Delete
        HideAll
        Application.EnableEvents = False
        Sheets(sFeuilleMenu).Rows(sRep).EntireRow.Delete
        Application.EnableEvents = True '<<<<<<< Ajouter cette ligne
       ' Application.DisplayAlerts = True '<<<<< Tu peux effacer cette ligne
   End If
        
End Sub

A tester...
 

Discussions similaires

Statistiques des forums

Discussions
311 729
Messages
2 081 970
Membres
101 852
dernier inscrit
dthi16088