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 :

Next sans For [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Par défaut Next sans For
    Bonjour à tous ou rebonjour suivant les correcteurs

    Je reviens avec un petit souci lié à mon incompétence,
    j'ai le code ci-dessous si je mets Next il me fait le message d'erreur Next sans For si je l'enlève, il me met For ans Next... il m'énerve un peu...
    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
    For lA = 24 To np - 1
        'Valeur des différents cas à chercher
     
            cas1 = "Blanc"
            cas2 = "xxxx0"
            cas3 = 0
     
            'Cherche la valeur dans la feuille P2, en colonne B
     
            Set Rcas1 = shD.Columns(1).Find(What:=cas1, LookAt:=xlPart)
            Set Rcas2 = shD.Columns(1).Find(What:=cas2, LookAt:=xlPart)
            Set Rcas3 = shD.Columns(1).Find(What:=cas3, LookAt:=xlPart)
     
        'Action à effectuer selon valeur
                If Not Rcas1 Is Nothing Then
           Range("U21:AG21").Copy Cells(lA, 1)
                If Not Rcas2 Is Nothing Then
           Range("U24:AG24").Copy Cells(lA, 1)
                If Not Rcas3 Is Nothing Then
           Range("U20:AG20").Copy Cells(lA, 1)
     
        End If
     Next lA

    Là je mets le code complet au cas où...

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    Sub Modifmercatog()
     
    Dim wbS As Workbook, wbModif As Workbook
    Dim shS As Worksheet, shM As Worksheet, shD As Worksheet
    Dim RModVal As String, N_Client As String, FichModif As String
    Dim RMod As Range, Rdp1 As String, Plag As Range, Rnp As Range
    Dim np As Integer, x As Integer, compt As Integer, lA As Integer
    Dim Rcas1 As Range, Rcas2 As Range, Rcas3 As Range
    Dim cas1 As String, cas2 As String, cas3 As integer
     
    Set wbS = Workbooks.Open("Z:\Gestion entreprise\VBA\Atest\CC2011T.xlsx")
    Set shS = wbS.Worksheets("Pilote1")
    shS.Activate
     
    On Error Resume Next
    Set RMod = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
    On Error GoTo 0
     
    If Not RMod Is Nothing Then
        RMod.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
        RModVal = RMod(1, 1).Value
        N_Client = shS.Cells(RMod.Row, 8).Value
        FichModif = RModVal & " " & N_Client & ".xls"
     
        'Ici fonction qui permet de vérifier si FichModif est ouvert dans la même instance Excel
     
        If Existe(FichModif) Then
            Set wbModif = Workbooks(FichModif)
            Set shM = wbModif.Worksheets("Devis")
            Set shD = ThisWorkbook.Worksheets("Devis")
     
           '---------------------------compter le nombre de ligne entre A23 et A(Pied de page)
     
           Set Plag = shM.Range("A24:A500")
     
     For Each Rnp In Plag
        If Rnp.Value = "Pieddepage" Then
        np = Rnp.Row
        x = np - 23
      End If
    Next
           '------------------------------------insérer les lignes dans shD
           If x > 33 Then
           For compt = 1 To x - 33
           shD.Protect userinterfaceonly:=True
           shD.Activate
            shD.Range(Cells(24, 1), Cells(24, 14)).Select
                Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
           Range("U22:AH22").Copy shD.Cells(24, 1)
     
        Next
        End If
     
        '-----------Copier entre la ligne 23 et la ligne np les cellules colonne A de shM
        shM.Activate
        shM.Range(Cells(24, 1), Cells(np - 1, 1)).Copy shD.Range("A24")
     
     
        '---------- Appeler les macros en fonctions des valeurs colonne A de shD
        shD.Activate
     
        'On balaye la colonne A de shD
     
     
    For lA = 24 To np - 1
        'Valeur des différents cas à chercher
     
            cas1 = "Blanc"
            cas2 = "xxxx0"
            cas3 = 0
     
            'Cherche la valeur dans la feuille P2, en colonne B
     
            Set Rcas1 = shD.Columns(1).Find(What:=cas1, LookAt:=xlPart)
            Set Rcas2 = shD.Columns(1).Find(What:=cas2, LookAt:=xlPart)
            Set Rcas3 = shD.Columns(1).Find(What:=cas3, LookAt:=xlPart)
     
        'Action à effectuer selon valeur
                If Not Rcas1 Is Nothing Then
           Range("U21:AG21").Copy Cells(lA, 1)
                If Not Rcas2 Is Nothing Then
           Range("U24:AG24").Copy Cells(lA, 1)
                If Not Rcas3 Is Nothing Then
           Range("U20:AG20").Copy Cells(lA, 1)
     
        End If
     Next lA
     
     
     
     
     
        '-----------Copier entre la ligne 23 et la ligne np la plage de cellules colonne C à G
     
        '  copier shM dans la nouvelle sauvegarde, et dans le cas d'une modification de devis copier en rouge l'adresse
        '  de shM dans les classeurs d'archivage pour que les doublons soit supprimés par la suite.
     
            Set wbModif = Nothing
            Set shM = Nothing
            Set shD = Nothing
        End If
    End If
     
    Set RMod = Nothing
    Set shS = Nothing
    wbS.Close False
    Set wbS = Nothing
    End Sub
     
    Private Function Existe(ByVal Fich As String) As Boolean
    Dim Wb As Workbook
     
    For Each Wb In Application.Workbooks
        If Wb.Name = Fich Then
            Existe = True
            Exit For
        End If
    Next Wb
    End Function
    Merci aux courageux.

  2. #2
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,
    Le problème vient des If qui ne sont pas fermés. Comme ça, ça devrait aller mieux :
    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
    For lA = 24 To np - 1
        'Valeur des différents cas à chercher
     
            cas1 = "Blanc"
            cas2 = "xxxx0"
            cas3 = 0
     
            'Cherche la valeur dans la feuille P2, en colonne B
     
            Set Rcas1 = shD.Columns(1).Find(What:=cas1, LookAt:=xlPart)
            Set Rcas2 = shD.Columns(1).Find(What:=cas2, LookAt:=xlPart)
            Set Rcas3 = shD.Columns(1).Find(What:=cas3, LookAt:=xlPart)
     
        'Action à effectuer selon valeur
                If Not Rcas1 Is Nothing Then
                    Range("U21:AG21").Copy Cells(lA, 1)
                End If
                If Not Rcas2 Is Nothing Then
                    Range("U24:AG24").Copy Cells(lA, 1)
                End If
                If Not Rcas3 Is Nothing Then
                    Range("U20:AG20").Copy Cells(lA, 1)
                End If
     
     Next lA

  3. #3
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    En cmplément, quand tu structure ton code avec des tabulations, essais de faire correspondre les différents blocs

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Par défaut ok
    Merci tedo01, et d'accord jfontaine je ferai un effort.

  5. #5
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    C'est surtout pour toi, en respectant les blocs, il est bien plus simple de voir ce genre d'erreur

+ 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. [VBA Outlook]Next sans for
    Par *.Har(d)t dans le forum VBA Outlook
    Réponses: 5
    Dernier message: 06/03/2009, 12h22
  3. 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
  4. Next sans For. Et pourtant, il y est !
    Par Bubale dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/05/2008, 14h57
  5. Next sans For..alors qu'il y est !
    Par Bubale dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/04/2008, 22h45

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