VBA

Modisdonc Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
Modisdonc Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je voudrais faire une mise en forme automatique en cliquant sur un bouton :

le bouton est dans la feuille "Procedure" = CommandButton1
la mise en forme se fait dans la feuille "Données brutes" : remplacement de caractères + tri des données.
une fois terminée on revient automatiquement sur la feuille "Procédure".

Ma macro s'arrête dès la ligne "Cells.Select" avec une erreur 1004... QUE FAIRE ?

La macro est la suivante :

Private Sub CommandButton1_Click()
Sheets("Données brutes").Select
Cells.Select
Selection.Replace What:="'", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("A:L").Select
ActiveWorkbook.Worksheets("Données brutes").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Données brutes").Sort.SortFields.Add Key:=Range( _
"A2:A129"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Données brutes").Sort
.SetRange Range("A1:L129")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("PROCEDURE").Select
End Sub

3 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    1 - A l'avenir.. merci d'utiliser les balises de code pour poster du code sur le forum

    2 - Voici ton code revu et corrigé

    A la place de ton code actuel
    Private Sub CommandButton1_Click()
        Call miseenforme
        Sheets("PROCEDURE").Select
    End Sub
    


    Puis dans un modul, tu colles ça :
    Sub miseenforme()
        Dim Sh As Worksheet
        Dim Rng As Range
        
        Set Sh = ThisWorkbook.Worksheets("Données brutes")
        Set Rng = Sh.Cells
        
        Rng.Replace What:="'", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        Rng.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        
        Sh.Sort.SortFields.Clear
        Sh.Sort.SortFields.Add Key:=Range("A2:A129"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        
         With Sh.Sort
            .SetRange Range("A1:L129")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
    

    1
    1. Modisdonc Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour Jordane45 et merci pour ton code,
      1. Ok, je fera attention à l'avenir et j' utiliserai les balises de code :)
      2. Ton code marche bien mais j'ai oublié de préciser que pour que cela fonctionne comme je le souhaite il faut que je change le format des données de la colonne A ("Date"). Je les passe en date dd/mm/aaaa puis je fais un tri de la plus ancienne à la plus récente.
      Sais-tu comment je dois modifier le code pour obtenir ce résultat ?
      En utilisant ton code, les dates se modifient de la façon suivante : 09/01/2017 --> 01/09/2017 (on passe de janvier à septembre :( )
      Te remerciant par avance pour ton aide (encore...)
      Cordialement,
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    Sheets("Données brutes").Cells.Select

    mais pourquoi traiter TOUTE la feuille (1048576 lignes x 16384 colonnes)?

    a mon avis, tu vas avoir d'autres erreurs

    Bonne continuation

     Michel
    0
  3. Modisdonc Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour à tous,
    J'ai essayé les deux versions répondues mais j'ai des erreurs encore et encore...
    Voici mon nouveau code et ça bloque sur "Range("A1:K1000").Select" :

    Private Sub CommandButton1_Click()
    Sheets("Données brutes").Select
    Range("A1:K1000").Select
    Selection.Replace What:="'", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    Range("A2:A1000").Select
    Selection.NumberFormat = "dd/mm/yy;@"
    Range("A1:K2000").Select
    ActiveWorkbook.Worksheets("Données brutes").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Données brutes").Sort.SortFields.Add Key:=Range( _
    "A2:A1000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
    With ActiveWorkbook.Worksheets("Données brutes").Sort
    .SetRange Range("A1:K1000")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
    Sheets("PROCEDURE").Select
    Range("B19").Select
    End Sub


    Pouvez-vous m'aider ?
    Merci
    0