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 :

Passer à la cellule suivante ou précédente visible [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 842
    Par défaut Passer à la cellule suivante ou précédente visible
    Bonjour à tous.

    Je ne sais pas comment faire pour passer à la cellule visible suivante ou précédente.

    Après avoir fait des recherches sur plusieurs forums le n’ai pas trouvé de solutions.

    Avec ce bout de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A:A").Find(What:="*", After:=ActiveCell, SearchDirection:=xlNext).SpecialCells(xlCellTypeVisible).Activate 
    Range("A:A").Find(What:="*", After:=ActiveCell, SearchDirection:=xlPrevious).SpecialCells(xlCellTypeVisible).Activate
    Il ne convient pas : toutes les lignes visibles sont sélectionnées.

    J’ai besoin d’un peu d’aide pour résoudre ce problème.

    Merci d’avance.

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour modus57,

    Apres test j'ai le même souci que toi et je ne sais pas l'expliquer.
    .SpecialCells(xlCellTypeVisible).Activate a l'air de selectionner toute les cellules visible peu importe ce qu'il y a avant le .

    Avec un Intersect tu pourrais peut être t'en sortir.

    Sinon tu peux contourner le problème que cela :
    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
    Sub Next_Cell()
     
        If ActiveCell.Column = 1 Then
    Next_:
            With ActiveSheet.Columns("A:A")
                .Find(What:="*", After:=ActiveCell, SearchDirection:=xlNext).Activate
            End With
            While ActiveCell.EntireRow.Hidden = True
                GoTo Next_
            Wend
        Else
            'rien
        End If
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Previous_Cell()
     
        If ActiveCell.Column = 1 Then
    Previous_:
            With ActiveSheet.Columns("A:A")
                .Find(What:="*", After:=ActiveCell, SearchDirection:=xlPrevious).Activate
            End With
            While ActiveCell.EntireRow.Hidden = True
                GoTo Previous_
            Wend
        Else
            'rien
        End If
    End Sub

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim c As Range
     
    Set c = Feuil1.Columns(1).SpecialCells(xlCellTypeVisible).Find("*", After:=Intersect(ActiveCell.EntireRow, Plage), SearchDirection:=xlNext)
    c.Activate
    Set c = Nothing
    Specialcells sur la plage de recherche

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 842
    Par défaut
    Bonjour antonysansh, mercatog

    Merci à tous les deux.

    La solution d'antonysansh fonctionne bien et en plus lorsque la dernière cellule visible est atteinte le sélecteur bascule sur la première cellule visible et inversement c'est exactement ce que je cherchais à faire.

    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
    Sub aa_cell_suivante_visible()
        Dim c As Range, Plage
        Set Plage = Range("A2:A" & [A65000].End(xlUp).Row)
        Set c = ActiveSheet.Columns(1).SpecialCells(xlCellTypeVisible).Find("*", After:=Intersect(ActiveCell.EntireRow, Plage), SearchDirection:=xlNext)
        c.Activate
        Set c = Nothing
     End Sub
     
    Sub aa_cell_précédente_visible()
        Dim c As Range, Plage
        Set Plage = Range("A2:A" & [A65000].End(xlUp).Row)
        Set c = ActiveSheet.Columns(1).SpecialCells(xlCellTypeVisible).Find("*", After:=Intersect(ActiveCell.EntireRow, Plage), SearchDirection:=xlPrevious)
        c.Activate
        Set c = Nothing
    End Sub
    Par contre ça fonctionne pas avec la solution de mercatog, pouvez-vous me donner une petite explication.

    Merci.

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    A force de vouloir réduire le code, on laisse des coquilles

    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
    Sub aa_cell_suivante_visible()
    Dim c As Range, Plage As Range
     
    Set Plage = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    Set c = Plage.Find("*", After:=Intersect(ActiveCell.EntireRow, Plage), SearchDirection:=xlNext)
    c.Activate
    Set c = Nothing
    Set Plage = Nothing
    End Sub
     
    Sub aa_cell_précédente_visible()
    Dim c As Range, Plage As Range
     
    Set Plage = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    Set c = Plage.Find("*", After:=Intersect(ActiveCell.EntireRow, Plage), SearchDirection:=xlPrevious)
    c.Activate
    Set c = Nothing
    Set Plage = Nothing
    End Sub

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

Discussions similaires

  1. [XL-2003] Passer a la cellule suivante
    Par Richard67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/01/2011, 18h50
  2. [XL-2003] Comment passer d'un enregistrement au suivant (ou précédent) sur un formulaire
    Par MichaSarah dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2010, 00h34
  3. [XL-2007] Passer à la cellule suivante et ajouter 1 à celle-ci
    Par rch05 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 30/04/2010, 19h40
  4. [POI]Récupérer valeur cellule suivant format
    Par leminipouce dans le forum Documents
    Réponses: 1
    Dernier message: 27/10/2005, 08h52
  5. cellule d'une table visible avec focus dans div scrollable
    Par echecetmat dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/03/2005, 10h57

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