Problème avec les boucles For To Next qui s'entremèlent

Résolu
pedrito53 Messages postés 12 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 1 juin 2009 - 1 janv. 2009 à 17:36
NHenry Messages postés 15130 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juin 2024 - 2 janv. 2009 à 11:49
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

NHenry Messages postés 15130 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juin 2024 159
1 janv. 2009 à 22:37
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
3
NHenry Messages postés 15130 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juin 2024 159
2 janv. 2009 à 11:49
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
3
NHenry Messages postés 15130 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juin 2024 159
1 janv. 2009 à 19:23
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
0
NHenry Messages postés 15130 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juin 2024 159
1 janv. 2009 à 19:24
0

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

Posez votre question
pedrito53 Messages postés 12 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 1 juin 2009
1 janv. 2009 à 21:55
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
0
NHenry Messages postés 15130 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juin 2024 159
1 janv. 2009 à 21:58
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
0
pedrito53 Messages postés 12 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 1 juin 2009
1 janv. 2009 à 22:28
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
0
pedrito53 Messages postés 12 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 1 juin 2009
1 janv. 2009 à 22:47
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
0
NHenry Messages postés 15130 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juin 2024 159
1 janv. 2009 à 23:02
Bonjour,

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

http://nhen0039.chez-alice.fr/index.php
0
pedrito53 Messages postés 12 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 1 juin 2009
1 janv. 2009 à 23:04
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?
0
NHenry Messages postés 15130 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juin 2024 159
1 janv. 2009 à 23:11
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
0
pedrito53 Messages postés 12 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 1 juin 2009
1 janv. 2009 à 23:20
je t'ai envoyé le tout à ton adresse laposte.net!!

J'espère que tu l'as bien reçu
0
pedrito53 Messages postés 12 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 1 juin 2009
1 janv. 2009 à 23:43
As tu trouver une solution à mon problème???

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

Répond stp
0
NHenry Messages postés 15130 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juin 2024 159
1 janv. 2009 à 23:49
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
0
pedrito53 Messages postés 12 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 1 juin 2009
2 janv. 2009 à 00:52
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
0
Rejoignez-nous