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 :

Format cellule dans onglet [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut Format cellule dans onglet
    Bonjour,

    Pouvez vous me dire pourquoi il ne formate pas mes cellules avec le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sh_GlobalKrc.Range("D2:D" & sh_GlobalKrc.UsedRange.Rows.Count).Select.NumberFormat = "#.##0,00_ ;[Rouge]-#.##0,00"
            sh_GlobalKrc.Range("B2:B" & sh_GlobalKrc.UsedRange.Rows.Count).Select.WrapText = True
            sh_GlobalKrc.Range("E2:E" & sh_GlobalKrc.UsedRange.Rows.Count).Select.WrapText = True
    Merci

  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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La méthode Select est à proscrire. Elle est parfaitement inutile en VBA et de plus ralenti l'exécution du programme.
    Pour formater une plage complète et en supposant que la première ligne contient bien les titres et la première colonne est remplie de la première à la dernière ligne de la liste, voici un exemple qui formate la colonne 4 de la feuille nommée Feuil2 du classeur où se trouve le code VBA (ThisWorkbook)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub T()
     Dim Rng As Range
     Dim rng_Data As Range
     Set Rng = ThisWorkbook.Worksheets("Feuil2").Range("A1").CurrentRegion
     With Rng
      Set rng_Data = .Offset(1).Resize(.Rows.Count - 1)
     End With
     rng_Data.Columns(4).NumberFormat = "#,##0"
     Set Rng = Nothing: Set rng_Data = Nothing
    End Sub
    Variante de la ligne 8 si tu souhaites que les valeur négatives soient en rouge entre parenthèses et sans le signe, les positives étant en bleu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rng_Data.Columns(4).NumberFormat = "[Blue]#,##0;[Red](#,##0)"
    Il y a une manière très simple de connaître la syntaxe

    Tu crées le format dans une cellule quelconque (par exemple A2) et ensuite dans la fenêtre d'exécution (Ctrl G) de l'éditeur VBE, tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? range("A2").NumberFormat
    et tu valides par Enter et tu auras [Blue]#,##0;[Red](#,##0) qu'il te reste à Copier/Coller entre les guillemets de la propriété NumberFormat
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut
    Voici le code modifié, est ce bon?
    Il coince à la ligne 12, il ne veut pas de sh_GlobalKrc PQ?


    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
    Sub format()
        'formate sh-GlobalKrc
     
        'sh_GlobalKrc.Columns("A:O").AutoFit
            'sh_GlobalKrc.Range("D2:D" & sh_GlobalKrc.UsedRange.Rows.Count).Select.NumberFormat = "#.##0,00_ ;[Rouge]-#.##0,00"
            'sh_GlobalKrc.Range("B2:B" & sh_GlobalKrc.UsedRange.Rows.Count).Select.WrapText = True
            'sh_GlobalKrc.Range("E2:E" & sh_GlobalKrc.UsedRange.Rows.Count).Select.WrapText = True
     
        Dim Rng As Range
        Dim rng_Data As Range
     
        Set Rng = ThisWorkbook.sh_GlobalKrc.Range("A1").CurrentRegion
     
        With Rng
        Set rng_Data = .Offset(1).Resize(.Rows.Count - 1)
        End With
     
        rng_Data.Columns(4).NumberFormat = "#.##0,00_ ;[Rouge]-#.##0,00"
        rng_Data.Columns(2).WrapText = True
        rng_Data.Columns(5).WrapText = True
     
        Set Rng = Nothing: Set rng_Data = Nothing

  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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suppose que sh_GlobalKrc est soit le CodeName de la feuille soit une variable Objet. ThisWorkbook est donc superflu
    En ligne 18, ce n'est pas Rouge mais Red
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut
    cela ne fonctionne pas

    Voici mon code complet :

    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
    Private Sub CommandButton1_Click()
     
    On Error Resume Next
     
    Dim chemin As String, KRCFile As String
    Dim folder As Variant, box As Variant
    Dim NBFichier As Integer
    Dim wb As Workbook
     
     
    'définit le répertoire contenant les fichiers
    chemin = ThisWorkbook.Path & Application.PathSeparator
    folder = "KRC_GB-BH\"
     
    'tous les fichiers krc*.xlsx du folder
    KRCFile = Dir(chemin & folder & "KRC" & "*.xlsx")
     
    If KRCFile <> "" Then
    'boucle => nombre de fichiers trouvés dans le folder
        While Not KRCFile = ""
            NBFichier = NBFichier + 1
            KRCFile = Dir
        Wend
    Else: MsgBox "Not Files in the folder"
    Exit Sub
    End If
     
    box = MsgBox("Find" & " " & NBFichier & " " & "file(s)" & " " & "?", vbYesNo + vbQuestion + vbApplicationModal + vbDefaultButton2, "")
     
    KRCFile = Dir(chemin & folder & "KRC" & "*.xlsx")
     
    If box = vbYes Then
        If KRCFile <> "" Then
            Application.StatusBar = "Old data erased"
            sh_GlobalKrc.Range("A2:O" & ActiveSheet.UsedRange.Rows.Count - 1).ClearContents
            MsgBox "ClearContents ok"
            Application.StatusBar = "Import in progess....."
            Application.ScreenUpdating = False
            Application.EnableEvents = False
            Do While KRCFile <> ""
                'ouvre le fichier trouvé
                Set wb = Workbooks.Open(chemin & folder & KRCFile)
                wb.Sheets("KRC").Unprotect ("1234")
                If wb.Sheets("KRC").Range("k3") = "Oui / Ja" Then
                    wb.Sheets("KRC").Range("C13:N" & wb.Sheets("KRC").UsedRange.Rows.Count).Copy
                    sh_GlobalKrc.Range("B1048576").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, operation _
                        :=xlNone, skipblanks:=False, Transpose:=False
                    'vide le presse papier
                    Call ClearClipboard
                Else
                End If
                'ferme le fichier trouvé en cours
                wb.Close False
                Set wb = Nothing
                KRCFile = Dir
            Loop
     
            MsgBox "Import OK"
            '& Application.sum("D2:D" & sh_GlobalKrc.UsedRange.Rows.Count)
     
            Application.ScreenUpdating = True
            Application.StatusBar = False
            Application.EnableEvents = True
     
            Application.Goto reference:=Range("A2")
     
            Call format
     
        End If
    End If
     
    End Sub
     
    ------------------
     
    Sub format()
        'formate sh_GlobalKrc
     
        Dim Rng As Range
        Dim rng_Data As Range
     
        Set Rng = sh_GlobalKrc.Range("A1").CurrentRegion
     
        With Rng
        Set rng_Data = .Offset(1).Resize(.Rows.Count - 1)
        End With
     
        rng_Data.Columns(4).NumberFormat = "#.##0,00_ ;[Rouge]-#.##0,00"
        rng_Data.Columns(2).WrapText = True
        rng_Data.Columns(5).WrapText = True
     
        Set Rng = Nothing: Set rng_Data = Nothing
     
     
    End Sub

  6. #6
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    cela ne fonctionne pas
    Ce n'est pas une indication.
    Qu'est ce-qui ne fonctionne pas ?
    Le résultat attendu n'est pas au rendez-vous ou bien y a-t-il un message d'erreur si oui lequel (numéro de la ligne, numéro et texte de l'erreur)

    j'ai aussi indiqué dans mon message précédent que le ligne 8 n'était pas correcte (maintenant 88) et celle-ci n'a pas été corrigée

    De plus, cela sort de la question initiale car tu as ajouté le code que tu as placé dans une autre discussion publiée où tu n'as eu de réponse sans doute parce-qu'elle est mal posée ou tout simplement parce-que le code est imbuvable à lire.
    J'ajouterais également que tu as placé un On Error Resume Next qui camoufle les erreurs.

    Le code que j'ai posté fonctionne car je teste toutes les réponses que je publie.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut
    Merci pour ton aide

  8. #8
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut
    Cela fonctionne mais puis-je mettre plusieurs colonnes à la suite ?

    Ex : rng_Data.Columns(2).WrapText = True, mettre colonne 2 et 3 et 4.

  9. #9
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    cela fonctionne mais puis je mettre plusieurs colonnes à la suite
    ex : rng_Data.Columns(2).WrapText = True
    mettre colonne 2 et 3 et 4
    J''ai repris mon premier exemple en y ajoutant une boucle (Ce qui a été ajouté ou modifié est en rouge)
    Il y a certainement plus simple mais je n'ai pas le temps de m'y pencher
    Il suffit de remplacer la propriété NumberFormat par WrapText
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub T()
     Dim Rng As Range
     Dim rng_Data As Range
     Dim c As Integer
     Set Rng = ThisWorkbook.Worksheets("Feuil2").Range("A1").CurrentRegion
     With Rng
      Set rng_Data = .Offset(1).Resize(.Rows.Count - 1)
     End With
     For c = 2 To 4
      rng_Data.Columns(c).NumberFormat = "#,##0"
     Next
     Set Rng = Nothing: Set rng_Data = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut
    super merci
    je vais adapter

  11. #11
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut
    Désolé une petite question

    dans le code suivant, comment lui dire que les 12ères lignes ne doivent pas être prises en considération

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set Rng = wb.Sheets("KRC").Range("A1").CurrentRegion
     
                With Rng
                Set rng_Data = .Offset(1).Resize(.Rows.Count - 1)
                End With
     
                rng_Data.Columns(5).NumberFormat = "#,##0.00_ ;[Red]-#,##0.00"
     
                Set Rng = Nothing: Set rng_Data = Nothing
    merci

  12. #12
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    dans le code suivant, comment lui dire que les 12ères lignes ne doivent pas être prises en considération
    L'instruction prévoyant de formater la colonne entière, il n'y a pas d'autre choix que de mettre un autre format à cette douzième ligne
    Sauf s'il s'agit de tableaux de synthèses c''est curieux d'avoir dans une liste de données bien construite des formats différents dans une colonne
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Modifier format cellule dans feuille Excel depuis ACCES
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 11
    Dernier message: 21/04/2016, 09h14
  2. Comparaison cellules dans onglets différents
    Par Estaque3394 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/11/2012, 10h29
  3. Choisir format cellule dans Calc à partir de C#
    Par Stagiette dans le forum C#
    Réponses: 0
    Dernier message: 11/02/2010, 16h14
  4. Contrôle du format des cellules dans Excel
    Par Flashget dans le forum MATLAB
    Réponses: 4
    Dernier message: 20/03/2007, 14h37
  5. [VBA-E]changer le format d'une cellule dans un spreadsheet
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 13/02/2006, 11h12

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