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 :

Mettre en forme certaines cellules d'une colonne par vba.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 14
    Par défaut Mettre en forme certaines cellules d'une colonne par vba.
    Bonjour à tous, je viens vers vous afin d'avoir un renseignement pour un projet. J'espère pouvoir trouvé une solution avec votre aide.

    J'ai un fichier Excel qui dispose de 2 feuilles de calcul.
    La première feuille est constitué de plusieurs milliers de lignes et d'une bonne dizaine de colonne.
    Je m’intéresse uniquement à la colonne P de cette feuille qui est remplit de références de produit de type "86A25" et de cellules vides. Sachant qu'une même référence peut se trouver plusieurs fois dans cette colonne.
    Dans une deuxième feuille j'ai une petite colonne avec quelques références de produits que je dois chercher dans la première colonne et surligner.

    Je vous met un fichier joint comme exemple au cas où je n'ai pas été assez clair.


    Sauriez vous comment je peux m'y prendre ? Je voulais le faire par la mise en forme conditionnelle. Cela fonctionne mais il faut que je crée une règle pour chaque lignes de ma 2eme colonne. Sachant que je peux en avoir une centaine et que je dois le faire sur plusieurs fichiers Excel, ce n'est pas une solution viable. J'ai pensé à faire une fonction boucle de la MCF en vba mais je suis sur qu'il y plus simple en tapant quelques lignes en vba.

    Quelque soit la solution, je n'ai plus pratiqué de vba depuis longtemps et je n'arrive donc pas à avancer.

    Je vous remercie par avance de l'aide que vous pourriez m'apporter.

    Cordialement,
    Linkay.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 14
    Par défaut
    Alors j'ai pu trouvé un début de réponse à ma question en utilisant un code comme celui-ci mais actuellement il lit des valeurs supérieur à 80. Ce que j'aimerai donc faire après c'est d'essayer de lui faire lire du texte puis ensuite de le lui faire comparer avec deux colonnes sur des feuilles différentes. Je me demande sis je ne vais pas devoir passer par des variables ?

    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
    Sub Bouton2()
     
    For ligne = 2 To 11
     
        'Remet à zéro les bordures, fonds tailles de polices, polices, gras, souligné,italic.
        Sheets("feuil1").Range("B" & ligne).Font.Size = 11
        Sheets("feuil1").Range("B" & ligne).Font.Bold = False
        Sheets("feuil1").Range("B" & ligne).Font.Italic = False
        Sheets("feuil1").Range("B" & ligne).Font.Underline = False
        Sheets("feuil1").Range("B" & ligne).Font.Name = "Calibri"
        Sheets("feuil1").Range("B" & ligne).Borders.LineStyle = xlNone
        Sheets("feuil1").Range("B" & ligne).Interior.Pattern = xlNone
        Sheets("feuil1").Range("B" & ligne).Interior.TintAndShade = 0
        Sheets("feuil1").Range("B" & ligne).Interior.PatternTintAndShade = 0
        Sheets("feuil1").Range("B" & ligne).Font.ColorIndex = xlAutomatic
        Sheets("feuil1").Range("B" & ligne).Font.TintAndShade = 0
     
     
        If Sheets("feuil1").Range("B" & ligne).Value > 80 Then
     
            Sheets("feuil1").Range("B" & ligne).Font.Size = 24
            Sheets("feuil1").Range("B" & ligne).Font.Bold = True
            Sheets("feuil1").Range("B" & ligne).Font.Italic = True
            Sheets("feuil1").Range("B" & ligne).Font.Underline = True
            Sheets("feuil1").Range("B" & ligne).Font.Name = "Arial"
            Sheets("feuil1").Range("B" & ligne).Borders.Weight = 4
            Sheets("feuil1").Range("B" & ligne).Font.ColorIndex = 32
            Sheets("feuil1").Range("B" & ligne).Font.Color = RGB(145, 39, 243)
            Sheets("feuil1").Range("B" & ligne).Borders.Color = RGB(255, 0, 0)
            Sheets("feuil1").Range("B" & ligne).Interior.Color = RGB(0, 255, 0)
     
        End If
     
    Next ligne
     
    End Sub
    Je suis preneur de toute aide, si vous le voulez bien

    Merci d'avance.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Linkay Voir le message

    Bonjour,

    A tester par rapport au fichier mis en ligne :
    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
     
    Option Explicit
     
     
    Public MatriceReferences() As Variant
    Public IndexMatrice As Integer
     
    Sub RechercherLesReferences()
     
    Dim ShReferences As Worksheet, ShDonnees As Worksheet
    Dim AireReferences As Range, AireDonnees As Range
    Dim I As Long, J As Long, DerniereLigneReference As Long, DerniereLigneDonnees As Long
    Dim JeuDOnglets As Integer
    Dim ReferenceMax As String
     
        Erase MatriceReferences
     
        JeuDOnglets = Sheets.Count
        Sheets("Ce que j'ai (Feuil2)").Copy After:=Sheets(JeuDOnglets)
        Set ShReferences = ActiveSheet
        With ShReferences
             .Name = "Références " & Format(JeuDOnglets, "00")
             DerniereLigneReference = .Cells(.Rows.Count, "B").End(xlUp).Row
             Set AireReferences = .Range(.Cells(4, 2), .Cells(DerniereLigneReference, 2))
        End With
     
        Sheets("Ce que j'ai (Feuil1)").Copy After:=Sheets(JeuDOnglets)
        Set ShDonnees = ActiveSheet
     
        With ShDonnees
             .Name = "Data " & Format(JeuDOnglets, "00")
             DerniereLigneDonnees = .Cells(.Rows.Count, "B").End(xlUp).Row
             Set AireDonnees = .Range(.Cells(3, 2), .Cells(DerniereLigneDonnees, 2))
     
             IndexMatrice = 0
             For J = 1 To AireReferences.Count
                 If PresenceAsterisque(AireReferences(J)) Then
                    RechercheReferenceAvecAsterisque AireDonnees, AireReferences(J)
                 Else
                    RechercheReferenceSansAsterisque AireDonnees, AireReferences(J)
                 End If
             Next J
        End With
     
        If IndexMatrice > 0 Then
     
           ReferenceMax = ""
           For IndexMatrice = LBound(MatriceReferences) To UBound(MatriceReferences)
               If MatriceReferences(IndexMatrice) > ReferenceMax Then
                  ReferenceMax = MatriceReferences(IndexMatrice)
               End If
           Next IndexMatrice
     
           For I = 1 To AireReferences.Count
               With AireReferences(I)
                    If Mid(.Value, 1, Len(.Value) - 1) = Mid(ReferenceMax, 1, Len(ReferenceMax) - 1) Then
                       AireReferences(I) = ReferenceMax
                    End If
               End With
           Next I
     
        End If
     
     
        Set ShReferences = Nothing
        Set ShDonnees = Nothing
        Set AireReferences = Nothing
        Set AireDonnees = Nothing
     
     
    End Sub
     
    Function PresenceAsterisque(ByVal Chaine As String) As Boolean
     
       PresenceAsterisque = False
       If InStr(1, Chaine, "*", vbTextCompare) > 0 Then PresenceAsterisque = True
     
    End Function
     
    Function RechercheReferenceAvecAsterisque(ByVal AireDonnees2 As Range, ByVal ReferenceAChercher As String) As String
    Dim I As Long
     
     
       RechercheReferenceAvecAsterisque = ""
       For I = 1 To AireDonnees2.Count
     
                With AireDonnees2(I)
                     If .Value <> "" Then
                        If Mid(.Value, 1, Len(.Value) - 1) = Mid(ReferenceAChercher, 1, Len(ReferenceAChercher) - 1) Then
                           RechercheReferenceAvecAsterisque = .Value
                           .Interior.Color = RGB(112, 48, 160)
                           .Font.Color = RGB(255, 255, 255)
                           .Font.Bold = True
                           ReDim Preserve MatriceReferences(IndexMatrice) ' Pour restituer la référence la plus grande
                           MatriceReferences(IndexMatrice) = .Value
                           IndexMatrice = IndexMatrice + 1
                         End If
                      End If
                End With
     
       Next I
     
    End Function
     
    Function RechercheReferenceSansAsterisque(ByVal AireDonnees2 As Range, ByVal ReferenceAChercher As String) As String ' Restitue la référence la plus grande
    Dim I As Long
     
       RechercheReferenceSansAsterisque = ""
       For I = 1 To AireDonnees2.Count
                With AireDonnees2(I)
                     If .Value = ReferenceAChercher Then
                        RechercheReferenceSansAsterisque = .Value
                        .Interior.Color = RGB(112, 48, 160)
                        .Font.Color = RGB(255, 255, 255)
                        .Font.Bold = True
                      End If
                End With
       Next I
     
    End Function

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 14
    Par défaut
    Bonjour Eric,

    Tout d'abord merci pour ton aide. J'ai aussi avancé dans mon code mais je n'ai pas la même maitrise.
    J'ai donc testé ton code. Il fait ce que je désire sauf sur un point. A chaque fois que je le lance via un bouton il ne modifie pas directement les colonnes. Il me crée deux feuilles ("Data04" et "Références04") qui sont des copies de celles d'origines et il modifie ces dernières dans la mise en forme désiré.

    Comment faire pour qu'il modifie les feuilles d'origines, sans me créer deux feuilles supplémentaires à chaque fois que je clique sur le bouton ?

    Merci beaucoup en tout cas

Discussions similaires

  1. [XL-2013] Changer la couleur de certaines cellules d'une plage par vba
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 10/01/2018, 12h31
  2. Réponses: 9
    Dernier message: 11/09/2014, 09h51
  3. Réponses: 5
    Dernier message: 06/10/2011, 12h56
  4. Mettre en forme un commentaire d'une cellule
    Par K2O2$ dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/11/2007, 17h40
  5. Réponses: 4
    Dernier message: 30/06/2006, 15h26

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