Boucles imbriquées : ne prend toujours que la même valeur...

Fermé
Marion - Modifié le 10 févr. 2021 à 13:57
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 9 févr. 2021 à 07:21
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 :

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

5 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
4 févr. 2021 à 11:31
Bonjour,

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?
0
Merci pour votre retour !
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 ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702 > Marion
4 févr. 2021 à 17:46
Re,

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

Worksheets("Grille soirée").Cells(i, y).Offset(-1, 0).Value
0
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...
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
6 févr. 2021 à 07:41
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
0
Marion_3555 Messages postés 1 Date d'inscription samedi 6 février 2021 Statut Membre Dernière intervention 6 février 2021
6 févr. 2021 à 08:41
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 :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
Modifié le 6 févr. 2021 à 10:17
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
0
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 :

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
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702 > Marion
8 févr. 2021 à 11:52
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
0
Marion > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
8 févr. 2021 à 13:49
La feuille Final comporte uniquement les titres. Le but est d'aller chercher les valeurs de la cellule juste au dessus et juste en dessous s'il y a une correspondance avec le titre
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702 > Marion
Modifié le 9 févr. 2021 à 07:47
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
0