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 :

Excel / VBA / boucle / offset variable selon une condition [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Asset management
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Asset management
    Secteur : Finance

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Par défaut Excel / VBA / boucle / offset variable selon une condition
    Bonjour à tous et à toutes,

    c'est mon premier post sur le forum donc j’espère expliquer mon problème le plus clairement possible.

    Version Excel : Microsoft Office 365 version 1708

    Je suis actuellement en train de créer une boucle en VBA permettant de calculer des performances hebdomadaires.

    En résumé ma feuille de calcul est organisé de la manière suivante :

    En Colonne A => j'ai des dates
    En Colonne B => j'ai le numéro de jours correspondant à la date en face => fonction Excel :=JOURSEM(A2))

    Exemple:

    Cellule A2 = 14/02/2014
    Cellule B2 = 6 ( numéro de jours semaine correspondant à la date en A1
    Cellule C2 = donnée numérique

    et ceci jusqu'à la ligne 100

    je souhaiterai réaliser une boucle me permettant à chaque fois que je tombe sur la valeur 6 dans la colonne B de réaliser un calcul par rapport aux données en colonne C

    J'ai réussi à écrire la macro suivante :

    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
    Public Sub test_1()
     
    Dim DernLigne As Long
    Dim i As Integer
     
    With Worksheets("Test")
     
    DernLigne = .Range("A" & Rows.Count).End(xlUp).Row
     
    End With
     
    For i = 4 To DernLigne
     
     
    If Cells(i, 2) = 6 Then 
     
    Cells(i, 5) = Cells(i, 3) / Cells(i, 3).Offset(-5, 0) - 1
     
    End If
     
    Next i
     
    End Sub
    Problème rencontré en rouge : je souhaiterai que mon Cells(i, 3).Offset(-5, 0) ne soit pas fixe mais qu'il aille chercher la ligne qui corresponds au précédent 6ème jours de la semaine

    Auriez vous une idée pour aller chercher la valeur en colonne C du précédent 6ème jours ( indiqué en colonne B) ?

    j'éspère être clair dans mon explication.

    Je vous remercie par avance de votre aide.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par arnaudsliman Voir le message
    Problème rencontré en rouge : je souhaiterai que mon Cells(i, 3).Offset(-5, 0) ne soit pas fixe mais qu'il aille chercher la ligne qui corresponds au précédent 6ème jours de la semaine
    Il suffit de le garder en mémoire. C'est à ça que servent les variable.
    Je pars du principe que la première occurrence de "6" en colonne B est shuntée (puisque, par définition, il n'y a pas eu de "6" précédent).

    Petite remarque : dans tes déclarations, il est illogique de déclarer DernLigne en Long et i en Integer puisque le second fini par avoir la même valeur que le premier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub test_1()
     
    Dim i As Long, i_up As Long
     
    i_up = 0
    For i = 4 To Worksheets("Test").Range("A" & Rows.Count).End(xlUp).Row
       If Cells(i, 2) = 6 Then 
          If i_up > 0 Then Cells(i, 5).Value = Cells(i, 3).Value / Cells(i_up, 3).Value
          i_up = i
       End If
    Next i
     
    End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Asset management
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Asset management
    Secteur : Finance

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Par défaut
    Merci pour ta réponse, ça marche parfaitement.
    @+

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

Discussions similaires

  1. [DATA] Sommes des valeurs d'une variable selon une condition
    Par Totalex dans le forum SAS Base
    Réponses: 5
    Dernier message: 31/01/2017, 10h37
  2. VBA : Afficher des lignes selon une condition
    Par mery 20 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/12/2015, 10h42
  3. Boucle en VBA avec 2 variables dont une est le numéro de feuille
    Par micapilote dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/10/2011, 23h06
  4. Réponses: 1
    Dernier message: 22/06/2009, 19h13
  5. Réponses: 8
    Dernier message: 05/05/2006, 16h33

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