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éer une variable égale au numéro de la boucle en cours [XL-2007]


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 Créer une variable égale au numéro de la boucle en cours
    Bonjour,

    Je poste ici car je suis en train de créer une macro pour automatiser un traitement excel long et pénible.

    J'ai un tableau ou chaque colonne est définit par une valeur de temps placée sur la ligne 1 et ou chaque ligne correspond à une fréquence placée en colonne A.
    Je souhaite extraire les "temps" et "fréquence" correspondant à la valeur la plus proche de 0.2 pour chacune de mes colonnes (allant de B2:B232 à EK2:EK232 soit 131 colonnes, si je ne dis pas de conneries). Puis copier ces temps et fréquences dans un tableau présent sur une autre feuille (basiquement mon tableau de données en Feuil1 et mon tableau de resultats en Feuil2 avec les temps en A2:Ax et les fréquences en B2:Bx) Je ne sais pas si je suis très clair...

    Voici la macro que j'ai commencé à rédiger:

    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
    Sub ferfghjk()
     
    Dim PORC As Double
    Dim macellulite As Range
    Dim tamere As Range
    Dim i As Integer
     
    Set F1 = Worksheets("Feuil1")
    Set F2 = Worksheets("Feuil2")
     
    For i = 1 To 131
     
        F1.Select
        Set tamere = F1.Columns("i + 1").Row("1:232")
        PORC = Application.Match("0.2", [tamere], -1).Value
        Set macellulite = Columns("PORC").Rows("i + 1")
        macellulite.Select
        Selection.End(xlUp).Select
        Selection.Copy
        F2.Select
        Cells(i + 1, 1).Select
        ActiveSheet.Paste
     
        F1.Select
        macellulite.Select
        Selection.End(xlToLeft).Select
        Selection.Copy
        F2.Select
        Cells(i + 1, 2).Select
        ActiveSheet.Paste
     
        Next i
     
    End Sub
    Mon soucis (peut être pas le seul) est de réussir à bien définir mes variables et notamment mon i que j'ai définit comme un PORC... Désolé ci mon code vous parait pérave et mon problème obsolète, mais je débute.

    Je vous joins mon classeur.

    Merci d'avance! Force et courage!
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pas trop le temps d'optimiser, mais regarde si déjà ça répond partiellement (voir totalement) à ta demande

    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
    Sub toto()
    Dim Cell As Range
    Dim Tabl(1 To 132, 1 To 3)
     
    Application.ScreenUpdating = False
     
    Tabl(1, 1) = "TEMPS"
    Tabl(1, 2) = "FREQUENCE"
    Tabl(1, 3) = "VALEUR"
    Feuil2.Cells.Delete
     
    With Feuil1
        ' 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.2"
            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)
     
            ' 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
    Feuil2.Cells(1, 1).Resize(UBound(Tabl, 1), 3).Value = Tabl
     
    Application.ScreenUpdating = True
     
    End Sub

  3. #3
    Invité
    Invité(e)
    Par défaut erreur 424
    Merci de ta réponse!

    En lançant ta macro, j'ai malheureusement un "message d'erreur d'execution 424: objet recquis" qui s'affiche et jaunit la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cell = .Columns(i).SpecialCells(xlCellTypeVisible).Find(Application.WorksheetFunction.Subtotal(4, .Cells(2, i).Resize(UsedRange.Rows.Count - 1, 1)), , , xlWhole)

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    est-ce que tu as testé sur ton classeur exemple ou sur un autre classeur ?

    de mon côté j'ai aucun souci sur ton classeur exemple

    il faut (si besoin) adapter le nom des feuilles sur ton autre classeur

    mais confirme déjà si c'est ok sur ton fichier test

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut!

    Que ce soit avec mon classeur exemple ou un nouveau identique, le même message d'erreur survient et la même ligne de code est mise en cause.


    Nom : 1.png
Affichages : 102
Taille : 307,2 Ko

    Nom : 2.png
Affichages : 97
Taille : 289,6 Ko


    Je te joins les copies d'écran pour mieux me faire comprendre et possiblement te donner des pistes que je n'aurais pas su prendre en compte.

    Merci encore du temps que tu consacres à mon problème!

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    et arf !!

    je te prie de m'excuser, j'ai dû manger un "point" quand j'ai mis en forme le code avant de le coller dans mon message


    voici, en rouge, le point qui manquait et que tu dois rajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cell = .Columns(i).SpecialCells(xlCellTypeVisible).Find(Application.WorksheetFunction.Subtotal(4, .Cells(2, i).Resize(.UsedRange.Rows.Count - 1, 1)), , , xlWhole)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2015, 15h35
  2. [Sécurité] Peut on créer une variable $_SERVER
    Par Cr@zyDeep dans le forum Langage
    Réponses: 6
    Dernier message: 12/05/2006, 09h27
  3. Créer une variable varchar interne à une procédure stockée
    Par killysui dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/04/2006, 17h59
  4. Réponses: 8
    Dernier message: 06/02/2006, 16h38
  5. [JDOM] Créer une variable xml directement dans java
    Par Tigrounette dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 18/12/2005, 14h21

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