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

Mode arborescent

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

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