Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

pb avec boucle dans boucle

  • Initiateur de la discussion Initiateur de la discussion loiclass
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

loiclass

XLDnaute Occasionnel
Bonjour,

J'ai un soucis de programmation.
Je veux faire une boucle dans une boucle. Ma 1ère boucle fonctionne correctement, mais la 2ème non.

Y a t il un code particulier à utiliser dans ce cas là?

Je joins un fichier exemple (simplifié au maximum).

Mon but est de copier une série de ligne, choisie par l'utilisateur grâce à une fonction inputbox.
Ces lignes sont copiée sur une autre feuilles, au même numéro de ligne.
Ma seconde boucle sert à reprendre ces lignes et à les copier sur lignes correspondant au nombre de ligne et non plus au numéro de ligne.
Dans ce cas elles seront toujours dans une plage de lignes données et non plus aléatoires.
Je pourrais réutiliser les valeurs plus facilement pour la suite de mon code.

J'espère être assez clair dans mes explications.

Merci d'avance
 

Pièces jointes

Re : pb avec boucle dans boucle

Bonjour

Le code un peu revu :
Code:
Sub impression_demande2()

Dim j As Variant

Dim DEBUT As Long
Dim FINS As Long

DEBUT = InputBox( _
        Prompt:="SAISISSEZ le numéro de début de la demande que vous souhaitez imprimer :", _
        Default:=Worksheets("demande échantillons").Range("U3") + 1)
FINS = InputBox( _
        Prompt:="SAISISSEZ LE NUMERO DE FIN :", _
        Default:=DEBUT)
          
If DEBUT <> "" And FINS <> "" Then

whith Worksheets("demande échantillons")
  .Range("U2") = DEBUT
  .Range("U3") = FINS
  j = .Range("U3") - .Range("U2") + 1
    If j > 4 Then
        MsgBox ("Vous devez corriger les n° de début et de fin pour que ...")
        Exit Sub
    End If
  .Range("U4") = j
End With

For i = DEBUT To FINS
    whith Worksheets("demande échantillons")
            .Range("B9").Sheets("suivi échantillons").Range ("D" & i)
            .Range("C12").Sheets("suivi échantillons").Range ("E" & i)
    End With
        
    whith Worksheets("fiche suivi")
            .Range("B12").Sheets("suivi échantillons").Range ("D" & i)
            .Range("B13").Sheets("suivi échantillons").Range ("F" & i)
            .Range("B14").Sheets("suivi échantillons").Range ("G" & i)
    End With
        
       ' [ à poursuivre sur le même principe en utilisant +++ les with sheets ... end with
Next i
 
End If
 
End Sub

tu n'as pas deux boucles à faire dans ce cas là : il faut d'abord contrôler que le N° de saisie des lignes est OK puis ne lancer la copie des lignes que si c'est le cas.
Je te conseille de lire ces quelques pages


  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
qui devraient t'être utiles.
Un bon bouquin ne serait pas inutile non plus.
On ne code pas en VBA en jouant avec les étiquettes de ligne comme tu l'as fait et surement pas pour sortir de la macro (exit sub le fait très bien)
Il faut absolument éviter les sélection (select) de feuille inutiles, malheureusement c'est que le l'enregistreur de macro génère comme code... mais il faut le corriger

Il est indispensable de structurer les macros et jouer sur l'indentation des lignes est une très bonne façon de voir les boucles, les if end if, les with end with. Cette dernière instruction permet d'alléger beaucoup le code et de le rendre plus compréhensible.

en espérant t'avoir aidé un peu
 
Re : pb avec boucle dans boucle

Bonjour et merci à MISANGE,

Je suis bloqué sur ton code, à ce niveau:

For i = DEBUT To FINS
with Worksheets("demande échantillons")
.Range("B9").Sheets("suivi échantillons").Range ("D" & i)
.Range("C12").Sheets("suivi échantillons").Range ("E" & i)
End With

with Worksheets("fiche suivi")
.Range("B12").Sheets("suivi échantillons").Range ("D" & i)
.Range("B13").Sheets("suivi échantillons").Range ("F" & i)
.Range("B14").Sheets("suivi échantillons").Range ("G" & i)
End With

' [ à poursuivre sur le même principe en utilisant +++ les with sheets ... end with
Next i

Je ne vois pas quel est le problème. J'ai une erreur d'execution '438'.
 
Re : pb avec boucle dans boucle

c'est que j'ai tapé trop vite, il manque le signe =
Code:
with Worksheets("demande échantillons")
            .Range("B9")=Sheets("suivi échantillons").Range ("D" & i)
            .Range("C12")=Sheets("suivi échantillons").Range ("E" & i)
    End With
 
Re : pb avec boucle dans boucle

J'ai trouvé la solution, il manquait un signe =
.Range("B9")=Sheets("suivi échantillons").Range ("D" & i)

Par contre je suis toujours avec mon problème de départ.
Je n'arrive pas à copier les cellules L"DEBUT" à L"FINs" sur la feuille "suivi échantillons" et à les coller dans une plage donnée sur la feuille "demande échantillons"

Si j'ai 4 valeurs, ça me copie 4 fois la même chose alors que je veux 1 valeur différente par ligne.

Merci d'avance
 
Re : pb avec boucle dans boucle

Salut loiclass et le forum
C'est comme en cours, quand tu écris une incongruité, le prof te gueule dessus 😉
Code:
with Worksheets("demande échantillons")
            [COLOR=#FF0000].Range("B9").Sheets("suivi échantillons").Range ("D" & i)[/COLOR]
            .Range("C12").Sheets("suivi échantillons").Range ("E" & i)
    End With
With permet de mettre un préfixe une instruction commençant par un point
Ton instruction en rouge dit :
La cellule Di de la feuille suivi contenue dans la cellule B9 de la feuille suivi => Excel te répond "moi y en a pas comprendre charabia à toi !" (et moi non plus d'ailleurs)

Un code ne peut suffire pour expliquer ce que tu veux faire... surtout s'il est faux. Pour dépanner, on est obligé de construire l’algorithme du code existant, d'essayer d'en extraire le but, de le reconstruire, puis de le coder. Avec autant d'interprétations, le risque de tomber juste sur ce qu'il est censé faire...

Misange a réorganisé ton code, pour qu'il soit plus lisible, en écrêtant les erreurs les plus évidentes. Mais il n'a pas pu créer un code qui fonctionne, parce qu'il est au minimum aussi nul que moi : ni devin, ni télépathe ! Donc, impossible de savoir ce que ton code était supposé faire.

Tu fais une boucle qui parcourt les cellules de la colonne D de la ligne DEBUT à la ligne FINS => mais pour en faire quoi ??? Copier leur contenue et le mettre dans une unique cellule ? Mais nulle part, il y a un embryon de concaténation (non, non, ce n'est pas un gros mot). Les copier ailleurs ? Aucune incrémentation en vue...

On ne sait rien de ce qu'il faut faire, mais on est censé le faire quand même...

Excel fait toujours ce que tu lui demandes de faire (quand c'est possible), et quelques (rares) fois ce que tu veux qu'il fasse.

Si tu veux de l'aide, la première chose à faire est toujours de donner le but à atteindre. Avec ça, et un fichier d'essai, on peut résoudre la plupart des problèmes.
A+

Edit
J'aurais du attendre...

Le problème n'est pas de faire deux boucle imbriquée, mais de faire évoluer deux variables simultanément
For X=A to B
range("C" & Y)=Sheets("Suivi").Range("D" & X)
next X
avec Y = Z+X => le Z étant calculé de sorte que quelque soit A, (Z+A) correspond à la première ligne où doit commencer la copie.

Par exemple, si on veut copier les cellules de D50 à D60 et les coller à partir de C3, on aura ce type de boucle :
For X=50 to 60
Range("C" & (X-47)) = Sheets("Suivi").range("D" & X)
Next X
 
Dernière édition:
Re : pb avec boucle dans boucle

Bonjour Gorfael,

Je veux intégrer en plus du code déjà existant, la chose suivante:

pour les valeurs de début et fin validées par l'utilisateur (qui correspondent au numéro de ligne), je veux copier toutes les valeurs de la colonne L (sur la feuille "suivi échantillons") allant de début à fin.
Ces valeurs seront à coller sur la feuilles "suivi échantillons", avec la valeur de L"début"=A17,
L"début+1"=A18, L"début"=A19....

Voilà, j'espère être plus compréhensible.
 
Re : pb avec boucle dans boucle

Salut loiclass et le forum À condition que tu refasses ton code pour qu'il fonctionne 😉
Pour que ça rest compréhensible, on va admettre que la feuille de sortie s'appelle "Sortie Echantillons"
Code:
Dim X as Long, Y as long
............
Y=17-DEBUT
for X=DEBUT To FIN
    Sheets("Sortie Echantillons").Range("A" & (X+Y)) = Sheets("suivi échantillons").Range("L" & X)
Next X
Si début =10, Y=17-10=7
La boucle donne :
Y=17-10=7
X=10 => A17=L10
X=11 => A18=L11, etc... (pas mis les feuilles, plus lisible

Si Début = 153
Y=-136
X=153 => A17=L153 .... (153-136=17)
X=154 => A18=L154 etc...
A+
 
Dernière édition:
Re : pb avec boucle dans boucle

Merci à MISANGE pour la simplification de mon code, et merci à GORFAEL pour la solution finale qui n'était pas si compliqué que ça.

Je peux continuer à travailler sur mon fichier complet.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
222
Réponses
23
Affichages
672
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…