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 :

Toujours un problème dans le changement de mot dans une macro


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Points : 38
    Points
    38
    Par défaut Toujours un problème dans le changement de mot dans une macro
    Bonjour

    Je n'y comprend rien. J'avais pourtant résolu mon problème de changement de mot dans ma macro et le problème est réaparu

    je vous poste mon code, en espérant que vous soyez capable de résoudre mon problème Merci à l'avance.

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    Sub generer_fichier()
    '
    ' Generer_pages Macro.
    '
     
     
     
    Const Accents As String = "àâäåçéèêëîïôöùûüÈÉÊËÀÁÂÃÄÅÙÚÛÜ- ,"
    Const Normaux As String = "aaaaceeeeiioouuuEEEEAAAAAAUUUU___"
     
     
        Dim c As Range, DerLigne As Integer, i As Byte
        Dim Ancien As String, Nouveau As String, Cible As String
        Dim VBComp As VBComponent
        Dim b As Integer
        Dim wbk As Workbook
        Dim w As Integer
        Dim Module As Object
     
     
        Sheets("Menu").Select
        DerLigne = Range("A65536").End(xlUp).Row
        For Each c In Range("A2:A" & DerLigne)
            For w = 1 To Len(Accents)
                c.Value = Replace(c.Value, Mid(Accents, w, 1), Mid(Normaux, w, 1))
            Next w
        Next c
     
     
        Sheets("Menu").Select
        ' Déterminer combien d'agent sur la feuille Menu
        FinalAgent = Range("A65000").End(xlUp).Row
     
        ' Loop pour chaque agent
        For x = 2 To FinalAgent
     
            Sheets("Menu").Select
            ThisAgent = Range("A" & x).Value
     
    'Copie des feuilles
     
            Application.ScreenUpdating = False
            ThisWorkbook.Sheets(Array("Janvier", "Admin_Janvier", "Fevrier", "Admin_Fevrier", "Mars", "Admin_Mars", "Avril", "Admin_Avril", "Mai", "Admin_Mai", "Juin", "Admin_Juin", "Juillet", "Admin_Juillet", "Aout", "Admin_Aout", "Septembre", "Admin_Septembre", "Octobre", "Admin_Octobre", "Novembre", "Admin_Novembre", "Decembre", "Admin_Decembre", "AGT", "SGT")).Copy        'adapte les noms des feuilles
     
     
    'Céation du nouveau fichier et enregistrement
            Set wbk = ActiveWorkbook
     
     
        Ancien = "New_Agt"
        Nouveau = "ThisAgent"
     
           For Each VBComp In wbk.VBProject.VBComponents
            With VBComp.CodeModule
                If VBComp.CodeModule.Name <> "AfficheMacrosActiveworkbook" Then
                    For b = 1 To VBComp.CodeModule.CountOfLines
                        Cible = VBComp.CodeModule.Lines(b, 1)
                        Cible = Replace(Cible, Ancien, Nouveau)
                        VBComp.CodeModule.ReplaceLine b, Cible
                    Next b
                End If
            End With
        Next VBComp
     
     
     
     
     
            Application.DisplayAlerts = False
            wbk.SaveAs ThisWorkbook.Path & "\" & ThisAgent & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
     
     
     
     
     
     
    Application.DisplayAlerts = True
     
     
     
    wbk.Close
    Set wbk = Nothing
     
     
        Next x
     
     
     
    Application.ScreenUpdating = False
     
        Sheets("Menu").Select
        MsgBox ("Opération terminée.")
    End Sub
    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Points : 207
    Points
    207
    Par défaut
    Bonjour,

    Quel est le mot qui change ?


    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
    Sub generer_fichier()
    '
    ' Generer_pages Macro.
    '
    Application.ScreenUpdating = False '=> A placer en début de macro.
    Const Accents As String = "àâäåçéèêëîïôöùûüÈÉÊËÀÁÂÃÄÅÙÚÛÜ- ,"
    Const Normaux As String = "aaaaceeeeiioouuuEEEEAAAAAAUUUU___"
        Dim c As Range, DerLigne As Integer, i As Byte
        Dim Ancien As String, Nouveau As String, Cible As String
        Dim VBComp As VBComponent
        Dim b As Integer
        Dim wbk As Workbook
        Dim w As Integer
        Dim Module As Object
     
        Sheets("Menu").Select '=> Est ce vraiment nécessaire ?
        DerLigne = Range("A65536").End(xlUp).Row
        For Each c In Range("A2:A" & DerLigne)
            For w = 1 To Len(Accents)
                c.Value = Replace(c.Value, Mid(Accents, w, 1), Mid(Normaux, w, 1))
            Next w
        Next c
        Sheets("Menu").Select '=> Encore la même ligne ?!
        ' Déterminer combien d'agent sur la feuille Menu
        FinalAgent = Range("A65000").End(xlUp).Row
        ' Loop pour chaque agent
        For x = 2 To FinalAgent
            Sheets("Menu").Select '=> Encore la même ligne ?!
            ThisAgent = Range("A" & x).Value
    'Copie des feuilles
            ThisWorkbook.Sheets(Array("Janvier", "Admin_Janvier", "Fevrier", "Admin_Fevrier", "Mars", "Admin_Mars", "Avril", "Admin_Avril", "Mai", "Admin_Mai", "Juin", "Admin_Juin", "Juillet", "Admin_Juillet", "Aout", "Admin_Aout", "Septembre", "Admin_Septembre", "Octobre", "Admin_Octobre", "Novembre", "Admin_Novembre", "Decembre", "Admin_Decembre", "AGT", "SGT")).Copy        'adapte les noms des feuilles
     'Céation du nouveau fichier et enregistrement
            Set wbk = ActiveWorkbook
        Ancien = "New_Agt"
        Nouveau = "ThisAgent"
           For Each VBComp In wbk.VBProject.VBComponents
            With VBComp.CodeModule
                If VBComp.CodeModule.Name <> "AfficheMacrosActiveworkbook" Then
                    For b = 1 To VBComp.CodeModule.CountOfLines
                        Cible = VBComp.CodeModule.Lines(b, 1)
                        Cible = Replace(Cible, Ancien, Nouveau)
                        VBComp.CodeModule.ReplaceLine b, Cible
                    Next b
                End If
            End With
        Next VBComp 
    Application.DisplayAlerts = False
    wbk.SaveAs ThisWorkbook.Path & "\" & ThisAgent & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Application.DisplayAlerts = True
    wbk.Close
    Set wbk = Nothing
         Next x
        Sheets("Menu").Select '=> Encore la même ligne ?!
    Application.ScreenUpdating = True '=> A placer à la fin et il faut mettre "True"
    MsgBox ("Opération terminée.")
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Points : 38
    Points
    38
    Par défaut
    Le mot New_AGT doit être remplacé par ThisAgent dans tout mon projet de mon nouveau classeur

    Merci de ton aide

  4. #4
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Salut,


    Pourquoi dois tu changer un mot dans le module de code?
    Tu es sur que tu ne peux pas le faire d'une façon plus simple?
    Par exemple, en mettant ce nom dans une constante, ou en le lisant sur une feuille de calcul?
    Cordialement,

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Appart que tu n' utilises pas l'option vbcompart pour les majuscules et les minuscules!
    Place toi dans les parenthèses de replace( et appuis en même temps sur [Ctrl] et la barre d'espaces!

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Points : 38
    Points
    38
    Par défaut
    En fait ThisAgent est une variable qui est changeante. Alors quand je crée une nouveau classeur New_AGT doit être remplacé par la variable ThisAgent.

    Il n'est donc pas possible de cibler une cellule en particulier.

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    je suis assez d'accords avec philippe pons

    met une constante dans le classeur original
    du genre
    const new_agt="Blablabla"

    et dans ta boucle tu met un replace sur Blablabla avec si j'ai bien compris un nom qui est récupéré dans ta plage
    ou ajoute simplement cette ligne dans les modules du nouveau classeur en remplaçant blablabla par la valeur de la cellule bien évidement
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Points : 38
    Points
    38
    Par défaut
    Après avoir regardé vos commentaires.. J'ai décidé d'enlever les majuscules dans le new_agt. Tout a réglé mon problème.

    Voici mon code rectifié en enlevant quelques code superflu.

    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
     
    Sub generer_fichier()
    '
    ' Generer_pages Macro.
    '
    Application.ScreenUpdating = False '=> A placer en début de macro.
    Const Accents As String = "àâäåçéèêëîïôöùûüÈÉÊËÀÁÂÃÄÅÙÚÛÜ- ,"
    Const Normaux As String = "aaaaceeeeiioouuuEEEEAAAAAAUUUU___"
        Dim c As Range, DerLigne As Integer, i As Byte
        Dim Ancien As String, Nouveau As String, Cible As String
        Dim VBComp As VBComponent
        Dim b As Integer
        Dim wbk As Workbook
        Dim w As Integer
        Dim Module As Object
     
        Sheets("Menu").Select
        DerLigne = Range("A65536").End(xlUp).Row
        For Each c In Range("A2:A" & DerLigne)
            For w = 1 To Len(Accents)
                c.Value = Replace(c.Value, Mid(Accents, w, 1), Mid(Normaux, w, 1))
            Next w
        Next c
     
        ' Déterminer combien d'agent sur la feuille Menu
        FinalAgent = Range("A65000").End(xlUp).Row
        ' Loop pour chaque agent
        For x = 2 To FinalAgent
            ThisAgent = Range("A" & x).Value
    'Copie des feuilles
            ThisWorkbook.Sheets(Array("Janvier", "Admin_Janvier", "Fevrier", "Admin_Fevrier", "Mars", "Admin_Mars", "Avril", "Admin_Avril", "Mai", "Admin_Mai", "Juin", "Admin_Juin", "Juillet", "Admin_Juillet", "Aout", "Admin_Aout", "Septembre", "Admin_Septembre", "Octobre", "Admin_Octobre", "Novembre", "Admin_Novembre", "Decembre", "Admin_Decembre", "AGT", "SGT")).Copy        'adapte les noms des feuilles
     'Céation du nouveau fichier et enregistrement
            Set wbk = ActiveWorkbook
        Ancien = "new_agt"
        Nouveau = ThisAgent
           For Each VBComp In wbk.VBProject.VBComponents
            With VBComp.CodeModule
                If VBComp.CodeModule.Name <> "AfficheMacrosActiveworkbook" Then
                    For b = 1 To VBComp.CodeModule.CountOfLines
                        Cible = VBComp.CodeModule.Lines(b, 1)
                        Cible = Replace(Cible, Ancien, Nouveau)
                        VBComp.CodeModule.ReplaceLine b, Cible
                    Next b
                End If
            End With
        Next VBComp
    Application.DisplayAlerts = False
    wbk.SaveAs ThisWorkbook.Path & "\" & ThisAgent & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Application.DisplayAlerts = True
    wbk.Close
    Set wbk = Nothing
         Next x
    Application.ScreenUpdating = True 
    MsgBox ("Opération terminée.")
    End Sub
    Merci de votre aide... Avec vous je vais réussir, UN JOUR, a finaliser mon projet

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

Discussions similaires

  1. Problème de l'existance de mot dans un fichier
    Par khalija dans le forum NetBeans
    Réponses: 0
    Dernier message: 17/04/2012, 12h22
  2. Changement de mots dans un txt
    Par oliv27400 dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/07/2010, 18h19
  3. Réponses: 3
    Dernier message: 11/03/2010, 10h36
  4. [DataGridView] Bug dans le changement de couleur d'une ligne
    Par AsPrO dans le forum Windows Forms
    Réponses: 8
    Dernier message: 22/07/2008, 23h38
  5. Réponses: 2
    Dernier message: 08/10/2007, 10h35

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