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 :

Code VBA remplacement d'une expression


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut Code VBA remplacement d'une expression
    Bonjour,

    Je suis débutant en VBA.

    Je cherche à créer une macro me permettant de remplacer une expression du type : NRG1026X - CI - redevances par ceci: NRG1026 - Charges internes - redevances en un clic.

    Il faudrait que j'arrive à effectuer ce type de remplacement sur une trentaine d'onglets dans la cellule E2 et celle-ci seulement, en sachant que je m'appuie sur deux tableaux insérés dans un des onglets pour trouver les deux types d'expression citées ci-dessus.

    J'espère avoir été clair et vous remercie de votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Le code pour remplacer dans toutes les feuilles est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
        Dim Sh As Worksheet
        For Each Sh In Worksheets
            Sh.[E2].Replace "NRG1026X - CI - redevances", "NRG1026 - Charges internes - redevances", xlWhole
        Next Sh
    End Sub
    On peut exclure certaines feuilles du remplacement. Par contre, je n'ai pas compris ce qui suit :

    en sachant que je m'appuie sur deux tableaux insérés dans un des onglets pour trouver les deux types d'expression citées ci-dessus.
    Je me doute que ça doit compliquer les choses. Peux-tu préciser ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut
    Et bien, en fait, vu que j'ai un certain nombre d'expressions, je pensais faire un code plus simple sans rajouter à chaque fois les deux expressions (celle à rajouter et celle à remplacer).

    Ce que je veux dire c'est que dans mon excel, j'ai des listes d'expressions et que j'aimerais, au lieu de taper une trentaine de ligne de remplacement, que la macro aille chercher directement l'expression de remplacement dans la liste en question.

    Après je ne sais pas si cela est possible et, très franchement, je pense que je vais opter pour ta solution qui me paraît plus sûre. Par contre, j'ai une autre question, en fait, il faudrait que que je puisse à nouveau remplacer "NRG1026 - Charges Internes - redevances par son expression initiale (NRG1026X - CI - redevances). J'ai besoin d'être en mesure de proposer et d'utiliser les deux écritures. Dois-je simplement réécrire la ligne de code proposée ou existe-t-il une fonction spécifique permettant de faire cela?

    Merci de ton aide.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Utilise plutôt le code suivant en modifiant les plages "Tableau1" et "Tableau2" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
        Dim Sh As Worksheet, Tableau1 As Range, Tableau2 As Range
        Set Tableau1 = Sheets("Feuil1").[A1:A10]
        Set Tableau2 = Sheets("Feuil1").[B1:B10]
        For Each Sh In Worksheets
            If Sh.Name <> "Feuil1" Then
                For i = 1 To Tableau1.Count
                Sh.[E2].Replace Tableau1(i), Tableau2(i), , xlWhole
                Next i
            End If
        Next Sh
    End Sub

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut
    Je te remercie pour le code, il fonctionne correctement!

    Tu m'as dit qu'il était possible d'exclure certains onglets? Pourrais-tu me montrer la procédure?

    Cdt

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Dans l'exemple précédent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sh.Name <> "Feuil1" Then
    permet d'exclure "Feuil1". Tu peux en ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sh.Name <> "Feuil1" And Sh.Name <> "Feuil2" Then
    Si tu en as beaucoup, dis-le, on peut procéder autrement.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut
    Excellent! J'en ai peu, la manip prendra peu de temps!

    En revanche, je me sui rendu compte qu'un de mes tableaux n'était pas à jour, donc même si el code fonctionne, le problème vient de certaines données qui sont fausses...je vais donc devoir me rabattre sur ton premier exemple.

    Mais en fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Sh In Worksheets
            Sh.[E2].Replace "NRG1026X - CI - redevances", "NRG1026 - Charges internes - redevances", xlWhole
        Next Sh
    Fonctionne si je veux que dans chaque onglet, la cellule E2 affiche "NRG1026 - Charges internes - redevances", or chacun des onglets concerne un NRG différent, donc l'expression change. Il faut donc je remplace le For each sh in Worksheets si j'ai bien compris?

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Pas sûr de comprendre. Tableau1 comprend les chaînes de caractères à modifier et la cellule correspondante dans Tableau2 contient les valeurs de remplacement. Donc le remplacement dans chaque feuille sera différent selon la valeur de E2. A moins que j'ai loupé quelque chose ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut
    Non tu as tout compris à ce niveau là. Le problème c'est que l'un de mes tableaux n'est pas à jour et que je ne peux pas le mettre à jour.

    Je suis donc forcé de me rabattre sur ton premier exemple, celui avant la manip avec les tableaux.

    Et mon message précédent concernait en fait ce premier code, qui à mon sens, remplace le contenu de E2 par NRG1026 - Charges internes - redevances sur chque onglet! Or le problème c'est que j'ai une multitude d'onglets avec des expressions NRG différentes pour chacun d'entre eux.

    Comment puis-je donc sélectionner le bon onglet pour faire le remplaceemnt approprié pour chaque expression NRG?

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Est-ce qu'il y a toujours xxxxxxxX - CI - redevances à remplacer par xxxxxxx - Charges internes - redevances ?
    C'est à dire qu'on prend le 7 premiers caractères de E2 et on change le reste.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut
    Oui c'est tout à fait cela

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut
    J'ai réutilisé une partie du code que tu m'avais conseillé et je l'ai dupliqué pour chaque onglet, dans le but de changer le contenu de la cellule E2 dans chacun des onglets, en sachant que ce contenu est différent pour chaque onglet.

    Cela me donne le code suivant "je n'ai reporté que les première valeurs, il y en a une cinquantaine, le reste est codé de la même façon):
    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
    Sub Replace()
     
     
    For Each Sh In Worksheets
        If Sh.Name = "NRG0511X - loc. et ach. SW" Then
               Sh.[E2].Value = "NRG0511 - Location et achat  de logiciels"
        ElseIf Sh.Name = "NRG1041X - CI redevances occupa" Then
            Sh.[E2].Value "NRG1041 - Charges Internes - redevances d'occupation "
        ElseIf Sh.Name = "NRG0613X - services aux bâtimen" Then
            Sh.[E2].Value "NRG0613 - Services aux bâtiments"
        ElseIf Sh.Name = "NRG0616X - coûts adaptation" Then
            Sh.[E2].Value "NRG0616 - Coûts d'adaptation et d'équipement"
    ...
     
    End if
     
    Next Sh
     
    End Sub
    Malheureusement, j'obtiens un message d'erreur et le débogage surligne la ligne suivante: Sh.[E2].Value "NRG1041 - Charges Internes - redevances d'occupation "

    L'assistant me dit qu'il s'agit d'une propriété ou méthode non gérée par cet objet.

    Que puis-je faire pour contrer cela?

    Cdt

  13. #13
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Il faut mettre un signe "=" après "Value" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sh.[E2].Value = "NRG1041 - Charges Internes - redevances d'occupation "
    Pareil pour les lignes suivantes.

  14. #14
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Je reviens avec mon idée de tableau,utilisé par la macro suivante (regarde le classeur joint) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Replace()
        Dim Ligne As Long
        For Each sh In Worksheets
            If IsNumeric(Application.Match(sh.Name, [Feuil1!A:A], 0)) Then
                Ligne = Application.Match(sh.Name, [Feuil1!A:A], 0)
                sh.[E2] = Application.Index([Feuil1!B:B], Ligne, 1)
            End If
        Next sh
    End Sub
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [AC-2007] Code VBA création d'une checkbox
    Par Tifriis dans le forum VBA Access
    Réponses: 19
    Dernier message: 28/04/2015, 13h15
  2. [XL-2007] "Histogramme empilé 3D" pb VBA Remplacement d'une zone par une image
    Par belpaume dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/11/2010, 17h22
  3. Réponses: 2
    Dernier message: 14/10/2009, 09h57
  4. Code VBA pour Copier une cellule dans un filtre?
    Par Redisdead dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/02/2009, 06h48
  5. Code VBA qui supprime une requête
    Par Fredo67 dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/05/2008, 18h47

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