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 :

VBA syntaxe : ignorer lignes masquées


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut VBA syntaxe : ignorer lignes masquées
    Bonjour !

    Je rencontre un petit problème sur VBA, et après de nombreuses heures de recherche sans succès je me tourne vers vous...

    Je travaille sur un fichier dans lequel 3 colonnes sont copiées et reportée sur une autre feuille (dans le même classeur) à l'aide d'une macro, le but étant de créer un tableau. Une fois le tableau "créé", je suis obligée de masquer certaines des lignes précédemment reportées. Jusque là pas de problème.

    Je dois ensuite reporter une autre série de valeurs (une référence) dans une 4ème colonne à partir d'une 3ème feuille en fonction de critères contenus dans les 3 colonnes reportées. Or je voudrais écrire la macro de façon à "ignorer" les lignes masquées. Type : "si la ligne est masquée, alors ignorer et passer à la suivante"

    Pour info ces lignes masquées doivent rester dans le tableau pour être consultables, mais elles ne fonctionnent pas avec les critères dont je parlais précédemment car les libellés sont neutres, un peu comme si il était écrit "divers" plusieurs fois pour plusieurs des catégories contenues dans la base de données.

    J'ai essayé à partir de ce code, qui fonctionne quand je supprime les lignes au lieu de les masquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For i = 2 To 150
     If ThisWorkbook.Worksheets("BDD").Range("D" & i).Value = ThisWorkbook.Worksheets("Tableau").Range("B" & i + 4).Value Then
      ThisWorkbook.Worksheets("Tableau").Range("D" & i + 4).Value = ThisWorkbook.Worksheets("BDD").Range("H" & i).Value
     End If
     If ThisWorkbook.Worksheets("BDD").Range("E" & i).Value = ThisWorkbook.Worksheets("Tableau").Range("B" & i + 4).Value Then
      ThisWorkbook.Worksheets("Tableau").Range("D" & i + 4).Value = ThisWorkbook.Worksheets("BDD").Range("H" & i).Value
     End If
     If ThisWorkbook.Worksheets("BDD").Range("F" & i).Value = ThisWorkbook.Worksheets("Tableau").Range("B" & i + 4).Value Then
      ThisWorkbook.Worksheets("Tableau").Range("D" & i + 4).Value = ThisWorkbook.Worksheets("BDD").Range("H" & i).Value
     End If
    Et j'ai cherché autour de beaucoup de solutions, pour l'instant je pense qu'il y a peut être quelque chose à faire avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("Tableau").Activate
    Dernlig = Range("C1048576").End(xlUp).Row
    Visibles = Range("B6:B" & Dernlig).SpecialCells(xlVisible)
    Mais n'ayant rien trouvé de concluant ou qui fonctionne... J'aimerai bien avoir vos avis/idées !

    D'avance merci !

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Les lignes du classeur ont la propriété Hidden qui permet de savoir si cette ligne est masqué.

    si tu boucle sur des cellules tu peux faire ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to 1000
          if MaFeuil.Cells(i,"A").entirerow.hidden then ...
    Next
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Pour ce qui est du code, tu peux alléger encore l'écriture, je ne vais pas plus loin, je ne connais pas le contexte autour de ces tests

    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
    Sub teste()
    Dim shTab As Worksheet, shBDD As Worksheet
    Dim ValTabBi4 As Variant
     
        Set shTab = ThisWorkbook.Worksheets("Tableau")
        Set shBDD = ThisWorkbook.Worksheets("BDD")
     
        For i = 2 To 150
            'On prend la valeur de comparaison
            ValTabBi4 = shTab.Cells(i + 4, "B").Value
            With shBDD
                If (.Cells(i, "D").Value = ValTabBi4) Or _
                    (.Cells(i, "E").Value = ValTabBi4) Or _
                    (.Cells(i, "F").Value = ValTabBi4) Then shTab.Cells(i + 4, "D").Value = .Cells(i, "H").Value
            End With
        Next
    End Sub
    Pour la boucle, on doit pouvoir déterminer le 150 pour avoir une valeur au plus juste du nombre de donnée à traiter. Y'a-t-il une colonne dont les cellule ne sont jamais vide, un numéro de chambre par exemple (j'ai un peu regardé les fichiers que tu avais posté dans une autre conversation... y'aurait un gros travail à faire pour reprendre leur code d'ailleurs).
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut
    Pour la boucle je fais un .End(xlUp).Row et oui les codes je me doute, je suis vraiment débutante j'ai commencé il y a seulement quelques semaines...

    J'ai essayé plusieurs combinaisons à partir de tes éléments de réponse et je n'arrive pas à quelque chose qui fonctionne. Je pense que c'est du au fait que ma base de données à une structure de type :

    Catégorie Famille Sous famille Code
    Sous Famille Code
    Sous Famille Code
    Famille Sous Famille Code
    Sous Famille Code
    Sous Famille Code
    Catégorie Famille Sous famille Code
    Sous Famille Code

    Tandis que mon tableau d'analyse reporte :
    Catégorie
    Famille
    Sous Famille
    Sous Famille
    Famille
    Sous Famille
    Etc.

    Un élément masqué peut être issu d'une famille ou d'une sous famille, et encore une fois ça fonctionne quand je supprime les lignes contenant ces éléments génériques (sous forme de "_") au lieu de les masquer.

  5. #5
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut
    Hello !

    Désolée de revenir encore sur le sujet mais j'ai essayé tellement de combinaisons de code que je ne sais même plus ce que j'ai essayé... :'(

    Je suis bloquée sur ça :

    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
    Sub test()
     
    With Sheets(1)
    SH2 = .Range("D3").Value
    SH4 = .Range("D5").Value
     
    Dim Dernlig As Long
    Sheets(SH4).Activate
    Dernlig = Range("C1048576").End(xlUp).Row
     
    Dim LignesVisibles As Range
    Set LignesVisibles = Sheets(SH4).Range("A1:Z1048576").SpecialCells(xlCellTypeVisible)
     
    Dim Ligne As Range
    For Each Ligne In LigneVisibles.Row
     
    For i = 2 To Dernlig
     
    Libelle = ThisWorkbook.Worksheets(SH4).Range("B" & i + 4).Value
     
    With Sheets(SH2)
    If (.Cells(i, "D").Value = Libelle) Or (.Cells(i, "E").Value = Libelle) Or (.Cells(i, "F").Value = Libelle) Then
    Sheets(SH4).Cells(i + 4, "D").Value = .Cells(i, "H").Value
     
    End If
    End With
    Next i
    Next Ligne
    End With
    End Sub
    Le problème c'est la variable Ligne mais je ne sais pas comment l'écrire. Est-ce que quelqu'un a une petite idée ?

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Peux-tu placer un fichier démo s'il te plait et expliquer clairement ce que tu veux faire.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Marianne Hbt Voir le message
    Dim Ligne As Range
    For Each Ligne In LigneVisibles.Row[/CODE]
    Ceci ne peut pas fonctionner.

    Row est une propriété qui renvoie un numéro de ligne et non pas une référence à une ligne.
    Comme Ligne est de type Range, il y a incompatibilité.

    Il faudrait que tu écrives :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Ligne In LigneVisibles
    ce qui ferait une scrutation sur toutes les cellules.
    Ensuite, pour prendre une ligne complète, il suffirait d'accoler la propriété EntireRow à ta variable Ligne.

    Je pense que tu devrais aussi modifier l'assignation de ta variable LignesVisibles.
    Telle qu'elle est, le For Each va scruter chaque cellule de chaque ligne et de chaque colonne.
    Si ton but est de boucler juste les lignes (un tour par ligne), il vaudrait mieux écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set LignesVisibles = Intersect(Sheets(SH4).UsedRange.SpecialCells(xlCellTypeVisible), Sheets(SH4).Columns(1))

Discussions similaires

  1. [Toutes versions] VBA ligne masquée comportement bizarre ?
    Par Daniel.C dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/07/2013, 21h07
  2. Réponses: 3
    Dernier message: 30/01/2012, 13h42
  3. [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
  4. [VBA] insérer une ligne dans un fichier excel
    Par cokinoumasterflash dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/07/2005, 18h52
  5. [LOAD DATA] ignorer lignes à la fin du fichier
    Par lisooou dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/06/2005, 15h02

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