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 :

Macro acceptation d'écrasement des données par TCD


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2021
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2021
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Macro acceptation d'écrasement des données par TCD
    Bonjour,

    Je joins un classeur de gestion de projet. C'est dans le dernier onglet "Mail actualisation" que se situe mon interrogation et mon problème : https://mon-partage.fr/f/8kOdZEQJ/

    Cette feuille est destinée à être envoyée par mail via macro intégrée. Il y a un tableau croisé dynamique avec des segments pour le filtrage (ici des prénoms). Sous le TCD, un message finalisant le mail avec une signature.


    Quand je défiltre le TCD via le segment , j'ai le message attendu "Voulez-vous remplacer le contenu des cellules existantes?" avec le choix "OK" ou "Annuler". Normal car il existe des données sous ce TCD. Si on clique sur "OK", une autre macro ('Adapte le texte sous le TCD à la hauteur du TCD) permet de ne pas écraser le contenu situé initialement sous le TCD.

    Or, sachant que le classeur et la feuille Excel correspondants sont destinés à d'autres utilisateurs , je souhaiterais qu'une macro valide automatiquement "OK" et donc que ce message n'apparaisse pas.

    Je pensais qu'en intégrant dans la macro ci-dessus l'expression : Application.DisplayAlerts = False, ce message disparaitrait mais...non.

    Par contre en gardant cette expression, en défiltrant le TCD via les boutons de filtre situés sur le TCD, je n'ai plus aucun message, cela fonctionne.

    Du coup, la solution doit peut être résider dans une instruction du même genre mais qui concernerait également un filtrage via segment.

    Merci beaucoup pour votre aide

    Romanza

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par romanza Voir le message

    Bonjour,

    Il faut simplement masquer ou faire apparaître les lignes entre le TCD et la cellule "Date de retour souhaitée...". Dans le code ci-dessous, cette cellule correspond à la zone nommée "ZoneDateDeRetour". Pour que cela fonctionne correctement, il vous faut 2 lignes a minima entre le bas du TCD non filtré et cette ligne.
    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
     
    'Adapte le texte sous le TCD à la hauteur du TCD
    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    '
    Dim LigneDateRetour As Long
    Dim d&, t&
     
        LigneDateRetour = Range("ZoneDateDeRetour").Row
        Rows("1:" & LigneDateRetour).Hidden = False
        t = Target.TableRange2.Row + Target.TableRange2.Rows.Count - 1
        Rows(t + 1 & ":" & LigneDateRetour - 2).Hidden = True
       ' Selection.EntireRow.Hidden = True
     
        Debug.Print t
     
    'Const p$ = "Bien cordialement"
    'Const f$ = "=CONCATENATE(""Date de retour souhaitée le "")&TEXT(WORKDAY(Rétroplanning!C8,J2,'JoursFériés et mails'!B9:B17),""jj mmmm aaaa"")"
    '  Application.DisplayAlerts = False
     
    '    d = Cells(Rows.Count, "B").End(xlUp).Row
    '    Do While d > t
    '        Cells(d, "B").Clear
    '        d = Cells(Rows.Count, "B").End(xlUp).Row
    '    Loop
    '    With Cells(t + 2, "B")
    '        .Formula = f
    '        .Font.Bold = True
    '        .Font.Underline = True
    '    End With
    '    Cells(t + 4, "B").Value = p
    '    With Shapes("Signature")
    '      .Top = Cells(t + 7, "B").Top
    '      .Left = Cells(t + 7, "B").Left
    '
    '
    '    End With
     
    End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2021
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2021
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Bonjour Eric et merci beaucoup pour votre retour.
    Voilà le code que j'ai donc recopié. j'ai laissé 3 lignes entre le bas du TCD défiltré et la cellule "Date de retour....". Cela bug sur la ligne "LigneDateRetour = Range("ZoneDateDeRetour").Row"


    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
    'Adapte le texte sous le TCD à la hauteur du TCD
    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    '
    Dim LigneDateRetour As Long
    Dim d&, t&
     
        LigneDateRetour = Range("ZoneDateDeRetour").Row
        Rows("1:" & LigneDateRetour).Hidden = False
        t = Target.TableRange2.Row + Target.TableRange2.Rows.Count - 1
        Rows(t + 1 & ":" & LigneDateRetour - 2).Hidden = True
     
    Selection.EntireRow.Hidden = True
     
        Debug.Print t
     
    Const p$ = "Bien cordialement"
    Const f$ = "=CONCATENATE(""Date de retour souhaitée le "")&TEXT(WORKDAY(Rétroplanning!C8,J2,'JoursFériés et mails'!B9:B17),""jj mmmm aaaa"")"
      Application.DisplayAlerts = False
        t = Target.TableRange2.Row + Target.TableRange2.Rows.Count - 1
        d = Cells(Rows.Count, "B").End(xlUp).Row
        Do While d > t
            Cells(d, "B").Clear
            d = Cells(Rows.Count, "B").End(xlUp).Row
        Loop
        With Cells(t + 2, "B")
            .Formula = f
            .Font.Bold = True
            .Font.Underline = True
        End With
        Cells(t + 4, "B").Value = p
        With Shapes("Signature")
          .Top = Cells(t + 7, "B").Top
          .Left = Cells(t + 7, "B").Left
     
     
        End With

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par romanza Voir le message
    Il faut créer la zone nommée :
    Pièce jointe 596227

    Sinon, vous avez juste un copier coller ma macro sur la vôtre, vous n'avez pas supprimé le reste du code qui ne sert plus à rien.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2021
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2021
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Je vous transmets le fichier avec la macro corrigée : https://mon-partage.fr/f/IfZOR1uN/

    J'ai bien affecté le nom ZoneDateDeRetour à la cellule. Au filtrage/défiltrage, il ne reste plus que la signature

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par romanza Voir le message
    Quel est le problème ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2021
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2021
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Quand je filtre un prénom sur le segment les expressions "Date de retour souhaitée le...." et "Bien cordialement" disparaissent

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par romanza Voir le message
    Quand je filtre un prénom sur le segment les expressions "Date de retour souhaitée le...." et "Bien cordialement" disparaissent
    Avec le fichier qui m'a servi à vous répondre, je n'ai pas de problème.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2021
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2021
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    C'est OK Eric,

    En fait, je n'avais pas neutralisé la partie de mon code initial qui ne sert plus.

    Un GRAND MERCI, franchement.

    Romanza

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

Discussions similaires

  1. [XL-2010] Ajout ou suppression d'un élément dans une liste de validation des données par macro
    Par modus57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2020, 13h14
  2. Mise à jour des données par macros.
    Par chpierro62 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 12/01/2012, 13h52
  3. [Tableaux] Affichage des données par lot
    Par randriarabe dans le forum Langage
    Réponses: 1
    Dernier message: 07/12/2005, 08h23
  4. Récupérer des données par LDAP
    Par wil4linux dans le forum ASP
    Réponses: 3
    Dernier message: 14/09/2005, 12h11
  5. envoyer des données par l'intermédiaire d'un bouton
    Par mathilde50 dans le forum Access
    Réponses: 26
    Dernier message: 28/10/2004, 16h49

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