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 :

Problème avec next


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut Problème avec next
    Bonjour,

    J'ai une macro qui ouvre un fichier excel dans lequel il y a 5 onglets (Lundi à Vendredi) dans ces onglets il peut y avoir des informations. Si la cellule A10 de l'onglet est vide alors on passe au suivant sinon on copie toutes les lignes allant de A10 jusqu'à A30 pour lesquelles Ai est non vide.

    Bon j'ai fait ce code mais il plante sur le 1er next onglet
    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
    Sub Importer_les_données()
     
    Dim onglet As Worksheet
     
     
    For Each onglet In Application.ActiveWorkbook.Worksheets
     
    dossier = "C:\Bordereau de visites"
     
     
    Sheets("Recherche").Select
     
    date_visite = Range("E14")
    Rep = Range("L1")
    representant = Range("E1")
    semaine_annee = "S" & Range("F1") & "_" & Range("G1")
     
    monfichier = Dir(dossier & "\Bordereau_" & Rep & "_" & semaine_annee & ".xls")
    fichier = (dossier & "\Bordereau_" & Rep & "_" & semaine_annee & ".xls")
     
     
     
    Workbooks.OpenText Filename:=fichier
     
    For i = 10 To 30
       If IsEmpty(Range("A10")) Then
            Next onglet
     
       Else
     
       Range("A10").Select
            ActiveCell.Offset(rowOffset:=0, columnOffset:=10).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlDown)).Select
     
            Selection.Copy
     
     
            Windows("Recherche_Bordereaux.xls").Activate
            Sheets("Bordereau de visites").Select
            ActiveSheet.Paste
     
            Copie_Date
       End If
     
    Next i
    Next onglet
     
     
     
     
    End Sub
    Qq1 peut-il m'aider ?

    Merci par avance

    Nini

  2. #2
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    bonjour

    à essayer : seulement une partie de ton code en retour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 10 To 30
       If IsEmpty(Range("A10")) Then
            Exit for
       
       Else
    j'ai un doute sur : IsEmpty(Range("A10")), je verrai plutot IsEmpty(onglet.Range("A10"))

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut
    Merci Wilfried ca marche pour le "exit for"

    par contre, je ne comprend pas car une fois qu'il a fait le 1er onglet, il ne passe pas au second ???

    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
    Sub Importer_les_données()
     
    Dim onglet As Worksheet
     
     
     
    dossier = "C:\Bordereau de visites"
     
     
    Sheets("Recherche").Select
     
    date_visite = Range("E14")
    Rep = Range("L1")
    representant = Range("E1")
    semaine_annee = "S" & Range("F1") & "_" & Range("G1")
     
    monfichier = Dir(dossier & "\Bordereau_" & Rep & "_" & semaine_annee & ".xls")
    fichier = (dossier & "\Bordereau_" & Rep & "_" & semaine_annee & ".xls")
     
     
     
    Workbooks.OpenText Filename:=fichier
     
    For Each onglet In Application.ActiveWorkbook.Worksheets
       If IsEmpty(Range("A10")) Then
            Exit For
     
       Else
     
       Range("A10").Select
            ActiveCell.Offset(rowOffset:=0, columnOffset:=10).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlDown)).Select
     
            Selection.Copy
     
     
            Windows("Recherche_Bordereaux.xls").Activate
            Sheets("Bordereau de visites").Select
            ActiveSheet.Paste
     
            Copie_Date
       End If
     
    Workbooks.OpenText Filename:=fichier
     
    Next onglet
     
     
     
     
    End Sub
    A noter que la fonction copie_date est la suivante :
    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
    Sub Copie_Date()
     
    'copie la date du bordereau de visites
    dossier = "C:\Bordereau de visites"
     
     
    Sheets("Recherche").Select
     
    date_visite = Range("E14")
    Rep = Range("L1")
    representant = Range("E1")
    semaine_annee = "S" & Range("F1") & "_" & Range("G1")
     
    monfichier = Dir(dossier & "\Bordereau_" & Rep & "_" & semaine_annee & ".xls")
    fichier = (dossier & "\Bordereau_" & Rep & "_" & semaine_annee & ".xls")
     
        Workbooks.OpenText Filename:=fichier
        Range("G5").Copy
     
        Windows("Recherche_Bordereaux.xls").Activate
        Sheets("Bordereau de visites").Select
     
        Range("C8").Select
        Selection.End(xlDown).Select
        ActiveCell.Offset(0, -1).Select
        ActiveSheet.Paste
        Selection.End(xlUp).Select
        ActiveCell.Offset(1, 0).Select
        valeur = ActiveCell.Value
     
        If IsEmpty(valeur) Then
            ActiveSheet.Paste
            Range(Selection, Selection.End(xlDown)).Select
            ActiveSheet.Paste
        Else
        End If
     
     
     
    End Sub
    My name is Mac Bidouille, Mac Bidouille

  4. #4
    Membre expérimenté
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Par défaut Next
    Au niveau syntaxe , on ne peut pas avoir 2 next sur la même boucle FOR.

    Dans ton exemple , tu dois implémenter comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    For Each onglet In Application.ActiveWorkbook.Worksheets
       If IsEmpty(Range("A10")) Then
            'on ne fait rien  , il n'y a pas besoin du next   
       Else   '
         'on fait notre traitement 
     
    end if
    next

  5. #5
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    tu changes ton code et tu dis que ca ne marche pas, elle est devenue quoi la boucle for i ----> next i

    tu utilises plein de select sur les cellule mais tu ne sélectionnes aucun onglet, ce qui veut dire que tu ne travailles que sur une feuille

    je ne comprends pas ce que tu cherches à faire avec ta macro

    mais sans la boucle For i ----Next i, le exit for ne peut plus fonctionner .... il faut prendre la solution de code facile

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut
    Ok voici les réponses :
    tu changes ton code et tu dis que ca ne marche pas
    => marche pas, c'est à dire qu'une fois le 1er onglet fait lorsqu'il pas sur Next onglet il ne se passe rien et le code continue sur End sub



    elle est devenue quoi la boucle for i ----> next i
    => je l'ai supprimée car je pense qu'elle ne me servait du fait de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Range("A10").Select
            ActiveCell.Offset(rowOffset:=0, columnOffset:=10).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlDown)).Select



    tu utilises plein de select sur les cellule mais tu ne sélectionnes aucun onglet, ce qui veut dire que tu ne travailles que sur une feuille
    => je travaille la feuille et ensuite je veux faire la même chose sur l'onglet suivant (Lundi, mardi, ... et enfin Vendredi)
    Par ailleurs, c'est paour cela que si A10 est vide alors il faut passer à l'onglet suivant car cela signifie qu'il n'y pas de données sur l'onglet





    je ne comprends pas ce que tu cherches à faire avec ta macro
    => les valeurs de l'onglet lundi (si elles existent) doivent être copiées dans une autre fichier excel, idem pour les onglets mardi, mercredi, jeudi et vendredi





    mais sans la boucle For i ----Next i, le exit for ne peut plus fonctionner ....
    => A bon mais je croyais qu'il était destiné à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each onglet In Application.ActiveWorkbook.Worksheets

  7. #7
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    exit veut dire sortir, Exit for veut dire sortir de la boucle for next ce qu'il faisait quand il y avait la boucle for i --> Next i, il sortait de cette boucle pour continuer la boucle for each onglet. mais une fois la boucle for i retirée, il sort de la boucle for next

    donc en fonction de ce que j'ai compris, en reprenant le code de CodeFacile, il te manque la selection de l'onglet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each onglet In Application.ActiveWorkbook.Worksheets
       onglet.select
       If IsEmpty(Range("A10")) Then
            'on ne fait rien  , il n'y a pas besoin du next   
       Else   '
         'on fait notre traitement 
     
    end if
    next

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut
    Malheureuse lorsque le code passe sur le next (ou next onglet), il passe sans rien faire.
    En fait, je ne change pas d'onglet ???

    voici le code :
    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
    Sub Importer_les_données()
     
    Dim onglet As Worksheet
     
     
    'For Each onglet In Application.ActiveWorkbook.Worksheets
     
    dossier = "C:\Bordereau de visites"
     
     
    Sheets("Recherche").Select
     
    date_visite = Range("E14")
    Rep = Range("L1")
    representant = Range("E1")
    semaine_annee = "S" & Range("F1") & "_" & Range("G1")
     
    monfichier = Dir(dossier & "\Bordereau_" & Rep & "_" & semaine_annee & ".xls")
    fichier = (dossier & "\Bordereau_" & Rep & "_" & semaine_annee & ".xls")
     
     
     
    Workbooks.OpenText Filename:=fichier
     
    For Each onglet In Application.ActiveWorkbook.Worksheets
    'For i = 10 To 30
    onglet.Select
       If IsEmpty(Range("A10")) Then
     
     
       Else
     
       Range("A10").Select
            ActiveCell.Offset(rowOffset:=0, columnOffset:=10).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlToLeft)).Select
            Range(Selection, Selection.End(xlDown)).Select
     
            Selection.Copy
     
     
            Windows("Recherche_Bordereaux.xls").Activate
            Sheets("Bordereau de visites").Select
            'mettre une fonction pour aller à la dernière ligne
            ActiveSheet.Paste
     
            Copie_Date
       End If
     
    Workbooks.OpenText Filename:=fichier
    'Next i
    Next 'onglet
     
     
     
     
    End Sub

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

Discussions similaires

  1. problème avec la méthode find et find next
    Par Sylvie66 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2015, 17h33
  2. Problème avec un resultatsSet.next()
    Par NFHnv dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 27/07/2013, 16h46
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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