Boucles imbriquées : ne prend toujours que la même valeur...
Marion
-
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
Hello à tous !
Cela fait longtemps que je planche sur des boucles imbriquées, si vous arrivez à me dégager de là ce serait top !
Mon fichier trouve les correspondances de texte entre deux onglets différents : dès que les 5 premiers caractères de ma cellule sont trouvés dans un autre onglet avec une grosse base de données, alors il y met à côté les infos complémentaires de l'autre onglet.
Toutefois au sein même de cette boucle, je souhaite en faire une nouvelle (cf boucle x en en dessous), et c'est là que je bloque : je cherche à ce qu'il prenne à chaque fois une valeur différence selon x (donc z+ 0 puis z+1 puis z+2 et z+3), mais finalement il ne me resort toujours QUE z+3, je n'arrive pas à incrémenter le x au sein de la boucle z déjà existante...Auriez-vous des idées ?
Ci dessous la partie du code :
Cela fait longtemps que je planche sur des boucles imbriquées, si vous arrivez à me dégager de là ce serait top !
Mon fichier trouve les correspondances de texte entre deux onglets différents : dès que les 5 premiers caractères de ma cellule sont trouvés dans un autre onglet avec une grosse base de données, alors il y met à côté les infos complémentaires de l'autre onglet.
Toutefois au sein même de cette boucle, je souhaite en faire une nouvelle (cf boucle x en en dessous), et c'est là que je bloque : je cherche à ce qu'il prenne à chaque fois une valeur différence selon x (donc z+ 0 puis z+1 puis z+2 et z+3), mais finalement il ne me resort toujours QUE z+3, je n'arrive pas à incrémenter le x au sein de la boucle z déjà existante...Auriez-vous des idées ?
Ci dessous la partie du code :
For i = 11 To 27 Step 4 'lignes à remplir For y = 1 To 14 Step 2 'colonnes à remplir For Z = 5 To 300 'lignes pour chercher la correspondance If Left(Worksheets("Grille soirée").Cells(i, y).Value, 5) = Left(Worksheets("Grille soirée").Cells(i + 4, y).Value, 5) And Worksheets("Grille soirée").Cells(i, y).Value <> "" Then Worksheets("Grille soirée").Cells(i, y).Interior.Color = 65535 Worksheets("Grille soirée").Cells(i + 4, y).Interior.Color = 65535 End If If Worksheets("Grille soirée").Cells(6, y).Value > 1 And Left(UCase(sansAccent(Worksheets("Grille soirée").Cells(i, y).Value)), 8) Like Left(UCase(sansAccent(Worksheets("Données TV Matrice").Range("E" & Z).Value)), 8) Then For x = 0 To 3 Worksheets("Grille soirée").Cells(i, y).Offset(-1, 0).Value = Worksheets("Données TV Matrice").Range("C" & Z + x).Value Next x End If Next Z Next y Next i
A voir également:
- Boucles imbriquées : ne prend toujours que la même valeur...
- Excel fonction si et ou imbriquées - Guide
- Fonctions SI et ESTVIDE imbriquées ✓ - Forum Excel
- Fonctions SI et ESTVIDE imbriquées - Forum Excel
- Fonction SI ET imbriquées étendues colonnes ✓ - Forum LibreOffice / OpenOffice
- Algobox, problème pour boucles - Forum Programmation
5 réponses
Bonjour,
mais finalement il ne me resort toujours QUE z+3
Ben vu le code de cette boucle
Que voulez vous que cela fasse en realite?
mais finalement il ne me resort toujours QUE z+3
Ben vu le code de cette boucle
x=0 to 3, c'est normal, vous ecrivez toujours la meme cellule
Que voulez vous que cela fasse en realite?
Oui vous avez raison, le problème vient peut-être de là ! J'ai essayé d'y incrémenter un x quelque part, mais je bloque...
Bonjour,
Vous pouvez mettre un fichier avec des données non confidentielles mais cohérente?
Et surtout écrire vos cellules x pour voir ce que vous voulez en final
Faites le pour deux exemples de suite pour voir l'empilage
Vous pouvez mettre un fichier avec des données non confidentielles mais cohérente?
Et surtout écrire vos cellules x pour voir ce que vous voulez en final
Faites le pour deux exemples de suite pour voir l'empilage
Oui ce sera plus simple ! Voilà j'ai refait un fichier propre (le lien : https://wetransfer.com/downloads/3751fc0c5dbac917b9d6f373901a2a2720210206073942/049581)
Vous avez un premier onglet "FINAL" avec ma macro actuelle, qui réitère le même texte pour les colonnes 1 et 2.
Et je cherche donc à ajouter ou modifier le code pour pouvoir avoir ce que j'ai mis dans l'onglet "FINAL SOUHAITE".
En sachant que j'imaginais que le "x" d'incrémentation pouvait se trouver dans l'onglet "Données" car j'y ai mis un compteur pour voir combien d'occurence du même texte on peut avoir... (car cela pourra changer)
J'espère que cela vous aide mieux à comprendre ?
Merci de prendre le temps de m'aider là dessus :)
Vous avez un premier onglet "FINAL" avec ma macro actuelle, qui réitère le même texte pour les colonnes 1 et 2.
Et je cherche donc à ajouter ou modifier le code pour pouvoir avoir ce que j'ai mis dans l'onglet "FINAL SOUHAITE".
En sachant que j'imaginais que le "x" d'incrémentation pouvait se trouver dans l'onglet "Données" car j'y ai mis un compteur pour voir combien d'occurence du même texte on peut avoir... (car cela pourra changer)
J'espère que cela vous aide mieux à comprendre ?
Merci de prendre le temps de m'aider là dessus :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Je recupere le fichier et regarde la chose
Pourquoi n'y a t-il pas votre code?
Dans votre code y a: Grille soirée en nom de feuille correspond Final je suppose
Je recupere le fichier et regarde la chose
Pourquoi n'y a t-il pas votre code?
Dans votre code y a: Grille soirée en nom de feuille correspond Final je suppose
Pardon je n'avais pas vu votre réponse !
Si il y a bien un code dans les modules, le module s'appelle "Matrice" et la macro en question s'appelle "Base", je vous la remets ici si besoin :
Si il y a bien un code dans les modules, le module s'appelle "Matrice" et la macro en question s'appelle "Base", je vous la remets ici si besoin :
Sub Base() For i = 11 To 27 Step 4 For y = 1 To 14 Step 2 'boucle uniquement sur les colonnes non grisées For Z = 5 To 105 If Left(UCase(sansAccent(Worksheets("FINAL").Cells(i, y).Value)), 8) Like Left(UCase(sansAccent(Worksheets("Données").Range("E" & Z).Value)), 8) And Worksheets("FINAL").Cells(i, y).Value <> "" And Worksheets("Données").Range("E" & Z).Value <> "" Then Worksheets("FINAL").Cells(i, y).Offset(1, 0).Value = Worksheets("Données").Range("G" & Z).Value & " % - " & ((Worksheets("Données").Range("H" & Z).Value) / 1000) Worksheets("FINAL").Cells(i, y).Offset(-1, 0).Value = Worksheets("Données").Range("C" & Z).Value End If Next Z Next y Next i End Sub
Bonjour,
Merci, mais j'avais fini par trouver ce code.
Par contre je ne comprends toujours pas ceci:
alors en valeur il met z+0 puis z+1 puis z+2 et j'aurai ainsi mes trois valeurs différentes.
Elles doivent se mettre ou ces valeurs?
Car je ne vois pas de difference entre vos deux feuilles Final en dehors des valeurs de cellules changent.
Comment est faite la feuille Final avant de lancer le code
Merci, mais j'avais fini par trouver ce code.
Par contre je ne comprends toujours pas ceci:
alors en valeur il met z+0 puis z+1 puis z+2 et j'aurai ainsi mes trois valeurs différentes.
Elles doivent se mettre ou ces valeurs?
Car je ne vois pas de difference entre vos deux feuilles Final en dehors des valeurs de cellules changent.
Comment est faite la feuille Final avant de lancer le code
Bonjour,
la cellule juste au dessus et juste en dessous s'il y a une correspondance avec le titre
Desole, je n'y comprends rien. C'est dessus/dessous de quoi de quelle feuille?
La feuille données sert quoi?
Pouvez sortir de votre "bulle" et reprendre ce que vous vouliez faire vu de l'extérieur, sinon nous n'allons pas y arriver .
Suite:
Vous ne repondez toujours pas a cette question:
Qu'est ce qu'il y a dans la feuille final avant de lancer le code.
Pour comparer faut de quoi le faire, sans cette reponse, impossible de continuer.
Je vois bien pour colonne 1 ou sont les donnees affichees dans la feuille Donnees.
Mais ne vois pas plus
la cellule juste au dessus et juste en dessous s'il y a une correspondance avec le titre
Desole, je n'y comprends rien. C'est dessus/dessous de quoi de quelle feuille?
La feuille données sert quoi?
Pouvez sortir de votre "bulle" et reprendre ce que vous vouliez faire vu de l'extérieur, sinon nous n'allons pas y arriver .
Suite:
Vous ne repondez toujours pas a cette question:
Qu'est ce qu'il y a dans la feuille final avant de lancer le code.
Pour comparer faut de quoi le faire, sans cette reponse, impossible de continuer.
Je vois bien pour colonne 1 ou sont les donnees affichees dans la feuille Donnees.
Mais ne vois pas plus
J'aimerais justement qu'il incrémente le x à chaque nouvelle cellule z !
En fait à la base, mes boucles i et z servent à trouver des correspondances de texte --> je cherche la correspondance de i grâce à z.
Mais il s'avère que j'ai quelques z qui ont le même texte, mais pas les mêmes valeurs dans les cellules d'à côté --> Or ce sont ces valeurs qui m'intéressent, et mon code n'arrive pas à les récupérer les unes après les autres, il ne me sort toujours QUE la dernière occurence.
Mon x dans le code est une tentative pour décrire le nombre d'occurence --> S'il y a 3 occurences de z, alors en valeur il met z+0 puis z+1 puis z+2 et j'aurai ainsi mes trois valeurs différentes.
Je ne sais pas si c'est clair ?
alors en valeur il met z+0 puis z+1 puis z+2 et j'aurai ainsi mes trois valeurs différentes.
C'est ca que je ne comprends pas. Vous n'ecrivez qu'une cellule