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 :

Problème VBA passer formules en valeur lignes masquées (filtrées)


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    BA
    Inscrit en
    Août 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : BA
    Secteur : Santé

    Informations forums :
    Inscription : Août 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème VBA passer formules en valeur lignes masquées (filtrées)
    Bonjour à tous,

    Je me retrouve face à un soucis d’apparence assez simple que je n'arrive pas à gérer.
    Pour automatiser un reporting, j'utilise une macro me permettant de passer toutes mes formules en valeur, cela marche très bien sauf que cette fois ci cela ne marche pas quand j'ai des lignes filtrées (certaines lignes sont donc masquées).

    Lorsque je lance mon code, les formules sont bien passées en valeur mais la macro m'ajoute plein de données de façon "aléatoire" sur mes feuilles où il y a des lignes masquées, où plutôt filtrées, j'avoue ne pas comprendre pourquoi. Il n'y a pas de problème lorsque la plage n'est pas filtrée.

    Voici mon code

    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
    Dim Sh As Worksheet
     
    For Each Sh In Sheets 'partie remplacement des forumles par leur valeur
     
    Sh.Activate
     
    If Sh.Visible = True Then 'si la feuille est visible alors on applique le remplacement (evite de buguer la macro avec les tcd cachés)
     
    With ActiveSheet.UsedRange
        .Value = .Value
        End With
     
    Else ' si feuille pas active on passe à la suivant sans appliquer le remplacement (evite le bug de la macro avec les tcd)
     
    End If
    Next Sh
    Je joins aussi un fichier avec le code et deux feuilles (identique sauf qu'une comporte des valeurs filtrées, pour voir la différence à l'éxecution du code).

    Je reste disponible pour toutes questions.

    Un grand merci pour votre futur aide.

    Bien cordialement,
    exemple_figerformule.xlsm
    Paul

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Lorsque je lance mon code, les formules sont bien passées en valeur mais la macro m'ajoute plein de données de façon "aléatoire" sur mes feuilles où il y a des lignes masquées, où plutôt filtrées, j'avoue ne pas comprendre pourquoi. Il n'y a pas de problème lorsque la plage n'est pas filtrée.
    Tout est dit là
    Pièce jointe 576915

    Je vous propose ceci, dans une colonne supplémentaire on marque toutes les lignes visibles d'un "X", puis on supprime le filtre, on remplace les formules par les valeurs, puis on filtre sur les "X" de la colonne E pour retrouver la configuration d'origine et on efface la colonne E.

    Le code:
    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
     
    Option Compare Text
     
    Sub FormuleEnValeur()
        Dim Sh As Long, DerLig As Long
     
        Application.ScreenUpdating = False
        For Sh = 1 To Sheets.Count
            Set f = Sheets(Sh)
            If f.Visible = True Then 'si la feuille est visible alors on applique le remplacement
                DerLig = f.Range("A" & Rows.Count).End(xlUp).Row 'Dernière ligne de la zone filtrée
                f.Range("E5:E" & DerLig).SpecialCells(xlCellTypeVisible).Value = "X" 'on marque les lignes visibles d'un "X" dans la colonne E
     
                'On Error Resume Next 'pour le cas ou il n'y a pas de filtre sur la colonne A
                f.AutoFilterMode = False 'On affiche toutes les lignes
                DerLig = f.Range("A" & Rows.Count).End(xlUp).Row 'Dernière ligne de la feuille
     
                With f.UsedRange 'on remplace les formules par leurs valeurs
                    .Value = .Value
                End With
            End If
     
            'Revenir à la présentation initiale, on applique le filtre sur la colonne E en ne sélectionnant que les "X"
            f.Range("A4:E4").AutoFilter
            f.Range("A4:E" & DerLig).AutoFilter Field:=5, Criteria1:="X"
            f.Range("E5:E" & DerLig).ClearContents 'on efface la colonne E
        Next Sh
    End Sub
    Cdlt

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/09/2016, 16h14
  2. [VBA Excel] Pb Suppression de lignes non filtrées
    Par Filippo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/09/2008, 11h55
  3. [VBA-E]Coller sur la ligne préc en fct d'1 valeur
    Par mimo13 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/02/2006, 10h55
  4. [VBA]Passer une variable dans une formule Excel
    Par David1974 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2006, 16h52
  5. [VBA-E] Afficher lignes masquées dans une feuille protégée
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/12/2005, 18h59

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