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 :

Création de filtres sur colonnes d'une feuille cherchant plus proche valeur de cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je vous contacte aujourd'hui car j'ai un soucis dans une macro que je voudrais écrire pour définir la fréquence(1/2) de mes données et la tracer en f(temps). Je m'explique, j'ai une feuille contenant en colonne A3:A161 des 'fréquences' et en colonnes B3:EK161 des 'données relatives à ces frequences'. Sachant qu'en ligne B1:EK1 il y a le temps correspondant à chacune des colonnes.

    Bref, ce que je souhaite faire c'est créer des filtres sur chaque colonne (entre B3:EK161) pour trouver la valeur de la colonne (par exemple en B3:B161) la plus proche (inférieure par ex) de la valeur de '=(B2-B161)/2' (B pour l'exemple) formule qui serait présente en ligne 2 de chaque colonne entre B:EK. Une fois cette valeur de la colonne trouvée, il me faut extraire les valeurs en colonne A (soit la fred(1/2)) et en ligne 1 (soit le temps) correspondantes et les copier dans une autre feuille pour pouvoir tracer mon fameux 'fréquence(1/2)=f(temps)'.

    Pour le moment j'ai un code pour chercher sur les colonnes B:EK les plus proches inférieurs à '0.9' et sortir les valeurs en colonne A et en ligne 1 correspondantes dans une autre feuille.
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Sub sisi()
     
        'copie g(1)norm et garder valeurs
        Sheets("normalized g1").Select
        Sheets("normalized g1").Copy Before:=Sheets(4)
     
        'bouge la feuille copie
        Sheets("normalized g1 (2)").Move After:=Sheets(5)
        Sheets("normalized g1 (2)").Select
        Cells.Select
        Selection.Copy
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
        'tracer Tau=f(t)
     
        Sheets("normalized g1 (2)").Select
     
    Dim Cell As Range
    Dim Tabl(1 To 300, 1 To 3)
    'empeche la visu des actions de la macro
    Application.ScreenUpdating = False
     
    Tabl(1, 1) = "time (min)"
    Tabl(1, 2) = "Tau (ms)"
    Tabl(1, 3) = "g(1) normalized"
    Worksheets("Tau=f(t)").Cells.Delete
     
    With Worksheets("normalized g1 (2)")
        ' boucle sur les colonnes
        For i = 2 To .UsedRange.Columns.Count - 1
            ' filtre automatique
            With .Cells(1, 1)
                .AutoFilter
                ' on filtre les valeurs inférieures ou égales à 0,2
                .AutoFilter i, "<=0.9"
            End With
            ' on cherche la cellule approchant de 0,2
            'Set Cell = .Columns(i).SpecialCells(xlCellTypeVisible).Find(Application.WorksheetFunction.Subtotal(4, .Cells(2, i).Resize(.UsedRange.Rows.Count - 1, 1)), , , xlWhole)
            Set Cell = .Columns(i).SpecialCells(xlCellTypeVisible).Find(Application.WorksheetFunction.Subtotal(4, .Cells(2, i).Resize(.UsedRange.Rows.Count - 1, 1)), , xlFormulas, xlWhole)
     
            ' si elle existe
            If Not Cell Is Nothing Then
                ' écriture du temps et fréquence
                Tabl(i, 1) = .Cells(1, i)
                Tabl(i, 2) = .Cells(Cell.Row, 1)
                Tabl(i, 3) = .Cells(Cell.Row, i)
            End If
        Next i
    End With
     
    ' restitution du tableau de résultat
    Worksheets("Tau=f(t)").Cells(1, 1).Resize(UBound(Tabl, 1), 3).Value = Tabl
     
    Worksheets("Tau=f(t)").Activate
     
    End Sub
    Bref, je vous serai très reconnaissant si vous pouviez me donner une idée pour automatiser tout ca.

    Je vous joins mon tableau. Les colonnes à traiter se trouves ds la feuille 'normalized g1' et les données triées seraient extrait en feuille 'Tau=f(t)'

    J’espère avoir été un peu près clair!

    Merci d'avance!

    izi.xlsx
    Dernière modification par AlainTech ; 15/11/2015 à 21h10. Motif: Fusion de 2 messages

  2. #2
    Invité
    Invité(e)
    Par défaut dsl du triple post
    Pour simplifier, mon probleme se situe dans l'utilisation du Filter. J'aimerai utiliser un Advanced, mais je ne sais pas comment l'incorporer à ma boucle. Les cells a filtrer se situent en A6:EK165 et la zone critere en lignes 4:5 de chaque colonne...

    Mon code actuel avec un simple autofilter qui filtre le plus proche inf de 0.9:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With Worksheets("normalized g1 (2)")
        ' boucle sur les colonnes
        For i = 2 To .UsedRange.Columns.Count - 1
            ' filtre automatique
            With .Cells(1, 1)
                .AutoFilter
                ' on filtre les valeurs inférieures ou égales à 0,9
                .AutoFilter i, "<=0.9"
            End With
            ' on cherche la cellule approchant de 0,9
     
            Set Cell = .Columns(i).SpecialCells(xlCellTypeVisible).Find(Application.WorksheetFunction.Subtotal(4, .Cells(2, i).Resize(.UsedRange.Rows.Count - 1, 1)), , xlFormulas, xlWhole)
    Encore dsl pour le triple post!

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Citation Envoyé par Babouschka Voir le message
    Pour simplifier, mon probleme se situe dans l'utilisation du Filter. J'aimerai utiliser un Advanced, mais je ne sais pas comment l'incorporer à ma boucle. Les cells a filtrer se situent en A6:EK165 et la zone critere en lignes 4:5 de chaque colonne...
    Bonjour,

    As-tu réussi à faire le filtre avancé sans code ? Si oui, utilise l'enregistreur de macros, et poste le code que tu auras obtenu par la suite si tu n'y arrives toujours pas.

    Cordailement

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/10/2015, 07h25
  2. [WB20] Filtre sur colonne de type heure dans une table mémoire
    Par mike76 dans le forum WebDev
    Réponses: 1
    Dernier message: 06/10/2015, 09h51
  3. Réponses: 3
    Dernier message: 28/02/2015, 15h44
  4. Réponses: 5
    Dernier message: 27/03/2013, 15h29
  5. copier certaines colonnes d'une feuille Excel
    Par emeraudes dans le forum Access
    Réponses: 7
    Dernier message: 12/04/2006, 16h57

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