Rechercher : dans
Par :

MACRO ET FILTRE AUTOMATIQUE

Dernière réponse le 18 nov 2008 à 21:38:11 ludo, le 18 nov 2008 à 10:50:53 
 Signaler ce message aux modérateurs

Bonjour,
J'ai un tableau A1 : V 3212 , faisant appel à de nombreuses variables, pour émettre différentes hypothèses
prévisionnelles possible. Pour mener à bien ce choix , ce tableau est doté d'un filtre automatique.
L'opérateur choisit en fonction des contraintes quotidiennes , en agissant sur les variables et retenant le scénario qui lui conviens.

Mon problème : je voudrai renvoyer le scénario retenu parmis les 3212, sur un autre fichier pour faire un bilan ( les différents scénarios devant s'afficher les uns à la suite des autres) ; Si je retiens un scénario et que je construit ma macro à chaque fois en fonction du numéro de ligne retenu, ça n'a pas d'intéret. Comment faire pour que le scénario retenu par filtre soit renvoyé automatiquement et juste celui ci??

MERCI 0 TOUS

Configuration: Windows 2000
Internet Explorer 6.0

1

santiago69, le 18 nov 2008 à 11:21:30

Il faudrait que tu nous en montre un peu plus sur le format du tableau.
S'il ne contient pas de donnees confidentielles, poste le ici.
Sinon, cree une copie avec des donnees fictives et poste le.



Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

2

ludo, le 18 nov 2008 à 11:30:19

Ok effectivement, c'est un peu confidentielle, je prépare une version modifié et je l'envois,

merci

Répondre à ludo

3

ludo, le 18 nov 2008 à 11:52:24

http://www.cijoint.fr/cjlink.php?file=cj200811/cijf2Hw013.xl­s


voila le lien, je n'est pas mis le fichier vers lequel devrait etre transférer chaque trajet décidé , on peut imaginer que c'est sur une nouvelle feuille.

merci d'avance, moi je bloque vraiment

Répondre à ludo

4

santiago69, le 18 nov 2008 à 11:56:02

Repete moi ta procedure. Mais en t'appuyant sur un example concret pour que je comprenne bien.
Prends un exemple de selection a faire, et quand tu bloque, explique moi quel bouton tu voudrais, quels lignes tu voudrais exporter etc...


Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

5

ludo, le 18 nov 2008 à 12:12:22

Exemple d'une selection :
AULNAY SOUS BOIS AUTOROUTE A 3 / ZI DE LA BARBIERE AZE 1 41 ivu 16

2 14 7,5 669 312 62,4 234 2621 2855 0,4058


donc je fait une selection à l'aide du filtre, qui va retenir qu'une seule ligne ,je voudrais pouvoir la transférer avec juste l'aide d'un bouton sur un autre fichier , qui va comptabiliser toutes les selections effectuer par les opérateurs ( qui sont encore moins à l'aise que moi avec l'outil excel) .
je voudrai pouvoir faire une autre selection par exemple en changeant l'adresse retenu, la transferer dans le fichier qui comptabilisera le bilan carbone des différentes activités effectués. Mais ne sais pas et arrive pas à transférer qu'une seule ligne retenu par le filtre en appuyant toujours sur le meme bouton.

Je sais pas si c'est trés clair ce que je te dit , mais je l'espère

Répondre à ludo

6

santiago69, le 18 nov 2008 à 12:44:40

Ok je comprends. laisse moi un moment, je pense pouvoir t'aider cet aprem.


Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

7

santiago69, le 18 nov 2008 à 13:54:59

T'es pret a travailler en simultane avec moi ?
moi sur le doc exemple, toi sur le vrai ou le faux, peu importe.


Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

8

fred, le 18 nov 2008 à 13:56:44

Ok c est bon pour moi

Répondre à fred

10

ludo, le 18 nov 2008 à 14:12:11

C'est bon pour moi , les modifications ont été faites, je suis prèt pour la suite chef

Répondre à ludo

9

santiago69, le 18 nov 2008 à 14:06:35

Deroulement general : on va creer des liens hypertext dans toutes les cellules du tableau qui vont lancer une fonction qui copie la ligne sur laquelle on a clique.

1) desactiver la mise en forme des liens hypertextes (sinon tout le tableau sera bleu et souligne)
2) creer tous les liens en 1 clic
3) Creer la fonction qui va capturer chaque clic et l'interpreter en copiant la ligne sur laquelle il a ete effectue.

1.1) Menu Format, Style
Nom du style = Lien hypertexte
Tu decoche tout, tu clique sur ajouter
Nom du style = Lien hypertexte visite
Tu decoche tout, tu clique sur ajouter
Tu clic sur OK

T'inquiete, cette modification n'a cours que dans le classeur ouvert.

J'attend ton roger pour passer au point 2.


Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

11

santiago69, le 18 nov 2008 à 14:16:06

2) Tu selectionne tout le tableau (normalement A13:Q3212)
Menu Insertion, Lien Hypertexte
Tu clique sur Emplacement dans ce document et tu laisse A1 dans Feuil1
Tu clique sur OK

Tu verifie maintenant que quel que soit l'endroit ou on clique dans le tableau, on se retrouve dans la cellule A1.
T'inquiete, ca va nous servir pour la suite...


J'attend pour passer a la suite

Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

12

ludo, le 18 nov 2008 à 14:26:59

OK c'est bon pour moi

Répondre à ludo

13

santiago69, le 18 nov 2008 à 14:33:06

3) Tu vas dans l'editeur Visual Basic (Alt+F11)
Tu vas dans l'explorateur de projet (Ctrl+R)
Tu double clique sur VBAProject (tondoc.xls) / Microsoft Excel Objects / ThisWorkbook
Normalement y'a une feuille blanche qui apparait avec eventuelement :

Option Explicit

Tu efface tout et tu remplace par :
Dim CurRow1 As Long, CurRow2 As Long

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    CurRow2 = CurRow1
    CurRow1 = Target.Row
End Sub

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    Dim i As Long
    Cells(CurRow2, 1).Select
    Do: i = i + 1: Loop Until IsEmpty(Feuil2.Cells(i, 1))
    For j = 1 To 17
        Feuil2.Cells(i, j) = Cells(CurRow1, j + 1)
    Next
End Sub

Je t'expliquerais ce que ca veut dire plus tard.
Tu me dis quand c'est bon


Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

16

ludo, le 18 nov 2008 à 14:49:01

OK c'est bon j'ai copié collé le code

Répondre à ludo

17

santiago69, le 18 nov 2008 à 14:51:10

Regarde plus bas, j'ai fait des modifs.

Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

14

santiago69, le 18 nov 2008 à 14:35:49

STOP ! Y'a une erreur de syntaxe

Dim CurRow1 As Long, CurRow2 As Long

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    CurRow2 = CurRow1
    CurRow1 = Target.Row
End Sub

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    Dim i As Long
    Cells(CurRow2, 1).Select
    Do: i = i + 1: Loop Until IsEmpty(Feuil2.Cells(i, 1))
    For j = 1 To 17
        Feuil2.Cells(i, j) = Cells(CurRow1, j)
    Next
End Sub





Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

18

ludo, le 18 nov 2008 à 14:57:04

C'est bon le troisième code a étté rentré

Répondre à ludo

15

santiago69, le 18 nov 2008 à 14:41:32

Aller, j'ai mieux encore :

Dim CurCell1 As Range, CurCell2 As Range

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Set CurCell2 = CurCell1
    Set CurCell1 = Target
End Sub

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    Dim i As Long
    CurCell2.Select
    Do: i = i + 1: Loop Until IsEmpty(Feuil2.Cells(i, 1))
    For j = 1 To 17
        Feuil2.Cells(i, j) = Cells(CurCell1.Row, j)
    Next
End Sub

J'attend que tu confirme que tu as bien applique la 3e version.


Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

19

santiago69, le 18 nov 2008 à 14:59:16

Et maintenant sous vos yeux ebahis !
Roulement de tambour...


Va dans la Feuil1.
Fais 3 selections successives et clique sur chacune d'elle (il ne se passe rien a priori)

Va dans la Feuil2
Constate


Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

20

ludo, le 18 nov 2008 à 15:11:31

Merci c'est vraiment sympa de ta part, tu me sauves , parceque je savais pas comment y arriver, je vais étudier tout le codage de près maintenant , pour bien comprendre.... merci vraiment

Répondre à ludo

21

santiago69, le 18 nov 2008 à 15:13:58

De nada.

ameliorations possibles :
- afficher un message apres avoir copier la ligne (sinon on a l'impression qu'il se passe rien et on recommence)
- je crois que ce que tu voulais c'etait enregistrer le clic vers un autre classeur (je suppose que tu saura adapter)


@+
Santiago

Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

22

santiago69, le 18 nov 2008 à 15:28:35

Quelques pistes pour comprendre le code :

A chaque deplacement, on enregistre la position en cours
Parceque quand on clic sur une cellule, on saute vers A1 et on aimerais bien savoir ou on etait quand on a clique

Enchainement de operations :
- je clique sur CELLULE
- L'evenement SelectionChange se lance avec Target = CELLULE
- Le focus bouge vers A1 (la destination du lien hypertexte)
- L'evenement SelectionChange se lance avec Target = A1
- L'evenement FollowHyperlink se lance

Donc au moment ou je gere l'evenement FollowHyperlink, j'ai besoin de savoir ou j'etait 2 cellules avant. C'est pour ca que je memorise ma position dans 2 variables (CurCell1 et CurCell2)
D'abord je retourne en CurCell2 (ou j'etait 2 cran avant)
Mais a ce moment, l'evenement SelectionChange se lance a nouveau avec Target = CELLULE.
Donc quelques lignes plus loin, quand je veux copier la ligne en cours, je copie la ligne CurCell1.Row (et pas CurCell2 qui maintenant correspond a A1)



Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69

23

eriiic, le 18 nov 2008 à 20:22:49

Bonsoir,

une suggestion : en utilisant l'evenement double-clic ça pourrait alléger la préparation...
eric

Répondre à eriiic

24

 santiago69, le 18 nov 2008 à 21:38:11

Effectivement, grace a eric, nous pouvons proposer une transformation tres simple.

1) Reprend ton document d'origine (avant toute transformation)
2) Ajoute ce code dans VBAProject (pbfiltreautomacro.xls) / Microsoft Excel Objects / ThisWorkbook

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Dim i As Long
    Cancel = True
    Do: i = i + 1: Loop Until IsEmpty(Feuil2.Cells(i, 1))
    For j = 1 To 17
        Feuil2.Cells(i, j) = Cells(Target.Row, j)
    Next
    MsgBox "La sélection a bien été ajoutée.", vbInformation
End Sub

3) C'est tout ! Un double clic n'importe ou sur une ligne provoquera son ajout dans la Feuil2.



Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

Répondre à santiago69
Collection CommentÇaMarche.net