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 :

Automatisation de modifications de macros


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Par défaut Automatisation de modifications de macros
    Bonjour,
    N'étant pas expert Office je me retrouve bloqué sur un problème Excel.
    Je dois modifier des macros dans environs 140 fichiers Excel (environs 8000 feuilles).
    Ces feuilles contiennes 3 boutons et je dois modifier les macros de ces 3 boutons sur tout les fichiers.
    Les modifications sont toutes les mêmes, je dois rajouter les commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ' au début de chaque action :
    Application.Calculation = xlCalculationManual
     
    [Mon Code]
     
    ' puis le réactiver à la fin et relancer un calcul :
    Application.Calculation = xlCalculationAutomatic
    ActiveSheet.Calculate
    Sachant que chaque fichier a un nom différents et les feuilles n'ont pas toutes le même nom...

    Ça fait un petit moment que je cherche donc une solution pour automatiser cela et ne pas passer sur 8000 feuilles manuellement.

    Merci d'avance.

    Bonne année à tous le monde !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Montre ton code pour voir comment insérer ces lignes !

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Par défaut
    Bonjour,

    Je peux vous mettre le code d'un des boutons mais le code en lui même ne change rien sachant que ça change sur chaque feuilles et je suis pas sure que vous vouliez voir les codes des 8000 feuilles

    Voici un des boutons (ligne 3, 51 et 52 ce que je dois rajouter sur les 3 macros (de 3 boutons) de toutes les feuilles d'un des fichier Excel):

    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
    Private Sub CommandButton4_Click()
     
    Application.Calculation = xlCalculationManual
     
    Range("A30").Select
    nblignes = Range("A30", Selection.End(xlDown)).Cells.Count
    q = 29 + nblignes
     
    derncol = Range("A30").End(xlToRight).Column
    dercol = derncol + 2
    avdercol = derncol + 1
    dcol = Split(Columns(dercol).Address(ColumnAbsolute:=False), ":")(1)
    avcol = Split(Columns(avdercol).Address(ColumnAbsolute:=False), ":")(1)
    col = Split(Columns(derncol).Address(ColumnAbsolute:=False), ":")(1)
     
    Columns(avcol & ":" & dcol).Insert Shift:=xlToRight
     
    celltxt = Range(col & "30").Value
    cellval = Right(celltxt, 1) + 1
     
    Range(avcol & "30") = "Versement VS  - " & cellval
    Range(avcol & "31:" & avcol & q).NumberFormat = "#,##0.00 €"
     
    Range(dcol & "30") = "Date versement VS  - " & cellval
    Range(dcol & "31:" & dcol & q).NumberFormat = "dd/mm/yy"
    Range(avcol & "30:" & dcol & "30").HorizontalAlignment = xlCenter
    Range(avcol & "30:" & dcol & "30").VerticalAlignment = xlVAlignCenter
    Range(avcol & "30:" & dcol & "30").Font.ColorIndex = 1
    Range(avcol & "30:" & dcol & "30").WrapText = True
     
    derncola = Range("A30").End(xlToRight).Column
    dcola = Split(Columns(derncola).Address(ColumnAbsolute:=False), ":")(1)
    Columns("W:" & dcola).ColumnWidth = 17
    Range("W30:" & dcola & "30").Borders.LineStyle = 1
     
    f = 31
     
    Do While f <= q
        val1 = Range("V" & f).FormulaLocal
    val1 = Replace(val1, ";2)", "")
        Range("V" & f).FormulaLocal = val1 & "-" & avcol & f & ";2)"
        f = f + 1
    Loop
     
    formul1 = Range("H16").Formula
    formul2 = Len(formul1)
    formul2 = formul2 - 1
    formul3 = Left(formul1, formul2)
    Range("H16").Formula = formul3 & "," & avcol & "31:" & avcol & q & ")"
     
    Application.Calculation = xlCalculationAutomatic
    ActiveSheet.Calculate
     
    End Sub
    Merci d'avance.

    Bonne journée.

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Bonjour à vous,


    SVP utiliser les balises # pour votre code

    Personnellement j'aurais adapté le code afin d'avoir un seul et unique code pour l'ensemble des feuilles mais connaissant pas votre besoins réel, je ne sais pas si cela est faisable.


    Également si le code n'Est pas utilisé par d'autre personne j'aurais stocké le tout dans le personal.xlsb afin de gérer le code à un seul et unique endroit

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Une chose me paraît certaine (si l'on s'en tient au voeu exprimé, tel qu'exprimé) --->>
    Ces feuilles contiennes 3 boutons et je dois modifier les macros de ces 3 boutons sur tout les fichiers.
    Les modifications sont toutes les mêmes, je dois rajouter les commandes suivantes :
    .......
    ......
    Sachant que chaque fichier a un nom différents et les feuilles n'ont pas toutes le même nom...
    = mission impossible, sauf si, à la fois, chacun de ces 3 boutons porte toujours le même nom dans chaque classeur et que ce nom est unique au sein de chaque classeur ! Et si ces deux conditions sont réunies : en ramant sec ...

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Voici un code qui fait ce que tu demandes mais je te conseille, pour le test, de ne mettre que 4 ou 5 copies de tes classeurs dans un dossier provisoire et de lancer la procédure "Remplacer" pour voir le résultat. Je te conseille fortement de faire plusieurs tests sur de petits paquets de copies de classeurs et de bien contrôler si le résultat obtenu correspond bien à tes souhaits car traficoter du code par VBA n'est pas anodin et sur 8000 classeurs si les résultats obtenus ne sont pas ceux souhaité, je te laisse imaginer les heures de travail pour remettre tout ça en ordre donc, prudence :
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    Sub Remplacer()
     
        Dim Cl As Workbook
        Dim Tbl() As String
        Dim Chemin As String
        Dim I As Integer
     
        Chemin = Dossier
     
        If Chemin = "" Then Exit Sub
     
        'appel de la fonction...
        Tbl() = RecupFichiers(Chemin)
     
        'si le tableau a été initialisé...
        If Not Not Tbl Then
     
            For I = 1 To UBound(Tbl)
     
                'ouverture de tous les classeurs...
                Set Cl = Workbooks.Open(Tbl(I))
     
                'insertion des lignes
                Inserer Cl
     
                'fermeture avec enregistrement des modifs
                Cl.Close True
     
            Next I
     
        End If
     
    End Sub
     
    Function RecupFichiers(Chemin As String) As String()
     
        Dim TableauFichiers() As String
        Dim Fichier As String
        Dim I As Integer
     
        'récupère tous les classeurs dun dossier dans un tableau
        Fichier = Dir(Chemin & "*.xls*")
     
        Do While (Len(Fichier) > 0)
     
            I = I + 1
     
            ReDim Preserve TableauFichiers(1 To I)
     
            TableauFichiers(I) = Chemin & Fichier
     
            Fichier = Dir()
     
        Loop
     
        RecupFichiers = TableauFichiers()
     
    End Function
     
    Function Dossier() As Variant
     
        'sélection du dossier contenant les classeurs
        With Application.FileDialog(4)
            If .Show = -1 Then Dossier = .SelectedItems(1) & "\"
        End With
     
    End Function
     
    Sub Inserer(Classeur As Workbook)
     
        Dim mModule As Object
        Dim I As Integer
        Dim J As Integer
        Dim Proc As String
     
        'les * pour prendre en compte les espaces et commentaires
        Proc = "*Private Sub *_Click()*"
     
        'parcours la collection de module mais ne s'arrête que su les module de feuilles et classeur
        'et effectue les insertions
        For Each mModule In Classeur.VBProject.VBComponents
     
            If mModule.Type = 100 Then
     
                With mModule.CodeModule
     
                    J = 0
     
                    Do
                        J = J + 1
     
                        If .Lines(J, 1) Like Proc Then
     
                            .InsertLines J + 1, vbCrLf & _
                                                "Application.Calculation = xlCalculationManual" & _
                                                vbCrLf
     
                            J = J + 3
     
                        End If
     
                        If .Lines(J, 1) Like "*End Sub*" Then
     
                            .InsertLines J, vbCrLf & _
                                            "Application.Calculation = xlCalculationAutomatic" & _
                                            vbCrLf & _
                                            "ActiveSheet.Calculate" & _
                                            vbCrLf
     
                            J = J + 4
     
                        End If
     
                    Loop While J < .CountOfLines
     
                End With
     
            End If
     
        Next mModule
     
    End Sub

Discussions similaires

  1. [XL-2010] Modification de Macro pour un tri de données
    Par davidstarr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/01/2011, 17h39
  2. modification de macro VBA
    Par mayc5364 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/09/2009, 12h05
  3. Protéger les feuilles de la modification par macro
    Par blobnet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/01/2009, 15h57
  4. Modif de macro auto pour appel de Form cree par Données puis formulaire
    Par Bernard67 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/03/2008, 13h06
  5. [VB-E]Modification de macro
    Par lolo_bob2 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/07/2006, 14h48

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