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 :

Faire une boucle avec une valeur cible (to) qui augmente dynamiquement [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Faire une boucle avec une valeur cible (to) qui augmente dynamiquement
    Bonjour,

    Dans un tableau:
    • je parcours toutes les lignes les unes après les autres (for indiceLigne = 1 to valeurCible)
    • en fonction du contenu de la cellule (ligne, G), je dois ou non rajouter un certain nombre de lignes (if cells(indiceLigne)<>0 then Rows(indiceLigne + 1).Resize(valeur).Insert Shift:=xlDown)
    • lorsque j'ai rajouté des lignes, j'incrémente d'autant la valeur de mon indiceLigne et de la valeurCible (indiceLigne = indiceLigne+valeur et valeurCible = vleurCible+valeur)


    malheureusement, lorsque je teste ma macro, la boucle for se termine dès lors que l'indiceLigne est supérieur à la valeur initiale de valeurCible.

    Voici le code:
    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
     
    Private Function RealLastLine(sheetArea As Range) As Long
       If WorksheetFunction.CountA(sheetArea) = 0 Then RealLastLine = 1: Exit Function
       RealLastLine = sheetArea.Find("*", , , , , xlPrevious).Row
    End Function
     
    Sub SplitArticles()
        Sheets("Feuil2").Select
        rowEnd = RealLastLine(Sheets("Feuil2").Cells)
        For rowVar = 5 To rowEnd
            partName = Split(Cells(rowVar, 7), " - ")
            nbOption = UBound(partName)
            If nbOption <> 0 Then
                Rows(rowVar + 1).Resize(nbOption).Insert Shift:=xlDown
                rowVar = rowVar + nbOption
                rowEnd = rowEnd + nbOption
            End If
        Next
    End Sub
    Lorsque je vérifie les variables locales, je ne détecte aucune erreur.
    Le tableau de la "Feuil2" contient en colonne 7 (G) des données du type : item1 - item2 - item3... comme suit :
    A B C D E F G
    text text text text text text item1 - item2 - item3 - item4
    text text text text text text item1
    text text text text text text item1 - item2
    text text text text text text item1 - item2 - item3
    et la macro est censée rajouter après la ligne autant de ligne supplémentaire que de séparation " - ".

    Je suppose que la solution est assez trivial, mais une fois de plus je butte.
    Merci pour votre aide
    - crissc -

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    rowVar = 5
    rowEnd = 7
     Do While rowVar <= rowEnd
         If rowVar = 6 Then rowEnd = rowEnd + 1
         rowVar = rowVar + 1
     Loop
    End Sub

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Bonjour,

    pour completer ce que t'a donne dysortho, le choix du type de boucle doit se faire selon la logique suivante :

    - nombre d'occurences connu a l'avance => boucle For
    - nombre d'occurences inconnu (1 a n) => Do Loop While ou Do Loop Until
    - nombre d'occurences inconnu (0 a n) => Do While Loop ou Do Until Loop
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Un grand merci à tous les deux

    @dysorthographie,
    Je vais devenir un abonné inconditionnel puisque tu réponds toujours à mes questions.

    Cordialement
    - crissc -

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/03/2016, 16h23
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. Réponses: 22
    Dernier message: 20/05/2008, 10h25
  5. Réponses: 1
    Dernier message: 31/01/2007, 12h30

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