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 :

Erreur next sans for, Bizarre! [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut Erreur next sans for, Bizarre!
    Bonjour,
    j'essaye de créer un code me permettant de compter le nombre de fois que j'ai la valeur Nv dans une série de plage nommée par exemple "Réf1", "Réf 2" etc....:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub NombreNv()
    Dim i As Long
    Dim Vvaleur As Long
    Dim Vrésultat As Long
     
    For i = 2 To 13
    If Range("Réf" & i) = "Nv" Then
    Vvaleur = Range("Réf" & i).Count
     
    Next i
     
    Sheets("Rapport analyse").[L9] = Vvaleur
     
    End Sub
    Mais j'ai une "erreur de compilation: next sans for". j'ai pourtant bien le next et le for je comprend pas!

    Pouvez-vous m'aider, merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Les messages sont des fois un peu bizarre.

    En fait c'est le End If qui manque, à mettre avant le Next I.

    Philippe

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut rvtoulon et le forum
    Le message est normal : Dans le segment If...End If, on rencontre un Next, mais pas de For! Excel n'a pas une "vision globale" du code.
    Par compte, ton code me laisse perplexe : qu'est-ce qu'il est censé faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub NombreNv()
    Dim i As Long
    Dim Vvaleur As Long
    Dim Vrésultat As Long
     
    For i = 2 To 13
         If Range("Réf" & i) = "Nv" Then Vvaleur = Range("Réf" & i).Count
    Next i
     
    Sheets("Rapport analyse").[L9] = Vvaleur
     
    End Sub
    Pour I allant de 2 à 13
    si la cellule nommée "Réf" & i (Réf2, Réf3, ..., Réf13) = "Nv" alors
    Vvaleur=1
    (Range("Réf" & i).Count =Range("Réf" & i).Cells.Count = nombre de cellules dans le range "Réf" & i. D'après le titre, je mettrais plutôt :
    Vvaleur = Vvaleur + 1)
    Mettre Vvaleur en L9 de la feuille "Rapport analyse"

    Si ce n'est que ça, je créerai une Function, avec une instruction ".Volatile", pour que la mise à jour soit automatique.
    A+

  4. #4
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    re,
    merci Philippe JOCHMANS en effet avec End If c mieux .
    Gorfael tu as raison en fait ce que je veux faire c compter le nombre de fois que je rencontre la valeur "Nv" dans les plages Réf2, ...,Réf 13
    et placer cette valeur dans la feuille "Rapport analyse" en [L9].
    donc ce serait quelques choses dans ce genre: (tout à l'heure c'était un début de code depuis je pense avoir un peu avancé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub NombreNv()
    Dim i As Long
    Dim Vvaleur As Long
     
    For i = 2 To 13
    If Range("Réf" & i) = "Nv" Then
    Vvaleur = Range("Réf" & i).Count
    End If
    Sheets("Rapport analyse").[L9] = Vvaleur+1
     
    Next i
     
    End Sub
    Toutefois j'ai maintenant une nouvelle Erreur 'Erreur d'éxécution 13: Incompatibilité de Type à cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Range("Réf" & i) = "Nv" Then
    .
    Pourtant ces plages nommées existent et apparaissent dans le gestionnaire de noms !

    Tu parlais de Function Pourrais tu m'en dire plus je n'en ai jamais réalisé.
    merci

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    D'abord, une petit simplification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub NombreNv()
    Dim i As Byte
    Dim Vvaleur As Long
     
    For i = 2 To 13
       If InStr(CStr(Range("Réf" & i).Value), "Nv") > 0 Then Vvaleur = Vvaleur + 1
    Next i
    Sheets("Rapport analyse").[L9] = Vvaleur
    End Sub

  6. #6
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Re à tous,
    J'ai résolu mon problème en rajoutant une boucle For Each. Ce Code fonctionne Trés bien le voici :
    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
    Sub NombreNv()
    Dim i As Long
    Dim Vvaleur As Long, Vrésultat As Long
    Dim c As Object
     
    For i = 2 To 13
    For Each c In Range("Réf" & i)
    If c.Value = "Nv" Then
    Vvaleur = c.Count
    Vrésultat = Vrésultat + Vvaleur
    End If
    Next
    Next i
    Sheets("Rapport analyse").[L9] = Vrésultat
    End Sub
    Mercatog merci pour ce code mais il me génère une Erreur:
    'Erreur d'éxécution 13: Incompatibilité de Type' à cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(CStr(Range("Réf" & i).Value), "Nv") > 0 Then
    Je ne connais pas ces instructions InStr Et CStr! je vais chercher pour savoir à quoi elle corresponde.
    Gorfael a dit:
    Si ce n'est que ça, je créerai une Function, avec une instruction ".Volatile", pour que la mise à jour soit automatique.
    J'aimerais apprendre à faire cela, pouvez-vous m'aider? je vais faire des recherches sur ce sujets. Merci

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je prenais Range("Réf" & i) comme une seule cellule, dans la même logique, en réadaptant ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub NombreNv()
    Dim i As Byte
    Dim Vvaleur As Long
    Dim c As Range
     
    For i = 2 To 13
        For Each c In Range("Réf" & i)
            If InStr(CStr(c.Value), "Nv") > 0 Then Vvaleur = Vvaleur + 1
        Next c
    Next i
    Sheets("Rapport analyse").[L9] = Vvaleur
    End Sub
    c maintenant une seule cellule
    Cstr permet de transformer le contenu en text
    Instr permet de donner la position de "Nv" dans Cstr(c.value)
    --> donne 0 si "Nv" n'existe pas dans Cstr(c.value)

    Dans un module public, tu déclare cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function Compter() As Long
    Dim i As Byte
    Dim c As Range
     
    Application.Volatile
    Compter = 0
    For i = 2 To 13
        For Each c In Sheets("TaFeuille").Range("Réf" & i)
            If c.Value = "Nv" Then Compter = Compter + 1  'Comme tu faisais
        Next c
    Next i
    End Function
    dans ta cellule L9 de ta feuille "Rapport analyse" tu mets =Compter()

+ 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. j'ai une erreur Next sans For
    Par Caps corp dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 22/08/2008, 14h10

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