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 :

Exécuter macro à toutes les feuilles à l'ouverture


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Par défaut Exécuter macro à toutes les feuilles à l'ouverture
    Bonjour à tous,

    Sujet maintes et maintes fois discuté je sais, ça fait deux jours que je fais des recherches et des tests mais je n'ai toujours pas réussi. Je veux qu'à l'ouverture de mon fichier excel "Liste des entrepreneurs.xls" ma macro s'exécute pour les 25-35 feuilles du classeur. Je veux supprimer les lignes où la date en colonne F est plus vieille qu'un an.

    Cette macro fonctionne parfaitement si j'y vais feuille par feuille :

    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
    Private Sub Worksheet_Activate()
     
    Dim refdate
    Dim i, imax
     
        refdate = Now()
        imax = Range("F65536").End(xlUp).Row
     
        For i = 5 To imax + 1
            If (refdate - (Range("F" & i).Value) > 365) And (Range("F" & i).Value <> "") Then
                Range("F" & i).EntireRow.Delete
                i = i - 1
                Else: Exit Sub
            End If
        Next i
     
    End Sub
     
     
    Mais cette macro placée dans Thisworkbook ne fonctionne pas et je ne comprend pas pourquoi :
     
    Private Sub Workbook_Open()
     
    Dim sht As Worksheet
    Dim refdate
    Dim i, imax
     
        refdate = Now()
        imax = Range("F65536").End(xlUp).Row
     
         For Each sht In Worksheets
      Debug.Print sht.Name
     
        For i = 5 To imax + 1
            If (refdate - (Range("F" & i).Value) > 365) And (Range("F" & i).Value <> "") Then
                Range("F" & i).EntireRow.Delete
                i = i - 1
                Else: Exit Sub
            End If
        Next i
    Next
     
    End Sub
    Est-ce que quelqu'un peut m'aider?

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    préfixe TOUT tes Range de ton objet Sht qui représente la feuille sur laquelle tu travailles, sinon tu vas travailler sur la feuille active à chaque tour de boucle

  3. #3
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Par défaut
    Merci pour la réponse rapide. Étant plutôt newbie en VBA tu veux dire par là exemple "sht.Range("F.................." ?
    Si c'est ça j'ai essayé et ça ne fonctionne pas plus... si c'est pas ça évidemment que ça ne peut pas plus marcher hehe

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Tonyown Voir le message
    Mais cette macro placée dans Thisworkbook ne fonctionne pas et je ne comprend pas pourquoi :
    Citation Envoyé par Tonyown Voir le message
    Si c'est ça j'ai essayé et ça ne fonctionne pas plus...
    Quand la description d'un problème se limite simplement à "ça ne fonctionne pas", il est difficile de comprendre l'origine d'un problème et d'y proposer une solution.
    Ne pourrais-tu pas être plus explicite ?

  5. #5
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Par défaut
    D'accord, j'ai essayé de bien adresser mon code comme anasecu m'a suggéré. Ce code ne fonctionne toujours pas... Qu'est-ce qui ne fonctionne pas? Bien simplement les date de 2016 ne s'effacent pas dans les 25-35 feuilles quand j'ouvre le document excel. Il n'y a pas d'erreur de code rapporté

    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
    Private Sub Workbook_Open()
     
    Dim sht As Worksheet
    Dim i As Long, imax As Long
    Dim refdate 
     
            refdate = Now()
    For Each sht In Worksheets
        With sht
     
            imax = .Cells(.Rows.Count, "F").End(xlUp).Row
            For i = 5 To imax + 1
                If refdate - .Range("F" & i).Value > 365 And .Range("F" & i).Value <> "" Then
                .Rows(i).Delete
                i = i - 1
                Else: Exit Sub
                End If
            Next i
        End With
    Next sht
    End Sub

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Déjà, ton Exit Sub semble étrange : ça veut dire que dès que dans n'importe quelle feuille, la condition n'est pas vérifiée, tu arrêtes toute la procédure ?

    Pour savoir ce qu'il se passe exactement, fais fonctionner en pas-à-pas ou mets quelques Debug.Print pour suivre l'évolution.
    Par exemple

    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
    Private Sub Workbook_Open()
     
    Dim sht As Worksheet
    Dim i As Long, imax As Long
    Dim refdate 
     
    refdate = Now()
    For Each sht In Worksheets
        Debug.Print "Feuille : " & sht.Name
        With sht
            imax = .Cells(.Rows.Count, "F").End(xlUp).Row
            Debug.Print ">>>> Ligne " & i & " : Résultat " & (refdate - .Range("F" & i).Value > 365 And .Range("F" & i).Value <> "")
            For i = 5 To imax + 1
                If refdate - .Range("F" & i).Value > 365 And .Range("F" & i).Value <> "" Then
                    .Rows(i).Delete
                    i = i - 1
                Else: Exit Sub
                End If
            Next i
        End With
    Next sht
    End Sub
    Autre détail : quand on supprime des lignes, il faut aller de la dernière à la première (Step -1), sinon tu loupes une ligne après chaque Delete.

  7. #7
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par Tonyown Voir le message
    Mais cette macro placée dans Thisworkbook ne fonctionne pas et je ne comprend pas pourquoi
    Il faut adresser la feuille que tu traites, comme ceci par exemple
    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
    Private Sub Workbook_Open()
     
    Dim sht As Worksheet
    Dim i As Long, imax As Long
     
    For Each sht In Worksheets
     '   Debug.Print sht.Name
        With sht
            imax = .Cells(.Rows.Count, "F").End(xlUp).Row
            For i = 5 To imax + 1
                If Date - .Range("F" & i).Value > 365 And .Range("F" & i).Value <> "" Then
                .Rows(i).Delete
                i = i - 1
                Else: Exit Sub
                End If
            Next i
        End With
    Next sht
    End Sub

  8. #8
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Par défaut
    J'ai essayé ceci, ne fonctionne pas encore

    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
    Private Sub Workbook_Open()
     
    Dim sht As Worksheet
    Dim refdate
    Dim i, imax
     
    refdate = Now()
    imax = Range("F65536").End(xlUp).Row
     
    For Each sht In Worksheets
     
    With sht
     
    For i = 5 To imax + 1
    If (refdate - (Range("F" & i).Value) > 365) And (Range("F" & i).Value <> "") Then
    Range("F" & i).EntireRow.Delete
    i = i - 1
    Else: Exit Sub
     
    End If
     
    Next i
     
    End With
     
    Next sht
     
    End Sub

  9. #9
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Regardes l'ordre et la syntaxe que je t'ai mise au-dessus : il faut utiliser le 'with' correctement.

    Il serait aussi souhaitable que tu mettes les balises à ton code.

  10. #10
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Par défaut
    Citation Envoyé par anasecu Voir le message
    Regardes l'ordre et la syntaxe que je t'ai mise au-dessus : il faut utiliser le 'with' correctement.

    Il serait aussi souhaitable que tu mettes les balises à ton code.
    Ça?

    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
    Private Sub Workbook_Open()
     
    Dim sht As Worksheet
    Dim refdate
    Dim i, imax
     
    refdate = Now()
    imax = Range("F65536").End(xlUp).Row
     
    For Each sht In Worksheets
     
    With sht
     
    imax = Cells(Rows.Count, "F").End(xlUp).Row
    For i = 5 To imax + 1
    If (refdate - (Range("F" & i).Value) > 365) And (Range("F" & i).Value <> "") Then
    Range("F" & i).EntireRow.Delete
    i = i - 1
    Else: Exit Sub
     
    End If
     
    Next i
     
    End With
     
    Next sht
     
    End Sub

  11. #11
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Citation Envoyé par Tonyown Voir le message
    Ça?
    Oui mais ton code ne peut pas fonctionner, regardes celui que je t'ai mis : ordre et syntaxe.

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

Discussions similaires

  1. Macro excel pour toutes les feuilles du classeur
    Par duffie34 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 28/03/2013, 12h55
  2. [XL-2003] macro impossible sur toutes les feuilles
    Par alucard_xs dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 04/06/2012, 22h23
  3. [XL-2003] Macro ou VB pour toutes les feuilles
    Par jeanphi45 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2011, 10h53
  4. MACRO - Copier une feuille dans toutes les feuilles (sauf 2)
    Par macto dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/02/2011, 08h53
  5. Exécuter une macro toutes les 3 secondes
    Par lucazzo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2008, 09h42

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