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 :

boucle onglets mensuels [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 188
    Par défaut boucle onglets mensuels
    bonjour,
    mon fichier excel contient 20 onglets dont 12 correspondent aux mois de l'année "JANVIER", "FEVRIER" jusqu'à "DECEMBRE" et j'aimerais ne travailler que sur ces 12 onglets-ci

    et effectuer le même traitement pour chacun de ces 12 onglets

    voici un bout de code qui traite le mois de janvier et tend à la fin vers le mois de février

    comment boucler pour traiter ces 12 onglets sans réécrire 12 fois le code en chageant à chaque fois donc le nom de l'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
    Private Sub GenMens_Click()
     
    Dim DerLigne As Long, j As Long
    Dim DerCol As Integer, i As Integer
    Dim Flag As Boolean
    Dim val As String
     
    Sheets("JANVIER").Activate
    With Sheets("JANVIER")
        DerLigne = .Cells(.Rows.Count, "AH").End(xlUp).Row
        DerCol = .Cells(9, .Columns.Count).End(xlToLeft).Column
        .Range(.Cells(8, 2), .Cells(DerLigne, DerCol)).Interior.ColorIndex = xlNone
        j = 8
        Do
            For i = 2 To DerCol
                If .Cells(j, i).Value <> "" Then
                    If Not Flag Then
                        Select Case Weekday(.Cells(j, i).Value, vbMonday)
                            Case 6: .Range(.Cells(j, i), .Cells(j + 39, i)).Interior.ColorIndex = 27
                            Case 7: .Range(.Cells(j, i), .Cells(j + 39, i)).Interior.ColorIndex = 35
                        End Select
                        Set c = Sheets("BDD").Range("AI37:AI47").Find(CDate(Sheets("JANVIER").Cells(j, i).Value), LookIn:=xlValues, lookat:=xlWhole)
                        If Not c Is Nothing Then
                            Set c = Nothing
                            .Range(.Cells(j, i), .Cells(j + 39, i)).Interior.ColorIndex = 28
                        End If
                    End If
                End If
            Next i
            j = j + 2
            If Flag Then GoTo fev
            Flag = Not Flag
        Loop Until j >= DerLigne
    End With
    fev:
    i = 2
    Flag = Not Flag
    Sheets("FEVRIER").Activate
    With Sheets("FEVRIER")
     
    end sub

    pour le passage au mois de février
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     If Flag Then GoTo fev
            Flag = Not Flag
        Loop Until j >= DerLigne
    End With
    fev:
    i = 2
    Flag = Not Flag
    Sheets("FEVRIER").Activate
    With Sheets("FEVRIER")
    merci par avance

  2. #2
    Membre confirmé Avatar de doncamelo
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Décembre 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2007
    Messages : 129
    Par défaut
    Bonsoir novice06,

    Voici un code qui te permet de parcourir l'ensemble des onglets de ton classeur, puis fait des modifs sur les noms d'onglets du tableau :

    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
    Option Base 1
    Sub test()
        Dim LesMois() As Variant
        Dim cpt As Byte
     
        LesMois = Array("JANVIER", "FEVRIER", "MARS", "AVRIL")
     
        For i = 1 To Worksheets.Count
            For cpt = LBound(LesMois) To UBound(LesMois)
                If Worksheets(i).Name = LesMois(cpt) Then
                    Worksheets(i).Range("A1") = "C'est gagné"
                End If
            Next cpt
        Next i
     
    End Sub
    Il te suffit de rajouter ta routine.

    En espérant que cela puisse t'aider

    Doncamelo.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu peux aussi utiliser la fonction MonthName
    MonthName(1, True), renvoie "Janv" et MonthName(1, False) "Janvier"
    Exemple dans une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim m As Integer
        On Error Resume Next
        For m = 1 To 12
          With Worksheets(MonthName(m, False))
     
          ' Le code ici
     
          End With
        Next m
        On Error GoTo 0
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 188
    Par défaut
    bonsoir,

    j'ai oublié de vous tenir au courant hier soir du code que j'ai finalement testé qui a fonctionné (qui se rapproche de vos réponses...)


    merci quoiqu'il en soit pour vos réponses

    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
    Private Sub GenMens_Click()
     
    Dim DerLigne As Long, j As Long
    Dim DerCol As Integer, i As Integer, k as integer
    Dim Flag As Boolean
    Dim val As String
    Dim mois as variant
     
    mois=array("JANVIER","FEVRIER","MARS","AVRIL","MAI","JUIN","JUILLET","AOUT","SEPTEMBRE","OCTOBRE","NOVEMBRE","DECEMBRE")
     
    for k=0 to 11
     
    With Sheets(mois(k))    
        DerLigne = .Cells(.Rows.Count, "AH").End(xlUp).Row
        DerCol = .Cells(9, .Columns.Count).End(xlToLeft).Column
        .Range(.Cells(8, 2), .Cells(DerLigne, DerCol)).Interior.ColorIndex = xlNone
        j = 8
        Do
            For i = 2 To DerCol
                If .Cells(j, i).Value <> "" Then
                    If Not Flag Then
                        Select Case Weekday(.Cells(j, i).Value, vbMonday)
                            Case 6: .Range(.Cells(j, i), .Cells(j + 39, i)).Interior.ColorIndex = 27
                            Case 7: .Range(.Cells(j, i), .Cells(j + 39, i)).Interior.ColorIndex = 35
                        End Select
                        Set c = Sheets("BDD").Range("AI37:AI47").Find(CDate(Sheets(mois(k)).Cells(j, i).Value), LookIn:=xlValues, lookat:=xlWhole)
                        If Not c Is Nothing Then
                            Set c = Nothing
                            .Range(.Cells(j, i), .Cells(j + 39, i)).Interior.ColorIndex = 28
                        End If
                    End If
                End If
            Next i
            j = j + 2
            If Flag Then GoTo suite
            Flag = Not Flag
        Loop Until j >= DerLigne
    End With
    suite:
    i = 2
    Flag = Not Flag
     
    next k 
    end sub
    bonne soirée

  5. #5
    Membre confirmé Avatar de doncamelo
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Décembre 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2007
    Messages : 129
    Par défaut
    Merci Corona,
    Je ne connaissais pas cette fonction. Je vais pouvoir améliorer quelques un de mes codes.
    Doncamelo.

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

Discussions similaires

  1. Création d'onglets à partir d'une boucle
    Par Vadorblanc dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/11/2010, 22h37
  2. Boucle while dans un onglet
    Par djobylly dans le forum LabVIEW
    Réponses: 3
    Dernier message: 21/06/2010, 10h46
  3. [XL-2003] Boucle sur onglets
    Par fanfan89 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/05/2010, 11h08
  4. Boucle + Copie d'onglets sur Excel
    Par Marien dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/09/2007, 16h58
  5. Boucle sur onglets
    Par gobi1 dans le forum Macros et VBA Excel
    Réponses: 34
    Dernier message: 25/09/2007, 16h24

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