Créer une boucle à plusieurs conditions

Bonjour,

Je viens de créer une macro avec une boucle qui va chercher des données en colonne I de l'onglet "Indicateurs" pour les mettre sur une colonne (de D à O) de l'onglet "EXTRACTION" en fonction du mois:

For j = 4 To 15
Sheets("EXTRACTION").Select

If Cells(1, j) = mois Then
Cells(4, j) = Sheets("Indicateurs").Range("I30")
End If

If Cells(1, j) = mois Then
Cells(5, j) = Sheets("Indicateurs").Range("I31")
End If

If Cells(1, j) = mois Then
Cells(6, j) = Sheets("Indicateurs").Range("I32")
End If

If Cells(1, j) = mois Then
Cells(7, j) = Sheets("Indicateurs").Range("I33")
End If

Next j

Ma macro fonctionne cependant pour quelle fonctionne pour tout mon fichier il faudrait que je répète le code de ma boucle 382 fois car mon TDB contient 382 lignes d'indicateurs.

Y a t'il moyen de simplifier mon code en mettant par exemple une condition pour i en plus de celle pour j et ainsi m'éviter de le répéter 382 fois?

Je voulais joindre une version allégée de mon fichier pour que se soit plus compréhensible mais le service est non disponible. J'espère que mon message seul sera suffisant pour comprendre ce que je souhaite.

Merci d'avance pour votre aide,

Bonne soirée.

Bonjour Ceci.T

Sans fichier ça va être compliqué, mais un essai (peut-être)

Sub Test()
  Dim Lig As Long, Col As Long
  Dim ShtD As Worksheet
  ' Définir la feuille destination = extraction
  Set ShtD = Sheets("EXTRACTION")
  ' Pour chaque ligne de la 4 à la (4*382) en pas par 4 lignes
  For Lig = 4 To 1528 Step 4
    ' Pour chaque colonne
    For Col = 4 To 15
      If ShtD.Cells(1, Col) = mois Then
        ShtD.Cells(4, Col) = Sheets("Indicateurs").Range("I30")
        ShtD.Cells(5, Col) = Sheets("Indicateurs").Range("I31")
        ShtD.Cells(6, Col) = Sheets("Indicateurs").Range("I32")
        ShtD.Cells(7, Col) = Sheets("Indicateurs").Range("I33")
      End If
    Next Col
  Next Lig
End Sub

@+

Bonjour BrunoM45,

Merci pour votre aide. Cela fonctionne mais m'oblige tout de même à recopier cette ligne:

ShtS.Cells(7, Col) = Sheets("Indicateurs").Range("I33") 378 fois en modifiant le numéro de ligne et la cellule à aller chercher à chaque fois. Il n'existe pas d'autres moyens?

J'ai réussi en passant par firefox à joindre un modèle de mon fichier dans le message précédent.

Merci d'avance,

Cécilia

Bonjour Cécilia,

Souci, c'est que je ne comprends pas ce que tu veux faire, pourquoi 378 fois

Il faudrait nous joindre un exemple du résultat attendu

@+

Bonjour à tous,

c'est vrai que le classeur n'aide pas beaucoup à la compréhension.
Peut-être :

        If Cells(1, j) = mois Then
            For lig = 4 To 382 + 4
                Cells(lig, j) = Sheets("Indicateurs").Range("I30").Offset(lig - 4)
            Next lig
        End If

378 ou 382 ?
Mais si c'est ça il vaut mieux copier-coller la plage entière en une fois plutôt que de boucler (très lent)
Qq chose comme :

    If Cells(1, j) = mois Then
        Cells(4, j).Resize(382).Value = Sheets("Indicateurs").Range("I30").Resize(382).Value
    End If

eric

Bonjour et merci pour vos réponses,

C'est vrai que je ne suis pas très claire, dur d'expliquer par écrit ce que l'on souhaite...

En fait, chaque mois nous réalisons une extraction sur une appli qui recense nos résultats sur une multitude d'indicateurs (379). Cependant cette extraction en l'état n'est pas très exploitable. Dans le fichier que je vous joins cette extraction correspond à l'onglet "indicateurs" dans une version très épurée, les données étant confidentielles. Cette extraction est enregistré chaque mois dans un dossier sous la forme "Extraction_"& mois & ".xlsx"
J'ai donc créé un autre fichier contenant les onglets "titre" et "extraction" uniquement. Ce fichier reprend les résultats mois par mois. Pour le remplir, j'ai donc dans ce fichier une macro qui ouvre l'extraction qu'on lance tous les mois grâce à un inputbox de sélection de mois, puis qui copie/colle l'onglet indicateurs de cette extraction sur ce fichier puis copie/colle les données de la colonne I (résultats de la période) de cet onglet sur la colonne du mois sélectionné de l'onglet extraction. L'onglet indicateurs est ensuite supprimé.

Grâce à Bruno, la macro fonctionne mais comme vous pouvez le voir j'ai autant de lignes que d'indicateurs soit 379 lignes. D'où ma question peut-on encore simplifier ma macro qui est assez lente à tourner? Sinon elle restera en l'état.

Merci pour votre aide,

Bonne journée,

Cécilia

Bonsoir Cecilia

J'ai mieux compris voici ton fichier avec le code qui devrait aller, à tester

@+

Bonjour Bruno,

Un très grand merci pour votre aide! Ça fonctionne parfaitement, c'est beaucoup plus rapide et par la même occasion ça m'a permit de découvrir le userform, je n'en avais jamais créé encore.

Merci,

Cécilia

Rechercher des sujets similaires à "creer boucle conditions"