IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

click sur une cellule et création onglet [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de etorria
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 107
    Par défaut click sur une cellule et création onglet
    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+

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    je désire qu'en cliquant sur un nom un onglet
    ceci est un evenement dans le code de la feuille :

    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 :

    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
    il ne reste plus q'au créer la fonction de création d'onglet.

    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 ?

  3. #3
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    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

  4. #4
    Membre confirmé Avatar de etorria
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 107
    Par défaut
    Merci aalex_38 pour ta réponse.
    Concernant un onglet existant, non pas d'onglets du même nom.

    A+

  5. #5
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Re,


    Concernant un onglet existant, non pas d'onglets du même nom.
    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.

    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).

  6. #6
    Membre confirmé Avatar de etorria
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 107
    Par défaut
    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+

  7. #7
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Dans ce cas là [testé], dans la feuille :

    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
    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
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/09/2009, 02h08
  2. Réponses: 1
    Dernier message: 21/07/2009, 22h18
  3. Evenement de click sur une cellule de JTable
    Par mitnick2006 dans le forum Composants
    Réponses: 3
    Dernier message: 10/08/2008, 17h34
  4. click sur une cellule
    Par jazziestan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/12/2006, 17h13
  5. [VBA-E] Double-Click sur une cellule
    Par boosty dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2006, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo