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 :

passer d'une exécution automatique à un bouton macro [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut passer d'une exécution automatique à un bouton macro
    Bonjour à tous,

    J'aimerai transformé le code ci-dessous en macro pour ensuite l'ajouter dans un module VBA qui permettra de créer un bouton pour exécuter ce code.

    Ce code permet de convertir de manière automatique les lettres minuscules en majuscules sans accent dans une feuille active.

    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
     
    Sub Worksheet_Change(ByVal Target As Range)
      If Not Application.Intersect(Target, Range("c6:s5000")) Is Nothing Then
       codeA = "ÉÈÊËÔéèêëàçùôûïî"
       codeB = "EEEEOeeeeacuouii"
       temp = Target
       For i = 1 To Len(temp)
        p = InStr(codeA, Mid(temp, i, 1))
        If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
       Next
       Application.EnableEvents = False
       Target = UCase(temp)
       Application.EnableEvents = True
     End If
    End Sub
    Merci pour votre aide !

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 910
    Points : 28 889
    Points
    28 889
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne sais pas si c'est ce que tu cherches mais voici un code qui parcourt les cellules de C6 à S5000 de la feuille active et qui exécute le même code que celui que tu avais placé dans la procédure événementielle de la feuille.
    S'il n'y a plus de procédure événementielle sur la feuille traitée il n'y a plus lieu évidemment de laisser les deux lignes de code Application.EnableEvents
    Philippe Tulliez
    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
     
    Sub WorksheetChange()
      Application.ScreenUpdating = False
      Dim cellule As Range, cel As Range
      Set cellule = Range("c6:s5000") ' A modifier éventuellement
      codeA = "ÉÈÊËÔéèêëàçùôûïî"
      codeB = "EEEEOeeeeacuouii"
      For Each cel In cellule
        If Not (IsEmpty(cellule)) Then
          temp = cel
          For i = 1 To Len(temp)
            p = InStr(codeA, Mid(temp, i, 1))
            If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
          Next
          Application.EnableEvents = False
          cel = UCase(temp)
          Application.EnableEvents = True
        End If
      Next
      Application.ScreenUpdating = False
    End Sub

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup Philippe !

    La lancement de cette macro sur mon PC prend effectivement beaucoup de temps.
    Serait-il possible d'ajouter une barre de progression de la macro ?

    J'ai essayé d'utiliser le code issu du site de microsoft mais je n'ai pas réussi à l'adapter.
    http://support.microsoft.com/kb/211736/fr

    Aurais-tu une idée ?

    Merci encore

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 910
    Points : 28 889
    Points
    28 889
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Désolé mais je me suis trompé dans une ligne ce qui explique la lenteur de l'exécution.
    Dans la ligne où j'indique 'Erreur ici' j'avais utilisé la variable objet cellule au lieu de cel.
    Cela devrait aller maintenant très vite.
    Pour accélérer le code, tu peux aussi couper le calcul automatique avec Application.Calculation comme montré dans l'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
    23
    24
    25
    26
     
    Sub WorksheetChange()
      With Application
      .ScreenUpdating = False
      .Calculation = xlCalculationManual
      End With
      Dim cellule As Range, cel As Range
      Set cellule = Range("c6:s5000") ' A modifier éventuellement
      codeA = "ÉÈÊËÔéèêëàçùôûïî": codeB = "EEEEOeeeeacuouii"
      For Each cel In cellule
        If Not (IsEmpty(cel)) Then  ' <<< Erreur ici <<<<
        temp = cel
        For i = 1 To Len(temp)
        p = InStr(codeA, Mid(temp, i, 1))
        If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
      Next
      Application.EnableEvents = False
      cel = UCase(temp)
      Application.EnableEvents = True
      End If
      Next
      With Application
      .ScreenUpdating = False
      .Calculation = xlCalculationAutomatic
      End With
    End Sub
    Tu peux encore gagner en vitesse en utilisant l'instruction REPLACE comme ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For i = 1 To Len(temp)
       p = InStr(codeA, Mid(temp, i, 1))
       If p Then temp = Replace(temp, Mid(temp, i, 1), Mid(codeB, p, 1))
    Next

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci Philippe !

    Bonne soirée

    Brice

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pour ne pas tester toutes les cellules
    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
    Sub Tst()
    Dim Cel As Range
    Dim i As Integer, p As Integer
    Const codeA As String = "ÉÈÊËÔéèêëàçùôûïî"
    Const codeB As String = "EEEEOeeeeacuouii"
     
    With Application
         .ScreenUpdating = False
         .Calculation = xlCalculationManual
    End With
    With Sheets("Feuil1")
         On Error GoTo Erreur
         For Each Cel In Range("c6:s5000").SpecialCells(xlCellTypeConstants)
              For i = 1 To Len(Cel.Value)
                   p = InStr(codeA, Mid(Cel.Value, i, 1))
                   If p > 0 Then Cel.Value = Replace(Cel.Value, Mid(Cel.Value, i, 1), Mid(codeB, p, 1))
              Next i
              Cel.Value = UCase(Cel.Value)
         Next Cel
    End With
    Erreur:
    With Application
         .ScreenUpdating = False
         .Calculation = xlCalculationAutomatic
    End With
    End Sub

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci à vous 2.

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

Discussions similaires

  1. [XL-2010] Bouton qui exécute d'autres boutons macros
    Par CDGESTION dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 13/06/2013, 16h57
  2. Réponses: 1
    Dernier message: 03/04/2012, 10h28
  3. Mise à jour de fichier CSV avec une exécution automatique
    Par WeDgEMasTeR dans le forum Langage
    Réponses: 1
    Dernier message: 20/05/2010, 14h07
  4. Réponses: 2
    Dernier message: 04/02/2007, 19h48
  5. exécution automatique d'une macro
    Par faayy dans le forum Access
    Réponses: 12
    Dernier message: 15/06/2005, 14h52

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