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

Excel Discussion :

Tableau structuré avec macros


Sujet :

Excel

  1. #1
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 722
    Points : 184
    Points
    184
    Par défaut Tableau structuré avec macros
    Bonjour,

    Je me suis enfin mis à utiliser les tableaux structurés

    Ça change pas mal les macros, mais c'est beaucoup plus souple lors du déplacement ou de l'insertion de colonnes par exemple.

    Comment coder pour que cette macro fonctionne ?

    TS = Tableau_Suivi
    Colonne = Commandes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        If Not Intersect(Target, Range("Tableau_Suivi,[Commandes]]")) Is Nothing And Target.Count = 1 Then
            MsgBox "Hello"
        End If
    Je vous remercie
    Meilleures salutations
    Philippe

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour Philippe,

    Voici un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Not Intersect(Target, Range("t_Personnel").ListObject.ListColumns("Service").DataBodyRange) Is Nothing And Target.Count = 1 Then
        MsgBox "Hello"
      End If
    End Sub
    Exemple avec la référence structurée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Not Intersect(Target, Range("t_Personnel[Service]")) Is Nothing And Target.Count = 1 Then
        MsgBox "Hello"
      End If
    End Sub
    Pour en savoir plus, je vous conseille la lecture de ce tutoriel Excel: Les tables de données en VBA
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 722
    Points : 184
    Points
    184
    Par défaut
    Super et merci, je vais tester et lire le tuto

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour Philippe,
    Attention, je rectifie car j'ai effectué mes tests un peu rapidement.

    Il est préférable d'utiliser la procédure événementielle Worksheet_SelectionChange car une erreur est déclenchée avec l'autre procédure si la sélection d'une cellule à lieu sur une feuille où la table n'est pas présente.
    Il est possible évidemment d'utiliser l'autre procédure événementielle mais je n'ai pas le temps d'effectuer les tests

    J'ai rectifié le code dans ma réponse précédente
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 722
    Points : 184
    Points
    184
    Par défaut
    Hello,

    Chez moi ça fonctionne nickel

    Encore merci et bon weekend


    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
    Option Explicit
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim DateFormats, DF 'Afficher le calendrier selon le format de la cellule
    Application.ScreenUpdating = False
        DateFormats = Array("ddd dd mm yyyy") 'format à reproduire dans la cellule pour activer le calendrier par ex: jjj jj mm aaaa
        For Each DF In DateFormats
            If DF = Target.NumberFormat Then
                USF_Calendar_Activecell.Show
                Cancel = True 'Empêche l'édition de la cellule active (F2) lors de Worksheet_BeforeDoubleClick Cancel = True permet de resortir du mode édition
            End If
        Next
      If Not Intersect(Target, Range("Tableau_Suivi[Commande]")) Is Nothing And Target.Count = 1 Then
        If ActiveCell <> "" Then
            Dossier.Ouvrir_Dossier
        End If
        Cancel = True 'Empêche l'édition de la cellule active (F2) lors de Worksheet_BeforeDoubleClick Cancel = True permet de resortir du mode édition
      End If
    Application.ScreenUpdating = True
    End Sub

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Chez moi ça fonctionne nickel
    Oui, c'est normal puisque l'événement se déroule dans la feuille où se trouve le tableau structuré. Je n'avais pas repris cette procédure parce-qu'elle ne figurait pas dans le code publié.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 722
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    Comment utiliser les noms des entêtes de colonnes dans la macro ci-dessous ?

    Je vous remercie
    Meilleures salutations
    Philippe

    Remplacer la colonne 12 par ("Tableau_Suivi[Commande]"))

    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
    Option Explicit
    Sub Test()
    Dim f As Variant
    Dim Message As Variant
    Dim LigneActive As String
    Set f = ActiveSheet
        LigneActive = ActiveCell.Row
            Message = _
                f.Cells(LigneActive, 12) & " - " & _
                f.Cells(LigneActive, 13) & " " & _
                f.Cells(LigneActive, 14) & " " & _
                f.Cells(LigneActive, 15) & vbLf & vbLf & _
                f.Cells(LigneActive, 16) & " - " & _
                f.Cells(LigneActive, 17) & " - " & _
                f.Cells(LigneActive, 18) & vbLf & vbLf & _
                f.Cells(LigneActive, 19) & " - " & _
                f.Cells(LigneActive, 20) & " " & _
                f.Cells(LigneActive, 21) & vbLf & vbLf & vbLf & _
                "Cette intervention doit être reportée sur la feuille : Suivi de pose dans le dossier de pose"
     MsgBox Message
    End Sub

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avez-vous consulté le tutoriel que je vous ai suggéré de lire.Tout y est expliqué
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 722
    Points : 184
    Points
    184
    Par défaut
    Oui j'ai tout lu, mais je n'ai pas trouvé comment adapter ma macro, je suis un débutant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f.Cells(LigneActive, Range("Tableau_Suivi[Commande]")))

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Que voulez-vous faire exactement ?
    D'après le code que je lis, vous écrivez dans certaines colonnes des caractères espacés et dans d'autres des retours à la ligne, j'avoue ne pas en comprendre la raison. Quelle est la finalité ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 722
    Points : 184
    Points
    184
    Par défaut
    Merci

    J'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f.Cells(LigneActive, Range("Tableau_Suivi" & "[Commande]").Column)

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce que j'ai écrit dans ma réponse (#Fil 2) était me semble t'il la même syntaxe, par rapport à la référence structurée, non ?

    Copie ci-dessous
    Exemple avec la référence structurée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Not Intersect(Target, Range("t_Personnel[Service]")) Is Nothing And Target.Count = 1 Then
        MsgBox "Hello"
      End If
    End Sub
    Attention d'éviter du coup l'usage de ActiveSheet au risque d'avoir une erreur si la feuille active n'est pas la feuille où se trouve le tableau structuré
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Réponses: 11
    Dernier message: 29/09/2020, 13h45
  2. [XL-2007] Verrouillage / déverrouillage feuille et structure avec macro
    Par Nonomix10 dans le forum Excel
    Réponses: 12
    Dernier message: 03/05/2020, 16h55
  3. Déclaration et implémentation tableau structuré avec mail outlook
    Par C'estPasMoi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/05/2014, 12h47
  4. [XL-2007] Filtrage multiple d'un tableau excel avec macro
    Par robby98800 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2012, 10h39
  5. [XL-2003] Reordonner un tableau excel avec macro
    Par mouncefdi dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 26/07/2010, 17h25

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