VBA, se déplacer de ligne en ligne après filtre automatique

E

EricS

Guest
Bonjour,

J'ai un tableau sur lequel j'active le filtrage. Au clavier, si j'utilise la flèche vers le bas, je me déplace de ligne valide en ligne valide (en sautant les lignes masquées).

Quel code en VBA me permettrait d'obtenir le même résultat?

Merci
 
R

Robert

Guest
Salut EricS, salut le forum,

Cette macro devrait te permettre de faire ce que tu demandes :

Sub test()
Dim cel As Range
For Each cel In Range(ActiveCell.Offset(1, 0), Cells(65536, ActiveCell.Column))
If cel.EntireRow.Hidden = False Then
cel.Select
Exit Sub
End If
Next cel
End Sub

À plus,

Robert
 
J

JCA06

Guest
Bonjour Eric, Robert, le Forum,

J'ai remarqué que l'on avait tendance à poser des questions sur un point particulier, mais que l'on ne cherchait pas souvent s'il y a d'autre possibilités, d'autre manières d'aborder le problème.

Par exemple, en lisant ton post, je me suis posé cette question : A quoi te sert de te déplacer d'une ligne à une autre dans tes données filtrées ?

Si c'est dans un but de lecture seule des données, pourquoi ne pas récupérer le résultat de ce filtre (par un copier/coller) vers une feuille de traitement ?

Ou alors pourquoi passer par un filtre ?

D'où viens-je ? Où cours-je ? Dans quel état j'ère ? Qui a tué le Docteur Lenoir avec le Chandelier dans la cuisine ?

A plus.
 
E

EricS

Guest
Merci à Robert et JCA06

1/ Robert, je n'ai pas encore essayé mais effectivement l'idée est bonne. Dans un premier temps, je voulais coller à l'existant d'Excel et éventuellement savoir s'il existait une fonction "toute faite".

2/ JCA06, tu as raison de rappeler qu'il faut se poser les bonnes questions (générales) avant de taper dans la résolution d'un problème précis. Pour ton info, et peut-être une idée de ta part :

a) je reçois des données d'une base avec en résumé différents types de machines et différentes dates
b) je les récupère dans un fichier excel, sur une feuille globale que j'éclate en 7 feuilles selon machines et mois (d'où le filtre à la génération)
c) ces 7 feuilles reçoivent des commentaires que je veux récupérer sur l'original (fonction RECHERCHEV qui pointerait sur la bonne feuille et non pas les 7)
d) j'archive
e) le mois d'après je recommence en récupérant données de la base + commentaires de la feuille globale archivée le mois précédent
....

Il y a forcément plusieurs façons de gérer ce pb et j'ai supposé que pour connaître la bonne feuille utilisée dans RECHERCHEV le plus simple était de générer cette formule au moment où mon filtre est validé.

Merci encore
 
J

JCA06

Guest
Re bonjour Eric, le Forum,

J'avoue que je n'ai pas tout compris !!

Voici tout de même une interprétation d'après ce que j'ai cru comprendre :
Tu gères un historique des interventions sur des machines.
Un service t'adresse le détail des interventions programmées du mois passé avec les références des machines et les dates d'interventions.
Cette information doit être complétée par les services techniques chargés des interventions qui doivent mettre un commentaire en face de chaque ligne.
L'historique est ensuite mis à jour en ajoutant les lignes du mois commentées.

Si c'est bien cela, voici une idée :
- tu ajoutes une colonne codifiée qui servira de référence à la ligne d'intervention programmée ;
- tu éclates et tu distribues les 7 feuilles par des couper/coller filtrant sur l'absence de commentaires et sur chaque feuille machines ;
- tu protège chacune des 7 feuilles sauf la zone de commentaire pour ne pas perdre de données ;
- tu centralises les retour directement dans ta feuille d'historique.

Pour ce faire, une partie de ton code pourra être obtenu par l'enregistreur de macro :
- après récupération des nouvelles lignes dans ton historique :
- tu actives l'enregistreur de macro :
- tu filtres sur la colonne commentaire en choisisant les vides ;
- tu filtres sur les machines destinées à la feuille 1 ;
- tu sélectionnes les données, voici à ce sujet un bout d'un code que j'ai fait :
Range("D65536").Select ' ou une autre colonne que D selon ta liste
' Je détermine le numéro de la dernière ligne que j'impute à la variable L
L = Selection.End(xlUp).Row
' Si L est égal à 3, qui est ma ligne de titres, c'est qu'il n'y a pas de données
If L <> 3 Then Range("C4:I" & L).Select ' Dans mon exemple, je récupére les données des colonnes C à I
Selection.Copy
' Je retourne dans la feuille "Calcul" en A9 pour copier le résultat
Sheets("Calcul").Select
Range("A9").Select
ActiveSheet.Paste
Puis tu reviens vers ta feuille de données pour effacer les données que tu viens de copier :
Range("C4:I" & L).Select
Application.CutCopyMode = False
Selection.ClearContents

Ensuite tu passe à l'autre machine...

A plus...
 
E

EricS

Guest
Bonjour ROBERT et JCA06,

J'ai eu un peu de temps pour mepencher sur vos propositions. J'ai commencé par celle de Robert, la fonction répond très bien à mes attentes car elle s'inclue dans ce que j'avais développé.

Je vais sans doute prendre le temps pour une version optimisée pendant que la première est testée et à cette fin je me reposerai la question de la façon de procéder, mais là, j'étais un peu pris par le temps.

Merci à vous deu et à une prochaine fois peut-être.

Eric
 

Discussions similaires

Réponses
12
Affichages
565

Statistiques des forums

Discussions
314 158
Messages
2 106 500
Membres
109 600
dernier inscrit
Serge C.