Problème avec les boucles For To Next qui s'entremèlent [Résolu]

Signaler
Messages postés
12
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2009
-
NHenry
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
-
Bonjour à tous, tout d'abord bonne année!

J'ai un problème qui me bloque aujourd'hui, c'est que j'ai un projet à finir pour la fin de la semaine et là je suis bloqué sur la résolution automatique d'un tableau. En fait, j'ai trop boucles For Next qui s'entrecroisent avec des If dedans et je ne sais pas trop si le code est bon (d'ailleurs, il n'est pas bon car il ne fonctionne pas!)

Donc voilà le morceau de code:

Dim col As Integer
Dim z As Integer
Dim r As Integer
col = 53
z = 2
r = 2
For col = 53 To 2

For r = 2 To 13
If IsEmpty(Sheets("feuil4").Cells(r, col)) = False Then
For z = 2 To 13

If Sheets("Feuil3").Cells(z, 18) = Sheets("feuil3").Cells(r, 1) Then

Sheets("Feuil4").Cells(z, col - Sheets("Feuil3").Cells(r, 5)).Value =                                                  

Sheets("Feuil3").Cells(z, 17).Value * Sheets("feuil4").Cells(r, col).Value

Else
End If
z = z + 1
Next z

Else
End If
r = r + 1
Next r

col = col - 1

Next col

Voilà le petit bout de code qui ne veut pas m'afficher les valeurs dans le tableau! Merci d'avance pour votre aide.

Bonne année

Pedrito53

15 réponses

Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

J'ai réindenté ton code et viré les incrémentations inutiles :

Dim col As Integer
Dim z As Integer
Dim r As Integer
Dim a As String
Dim b As Integer
Dim c As Integer
col = 53
z = 2
r = 2
For col = 53 To 2 Step -1
    For r = 2 To 13
        If IsEmpty(Sheets("feuil4").Cells(r, col)) = False Then
            a = Sheets("Feuil3").Cells(z, 18)
        End If
        b = Sheets("Feuil3").Cells(r, 5)
        c = col - b
        For z = 2 To 13
            If a = Sheets("feuil3").Cells(r, 1) Then
                Sheets("Feuil4").Cells(z, c) = (Sheets("Feuil3").Cells(z, 17).Value) * (Sheets("feuil4").Cells(r, col).Value)
            End If
        Next z
    Next r
Next col

Donnes des noms plus explicites à tes variables stp.

a = Sheets("Feuil3").Cells(z, 18)
Alors que tu es en-dehors de la boucle, tu ne peux pas être sûr de la valeur de z.

http://nhen0039.chez-alice.fr/index.php
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

à la place de :
Sheets("Feuil4").Cells(z, c) = (Sheets("Feuil3").Cells(z, 17).Value) * (Sheets("feuil4").Cells(r, col).Value)
mettre :
Sheets("Feuil4").Cells(z, c) = Sheets("Feuil4").Cells(z, c) + (Sheets("Feuil3").Cells(z, 17).Value) * (Sheets("feuil4").Cells(r, col).Value)

Si ton pb est résolu, merci de mettre le(s) message(s) en "réponse acceptée"?

http://nhen0039.chez-alice.fr/index.php
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

Indenté ça donne :
Dim col As Integer
Dim z As Integer
Dim r As Integer
col = 53
z = 2
r = 2
For col = 53 To 2

    For r = 2 To 13
        If IsEmpty(Sheets("feuil4").Cells(r, col)) = False Then
            For z = 2 To 13

                If Sheets("Feuil3").Cells(z, 18) = Sheets("feuil3").Cells(r, 1) Then

                Sheets("Feuil4").Cells(z, col - Sheets("Feuil3").Cells(r, 5)).Value =                                                 

                Sheets("Feuil3").Cells(z, 17).Value * Sheets("feuil4").Cells(r, col).Value

            Else
            End If
            z = z + 1
        Next z

        Else
        End If
        r = r + 1
    Next r

    col = col - 1
Next col

Questions :
-Pourquoi faire :
Else
End if
Si pas besoin ?

-Pourquoi tu incrémente et décrémente à la fin de tes for, cela est fait automatiquement, pour des pas autres que 1, utilise STEP : For i=1 to 5 step 2 OU For i=5 to 2 step -1

Le For incrémente et tu décrémente, boucle infinie en vue.

http://nhen0039.chez-alice.fr/index.php
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Messages postés
12
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2009

Slt, j'incrémente pour vérifier chaque cellule d'un tableau. Si une cellule est remplie, je compare et je dois la copier sur une autre cellule en utilisant une formule avec les délais et plein d'autres choses.

En fait, je suis en train d'automatiser un tableau de MRP 0. Je ne sais pas si tu vois ce que c'est??

Merci pour ta réponse. Mais comment je fait alors pour décrémenter. Je n'est pas très bien saisie l'histoire du STEP???

Bonne soirée
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

Le For incrémente tout seul, pas besoin de le faire.

Par défaut (si omis) le for est Step 1

For col = 53 To 2 Step -1
debug.print col
next
 te sortira :
53
52
51
50
...
5
4
3
2

http://nhen0039.chez-alice.fr/index.php
Messages postés
12
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2009

Pourrai tu m'aider à cherche l'erreur, enfin le problème car il n'y a pas d'erreur à priori mais rien n'est copier dans mon tableau comme je le demande??

Dim col As Integer
Dim z As Integer
Dim r As Integer
Dim a As String
Dim b As Integer
Dim c As Integer
col = 53
z = 2
r = 2
For col = 53 To 2 Step -1
    For r = 2 To 13            If IsEmpty(Sheets("feuil4").Cells(r, col)) False Then a Sheets("Feuil3").Cells(z, 18)
            b = Sheets("Feuil3").Cells(r, 5)
            c = col - b
                            For z = 2 To 13                                        If a Sheets("feuil3").Cells(r, 1) Then Sheets("Feuil4").Cells(z, c) (Sheets("Feuil3").Cells(z, 17).Value) * (Sheets("feuil4").Cells(r, col).Value)
            z = z + 1
            Next z
                r = r + 1
                Next r
                        Next col
Messages postés
12
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2009

Il y a du mieux car des valeurs apparaissent dans le tableau. Malheureusement, ce ce sont pas les bonnes!
Il me met des 0 un peu partout, pourquoi?

Voilà le nouveau code:

Dim col As Integer
Dim z As Integer
Dim r As Integer
Dim a As String
Dim b As Integer
Dim c As Integer
col = 53
z = 2
r = 2
For col = 53 To 2 Step -1
    For r = 2 To 13
        If IsEmpty(Sheets("feuil4").Cells(r, col)) = False Then
        For z = 2 To 13
        a = Sheets("Feuil3").Cells(z, 18)
        b = Sheets("Feuil3").Cells(r, 5)
        c = col - b
            If a = Sheets("feuil3").Cells(r, 1) Then
                Sheets("Feuil4").Cells(z, c) = (Sheets("Feuil3").Cells(z, 17).Value) * (Sheets("feuil4").Cells(r, col).Value)
            End If
        Next z
    End If
    Next r
Next col

Merci pour ton aide
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

Tu peux me fournir un exemple de tableau (pas le fichier Excel) ?

http://nhen0039.chez-alice.fr/index.php
Messages postés
12
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2009

Ba si tu veu je te fournis mon programme pour que tu regarde un peu!

Le fichier excel donc?? C'est sa que tu veux?
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

Je pensais que c'était faisable sans, mais à la réflexion, pas forcément.
Tu trouveras l'adresse pour me l'envoyer sur mon site (section contact) (clique sur l'image en-dessous de ce texte).

http://nhen0039.chez-alice.fr/index.php
Messages postés
12
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2009

je t'ai envoyé le tout à ton adresse laposte.net!!

J'espère que tu l'as bien reçu
Messages postés
12
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2009

As tu trouver une solution à mon problème???

Je n'ai plus de nouvelles, cela m'inquiète!!

Répond stp
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

Je t'ai envoyé un message privé à ce sujet, je n'ai pas de quoi lire ce fichier (créé avec 2007 je suppose, Dsl, mais je me contente de 2003).

http://nhen0039.chez-alice.fr/index.php
Messages postés
12
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 juin 2009

Merci pour ton aide précieuse mais j'ai finalement réussi à trouver la solution!!

Une dernière question, comment pourrai-je dire au valeur de s'additionner car parfois, plusieurs valeurs s'inscrivent dans une même cellule et excel ne garde que la dernière rentrée dans la cellule. Donc cela pose problème!!

Merci pour tout encore