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 de boucle


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Par défaut Problème de boucle
    Bonjour à tous,

    Après quelques semaines d'absence me revoila à nouveau avec un problème sur les bras

    J'ai un problème de boucle : Je souhaite faire une action sur toutes les feuilles de mon classeur Excel sauf 2 feuilles bien précises (identifiables par leur nom fixe mais dont la position peut varier dans le classeur) sur lesquelles je souhaite faire une action différente.
    J'ai fais une macro qui est la suivante qui fonctionne bien si je ne déplace pas mes 2 feuilles en questions (feuilles en position 5 et 6 dans mon code).

    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
     
     
    Dim i As Byte, x As Byte
    x = Sheets.Count
     
    For i = 2 To 4
        Sheets(i).Select
     
        With ActiveSheet.Rows(7)
            Set c = .Find("Total")
            If Not c Is Nothing Then
                NoCol = c.Column
                Columns(NoCol - 1).Delete Shift:=xlToRight
                Columns(NoCol - 2).Delete Shift:=xlToRight
                DoEvents
            End If
     
        End With
     
    Next
     
    For i = 5 To 6
        Sheets(i).Select
     
        With ActiveSheet.Rows(7)
            Set c = .Find("Total")
            If Not c Is Nothing Then
                NoCol = c.Column
                Columns(NoCol - 1).Delete Shift:=xlToRight
                Columns(NoCol - 2).Delete Shift:=xlToRight
                Columns(NoCol - 3).Delete Shift:=xlToRight
                Columns(NoCol - 4).Delete Shift:=xlToRight
                DoEvents
            End If
     
        End With
     
    Next
    For i = 7 To x
        Sheets(i).Select
     
        With ActiveSheet.Rows(7)
            Set c = .Find("Total")
            If Not c Is Nothing Then
                NoCol = c.Column
                Columns(NoCol - 1).Delete Shift:=xlToRight
                Columns(NoCol - 2).Delete Shift:=xlToRight
                DoEvents
            End If
     
        End With
     
    Next
     
     
    End Sub
    En petite novice que je suis :

    1-Est-il possible de demander à ma boucle de faire les actions souhaitées sauf sur la feuille "détail monitoring" et la feuille détail "détail biométrie" en les appelant par leur nom? et si oui comment?

    2- Comment faire une autre boucle sur mes 2 feuilles "détail monitoring" et la feuille détail "détail biométrie" en les appelant par leur nom?

    Un grand merci d'avance pour vos réponses.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub selectif()
    Dim index As Variant
    For Each index In ActiveWorkbook.Sheets
    If index.Name = "Feuil1" Or index.Name = "Feuil2" Then
    index.Range("a1") = "oui"
    Else
    index.Range("a1") = "non"
    End If
    Next index
    End Sub

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Par défaut
    salut Random,

    Exuse ma question qui va surement te paraitre ridicule mais comment et ou dois-je insérer ton code dans le mien?

  4. #4
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Par défaut
    Random,
    Je crois avoir compris ton code, et adapté le mien.

    Mais ça marche pas! (cela veut surement dire que j'ai pas tout compris)
    Ma macro ne supprime pas les colonnes situées avant ma colonne total mais la colonne total elle-même. Je comprends pas surtout que j'ai pas modifié ce bout de 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
     
     
    Sub supprimerblocannée()
     
     
    Dim i As Byte, x As Byte
    x = Sheets.Count
     
    For i = 1 To x
        Sheets(i).Select
        Dim index As Variant
     
        For Each index In ActiveWorkbook.Sheets
        If index.Name = "Détail Monitoring" Or index.Name = "Détail Biométrie" Then
            With index.Rows(7)
            Set c = .Find("Total")
                If Not c Is Nothing Then
                NoCol = c.Column
                Columns(NoCol - 1).Delete Shift:=xlToRight
                Columns(NoCol - 2).Delete Shift:=xlToRight
                Columns(NoCol - 3).Delete Shift:=xlToRight
                Columns(NoCol - 4).Delete Shift:=xlToRight
                DoEvents
                End If
            End With
        Else
            With index.Rows(7)
            Set c = .Find("Total")
                If Not c Is Nothing Then
     
                NoCol = c.Column
                Columns(NoCol - 1).Delete Shift:=xlToRight
                Columns(NoCol - 2).Delete Shift:=xlToRight
                DoEvents
     
                End If
            End With
        End If
    Next index
    Next
    End Sub
    Tu vois d'ou peut venir le problème?

    Merci d'avance pour ton aide

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    SAlut
    Voila l'adaptation a ton besoin, je remqrque que le traitement et le meme pour les sheets de 2à4 et de 7à .... si c'est le cas laisse la partie de code en commentaire, en commentaire

    Si par contre tu active la partie de code qui est en commentaire tu poura gerer une action pour les sheets de 2à4, une action diferentes pour les sheets de 5à6, et encore une autre pour les sheets de 7à...

    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
    Dim index As Sheets
    For Each index In ActiveWorkbook.Sheets
    'ici tu met les noms des sheet qui corresponde a sheet(2) sheet(3) sheet(4)
        'If index.Name = "Feuil2" Or index.Name = "Feuil3" Or index.Name = "Feuil4" Then
            'With ActiveSheet.Rows(7)
                'Set c = .Find("Total")
                'If Not c Is Nothing Then
                    'NoCol = c.Column
                    'Columns(NoCol - 1).Delete Shift:=xlToRight
                    'Columns(NoCol - 2).Delete Shift:=xlToRight
                    'DoEvents
                'End If
            'End With
    'ici tu met les noms des sheet qui corresponde a sheet(2) sheet(3) sheet(4)
        'ElseIf index.Name = "Feuil5" Or index.Name = "Feuil6" Then 'Si tu active la code ci-dessus desactive la ligne suivante
        If index.Name = "Feuil5" Or index.Name = "Feuil6" Then
            With ActiveSheet.Rows(7)
                Set c = .Find("Total")
                If Not c Is Nothing Then
                    NoCol = c.Column
                    Columns(NoCol - 1).Delete Shift:=xlToRight
                    Columns(NoCol - 2).Delete Shift:=xlToRight
                    Columns(NoCol - 3).Delete Shift:=xlToRight
                    Columns(NoCol - 4).Delete Shift:=xlToRight
                    DoEvents
                End If
     
            End With
        Else 'pour toute les autres sheets restantes
            With ActiveSheet.Rows(7)
                Set c = .Find("Total")
                If Not c Is Nothing Then
                    NoCol = c.Column
                    Columns(NoCol - 1).Delete Shift:=xlToRight
                    Columns(NoCol - 2).Delete Shift:=xlToRight
                    DoEvents
                End If
            End With
        End If
    Next index
     
     
    End Sub
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Par défaut
    salut à tous,

    Merci pour ton aide Qwazerty mais cela ne fonctionne pas. La macro s'exécute seulement sur la feuille active. en plus au lieu de me supprimer 2 ou 4 colonnes la macro supprime toutes les colonnes.

    C'est la crise!!!!! sais plus quoi faire. D'autres suggestions?

    Merci par avance.

  7. #7
    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 : 51
    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
    Je n'ai repris tout ton code (je suis un peu faineant ce soir)

    mais l'idée est la.
    on boucle sur chaque feuille du classeur et on test son nom avec un select case


    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
     
    Dim sh As Worksheet
     
    For Each sh In ThisWorkbook.Worksheets
     
        Select Case sh.Name
     
            Case "détail monitoring", "détail biométrie"
     
                'Action
     
            Case "Autres Feuille"
     
                'Action
     
            Case Else
     
                'Action
     
     
        End Select
     
    Next

  8. #8
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    SAlut
    Bon j'avais mis ca vite fait avant de partir en stage, y'a une petite erreur dedans (j'espere juste une) que tu aurais pu je pense corriger, j'espere que tu n'es pas resté bloqué par ca ...
    Il suffit de changer ActiveSheet par Index dans les 2 blocs with

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39
  3. Problème de boucle
    Par TheUltimaSephiroth dans le forum C
    Réponses: 8
    Dernier message: 10/10/2005, 13h58
  4. Problème de boucle
    Par Louis-Guillaume Morand dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2005, 09h10
  5. Problème de boucle
    Par basclln dans le forum C++
    Réponses: 19
    Dernier message: 02/04/2005, 09h13

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