IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

j'ai une erreur Next sans For


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 8
    Points
    8
    Par défaut j'ai une erreur Next sans For
    Bonjour,
    je ne trouve pas d'ou ça vient. Un p'tit coup de main ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Sub prevision()
     
    Dim r As Integer
    Dim c As Integer
    Dim i As Integer
    Dim m As Integer
     
    i = 2
     
    Plage = Sheets("unités").Range("C5:G12")
     
     For Each Cell In Plage
        If (IsEmpty(Cell)) Then
        Next Cell
        Else
            If (IsEmpty(Range("B" & Cell.Row))) Then
            Next Cell
            Else
                r = Cell.Rows
                c = Cell.Column
                For m = 1 To 12
                'collage de la date
                Sheets("Feuil2").Range("A" & i).Value ("1/" & m & "/2008")
                'collage du nom client
                Sheets("Feuil2").Range("B" & i).Value = Sheets("unités").Range("B" & r).Value
                'collage de la famille
                Sheets("Feuil2").Range("C" & i).Value = Sheets("unités").Cell(c, 4).Value
                'collage de qté
                Sheets("Feuil2").Range("D" & i).Value = Sheets("unités").Cell.Value * Cell(m, 87).Value
                i = i + 1
                Next m
            End If
        End If
    Next Cell        
     
    End Sub
    Merci

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    Une boucle For.... ne peut boucler que par un seul Next.

    Regarde ton code : que sont donc tous ces "Next Cell" pour ta boucle "For each cell ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    c'est pour passer à la cell suivante quand la condition n'est pas remplie.
    Mais je vois ce que tu veux dire.
    Je modifie le code en condition "cellule n'est pas vide"


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub prevision()
     
    Dim r As Integer
    Dim c As Integer
    Dim i As Integer
    Dim m As Integer
     
    i = 2
     
    Plage = Sheets("unités").Range("C5:G12")
     
     For Each Cell In Plage
        If Not (IsEmpty(Cell)) Then
           If Not (IsEmpty(Range("B" & Cell.Rows))) Then
                r = Cell.Rows
                c = Cell.Column
                For m = 1 To 12
                'collage de la date
                Sheets("Feuil2").Range("A" & i).Value ("1/" & m & "/2008")
                'collage du nom client
                Sheets("Feuil2").Range("B" & i).Value = Sheets("unités").Range("B" & r).Value
                'collage de la famille
                Sheets("Feuil2").Range("C" & i).Value = Sheets("unités").Cell(c, 4).Value
                'collage de qté
                Sheets("Feuil2").Range("D" & i).Value = Sheets("unités").Cell.Value * Cell(m, 87).Value
                i = i + 1
                Next m
               Exit For
            End If
        End If
      Next Cell
     
    End Sub
    mais maintenant j'ai une erreur ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not (IsEmpty(Range("B" & Cell.Rows))) Then

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsEmpty(Range("B" & Cell.Row)) Then

  5. #5
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    c'est pour passer à la cell suivante quand la condition n'est pas remplie.
    Ce cas tu le traitais déjà avec tes IF.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    merci de l'aide
    même sans les parenthèses ça bugue.

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    Bonjour,
    Ce cas tu le traitais déjà avec tes IF.
    Quel if ? La plage de recherche concerne "C5:G12"
    Plage = Sheets("unités").Range("C5:G12")
    Donc, s'il a quelque chose dans une cellule de cette plage, il vérifie qu'il ait quelque chose dans une cellule de la même ligne de la colonne B... Ce qui n'est pas très logique, j'en conviens, puisque s'il a quelque chose dans plusieurs des colonnes de C à G et quelque chose dans la colonne B, il répétera plusieurs fois le même code qui suit...
    Tiens, je vois une erreur ici
    r = Cell.Rows
    idem que ma réponse précédente, corrige par
    @Caps corp,
    Dis-nous plutôt ce que tu veux faire
    A+

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    Bonjour,



    Ce cas tu le traitais déjà avec tes IF.
    oui mais que mettre aprés THEN si la cellule est vide ?
    condition 1:
    si la cell est vide on passe à la suivante
    si la celle est pleine >> condition 2

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    oui mais que mettre aprés THEN si la cellule est vide ?
    Rien !
    condition 1:
    si la cell est vide on passe à la suivante

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Dis-nous plutôt ce que tu veux faire
    A+
    ouais mais ça va être dur !!
    Je tente.

    J'ai un tableau 2 entrées
    en ligne : nom du client
    en colonne = Famille produit
    a l'intersection = qté

    Je veux coller dans une autre feuille pour chaque Qté :
    colonne A= date (mois /année)
    colonne B = nom du client
    colonne C = Famille
    colonne D = qté x taux du mois correspond (le Cell( m,87) )

    en fait pour chaque Qté rencontré dans le tableau, je veux créer 12 lignes (1 par mois) reprenant en debut la date (incrementer d'un mois) puis le nom du client (le meme 12 x ) puis la famille (la meme 12x) puis la qté pour le mois.

    voila.

    Citation Envoyé par ouskel'n'or Voir le message
    Rien !
    ???? je ne comprend pas.

    tu suggères ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    For Each Cell In Plage
        If IsEmpty(Cell) Then
        Else
        If IsEmpty(Range("B" & Cell.Row)) Then
        Else
                r = Cell.Row
                c = Cell.Column
                For m = 1 To 12
                'collage de la date
                Sheets("Feuil2").Range("A" & i).Value ("1/" & m & "/2008")
                'collage du nom client
                Sheets("Feuil2").Range("B" & i).Value = Sheets("unités").Range("B" & r).Value
                'collage de la famille
                Sheets("Feuil2").Range("C" & i).Value = Sheets("unités").Cell(c, 4).Value
                'collage de qté
                Sheets("Feuil2").Range("D" & i).Value = Sheets("unités").Cell.Value * Cell(m, 87).Value
                i = i + 1
                Next m
               Exit For
            End If
        End If
      Next Cell
    j'ai encore une erreur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If IsEmpty(Range("B" & Cell.Row)) Then

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Je vais essayer de reformuler pour voir si j'ai bien tout compris
    Première feuille : En en-tête colonne A (?) : Nom client
    Colonne suivantes : "Famille produit" -> Une colonne par famille ?
    Pas de colonne date ?

    Une seconde feuille "Recap", douze lignes, une par mois
    colonne A= date (mois /année)
    Tu la prends où, la date ?
    A+

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    oui c'est ça.
    en fait le nom client commence en B
    pas de date OUI ! = dans la première feuille la qté est un volume annuel. Ce que je souhaite faire dans la 2eme feuille c'est repartir cette quantité unique en 12 quantité par mois (mutliplié par le poids de chaque mois = données fixes en ligne 87)
    Je joins un tableau
    Fichiers attachés Fichiers attachés

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Déjà, on va simplifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Cell In Plage
        If not IsEmpty(Cell) Then
             If Not IsEmpty(Range("B" & Cell.Row)) Then
                r = Cell.Row
                c = Cell.Column
    Après, je ne comprends pas ce que tu fais

    Edit
    Ok, j'ai lu ta réponse et je pense comprendre à peu près ce que tu fais.
    Alors ton exit for est à supprimer sinon, à la première donnée trouvée, tu sors de la boucle for each.

    Qu'as-tu dans la colonne 87 ? Pas vu dans ton fichier, le résultat donc zéro (0) dans la colonne D

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    en fait c'est en ligne 87 de A87 à L87 = poids en % de chaque mois
    la formule est :
    Janv 2008 = Qté x A87
    Fev 2008 = Qté x B87
    etc..
    Qté etant la valeur trouver dans Cell de la 1er feuille

    je pense que ce code n'est pas bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Not IsEmpty(Range("B" & Cell.Row)) Then
    il bugue là-dessus

  15. #15
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    je pense que ce code n'est pas bon
    Code :

    If Not IsEmpty(Range("B" & Cell.Row)) Then
    il bugue là-dessus
    Et qu'en dit le "dit bugueur" ?
    A mon avis, le Range est de trop ! (because range de row de range... !!!)

    Essaie ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Not IsEmpty("B" & Cell.Row) Then
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    L'a pas reûfléchi, c'est bien
    If Not IsEmpty(Range("B" & cell.Row)) Then
    Déclare Cell et Plage as range, sinon, ça marche jamais
    et comme tu as de multiples erreurs, je mets ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub prevision()
    Dim r As Integer
    Dim c As Integer
    Dim i As Integer
    Dim m As Integer
    Dim cell As Range
    Dim Plage As Range
    i = 2
     
    Set Plage = Sheets("unités").Range("C5:G12")
    For Each cell In Plage
        If Not IsEmpty(cell) Then
            If Not IsEmpty(Range("B" & cell.Row)) Then
                r = cell.Row
                c = cell.Column
                For m = 1 To 12
                'collage de la date
                Sheets("Feuil2").Range("A" & i).Value = "1/" & m & "/2008"
                'collage du nom client
                Sheets("Feuil2").Range("B" & i).Value = Sheets("unités").Range("B" & r).Value
                'collage de la famille
    La ligne suivante, tu mets un N° de ligne qui est un N° de colonne (la variable c)
    Vérifie-tout. J'ai corrigé la ligne de la date mais vérifie aussi
    A+

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    OK je n'ai plus d'erreur.
    Reste que pour la date il incrémente le jour et pas le mois
    variable m dans :

    au final il me sort :
    1/01/08
    2/01/08
    3/01/08
    ...



    je recolle le code complet corrigé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub prevision()
     
    Dim r As Integer
    Dim c As Integer
    Dim i As Integer
    Dim m As Integer
    Dim Cell As Range
    Dim Plage As Range
     
     
    i = 2
     
    Set Plage = Sheets("unités").Range("C5:G12")
     
     For Each Cell In Plage
        If Not IsEmpty(Cell) Then
        If Not IsEmpty(Range("B" & Cell.Row)) Then
                r = Cell.Row
                c = Cell.Column
                For m = 1 To 12
                'collage de la date
                Sheets("Feuil2").Range("A" & i).Value = "1/" & m & "/08"
                'collage du nom client
                Sheets("Feuil2").Range("B" & i).Value = Sheets("unités").Range("B" & r).Value
                'collage de la famille
                Sheets("Feuil2").Range("C" & i).Value = Sheets("unités").Cells(4, c).Value
                'collage de qté
                Sheets("Feuil2").Range("D" & i).Value = Sheets("unités").Cells(r, c).Value * Cells(87, m).Value
                i = i + 1
                Next m
            End If
        End If
      Next Cell
     
    End Sub

    merci

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    ok j'avais oublié que vba c'est pour les anglosaxon
    format de date en vba c'est mm/jj/aa

    merci pour votre aide !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA Word] Next sans for
    Par Dobyan08 dans le forum VBA Word
    Réponses: 6
    Dernier message: 20/10/2016, 10h57
  2. [XL-2007] Erreur de compilation : Next sans For
    Par benjamin_malaussene dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2014, 16h43
  3. Erreur de compilation Next sans For
    Par November-Oscar dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/11/2011, 20h01
  4. [XL-2007] Erreur "NEXT sans FOR"
    Par ESVBA dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/03/2011, 23h10
  5. [XL-2007] Erreur next sans for, Bizarre!
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/10/2009, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo