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 :

Rechercher / Remplacer sur tous les feuilles d'un classeur - blocage sur les onglets graphiques


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Par défaut Rechercher / Remplacer sur tous les feuilles d'un classeur - blocage sur les onglets graphiques
    Bonjour,

    Comme de nombreux utilisateurs, j'ai été confronté au non fonctionnement d'un rechercher/remplacer sur toutes les feuilles d'un classeur quand on code en VBA.

    Cela fonctionne bien quand on le fait en direct : on a bien un remplacement sur toutes les feuilles.

    Mais dès qu'on le programme en VBA, le rechercher/remplacer ne fonctionne que sur la feuille active.

    Ce problème est identifié sur plusieurs version Excel et le code "For Each Wsh In Worksheets" ne fonctionne pas.

    Une façon de contourner le problème est de mettre un compteur et de faire l'opération en routine sur toutes les feuilles comme dans l'exemple ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub nouveaux_tarifs_2019()
        Dim k As Integer, i As Integer
        Workbooks.Open Filename:="C:\Users\" & VBA.Environ("USERNAME") & "\Desktop\azerty.xlsx"
        k = Sheets.Count
        For i = 1 To k
        Sheets(i).Activate
        Cells.Replace What:="3.43", Replacement:="3.23"
        Next i
    End Sub
    Le seul souci, c'est quand la routine tombe sur une feuille graphique, elle s'arrête...
    Si quelqu'un connaît l'astuce pour 'sauter' les feuilles graphiques, je suis preneur.
    Merci par avance.
    Conciliator

  2. #2
    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 Conciliator Voir le message
    Ce problème est identifié sur plusieurs version Excel et le code "For Each Wsh In Worksheets" ne fonctionne pas.
    Pour quelle raison ?
    Un For Each sur Worksheets est quelque chose que j'utilise régulièrement. Pourquoi cela ne fonctionne-t-il pas dans ton cas ?

    Si quelqu'un connaît l'astuce pour 'sauter' les feuilles graphiques, je suis preneur.
    Travailler sur Worksheet(s) au lieu de Sheet(s).
    La différence entre les deux, ce sont justement les feuilles de graphiques (enfin... c'est un peu plus compliqué mais je simplifie).

    Si tu veux rester sur ta méthode, tu peux tester la propriété Type de la Sheet courante pour savoir s'il s'agit d'une feuille de calcul ou d'un graphique.
    https://docs.microsoft.com/fr-FR/off...worksheet.type
    https://docs.microsoft.com/fr-FR/off...el.xlsheettype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets(i).Type = xlWorksheet Then Sheets(i).UsedRange.Replace What:="3.43", Replacement:="3.23"

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Par défaut
    Bonjour Menhir,
    Merci pour ton retour.
    En fait le for each ne fonctionne pas sur certaines versions Excel car l'option par défaut de rechercher/remplacer est sur la feuille et le codage vba n'arrive pas à prendre le pas sur l'option par défaut. C'est identifié mais sur toutes les versions d'Excel.
    Merci pour l'astuce Worksheets... effectivement, je n'y avais pas pensé. Cool
    Je vais tester asap.
    Excellente journée.
    Conciliator

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Citation Envoyé par Conciliator Voir le message
    En fait le for each ne fonctionne pas sur certaines versions Excel
    C'est la première fois que j"en entends parler, pourrais-tu préciser sur quelle(s) version(s)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Par défaut
    Bonjour Patrice740,
    Effectivement, j'ai mis du temps à tomber par hasard sur l'explication après avoir bien galéré à essayer avec for each... et a n'avoir que mon onglet actif de modifié et pas les autres.
    Je viens de tenter de retrouver le post sur lequel j'avais trouvé l'explication et le code qui permet de contourner le problème* mais sans succès (plusieurs versions d'Excel étaient concernées mais pas toutes...).
    Si je retombe dessus, je posterai.
    Excellente soirée.
    Conciliator

    * (code qui se trouve dans mon premier post et que j'ai enrichi grâce au conseil de Menhir pour éviter d'être bloqué par les graphiques)

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Conciliator Voir le message
    ... (plusieurs versions d'Excel étaient concernées mais pas toutes...)
    En tout cas, c'est pas les versions françaises Excel 2002, ni 2003, ni 2007, ni 2010, ni 2013, ni 2016.

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

Discussions similaires

  1. Copier les cellules d'une ligne sélectionnée sur une autre feuille
    Par Liloo14 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/07/2013, 20h19
  2. Recherchev sur classeur fermé dont les feuilles et plages sont variables
    Par JonathanF dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/02/2013, 14h18
  3. [XL-2003] Boucle For sur toutes les feuilles d'un classeur
    Par dlight dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/10/2010, 22h48
  4. Réponses: 2
    Dernier message: 29/11/2006, 11h52
  5. Action sur toutes les feuilles d'un classeur
    Par beurnoir dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/12/2005, 15h11

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