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 :

Recupéré le texte et sa couleur de fond


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Par défaut Recupéré le texte et sa couleur de fond
    Bonjour,

    J'ai ce code qui me permet de chercher des produits dans le classeurs, si il les trouvent il me copie la valeur du texte qui est dans la case dans un autre onglet, j'aimerais aussi récupéré la couleur de la case en + du texte, mais je ne vois pas trop ou je pourrais l'ajouter

    Merci d'avance

    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
    With Worksheets("Panier")
        'On se place sur B9
        Set oRng = .Range("B9")
        'On parcours de B9 à la dernière ligne non-vide
        For i = 0 To .Cells(.Rows.Count, 1).End(xlUp).Row - 1
            'Si on trouve "Tablette" ou "Produits" (on peut enlever le LCase si souhaité)
            'If LCase(oRng.Offset(i, 0)) = "Tablette" Or LCase(oRng.Offset(i, 0)) = "Produits" Then
             If oRng.Offset(i, 0) = "Tablette" Or oRng.Offset(i, 0) = "Produits" Then
                'On vérifie qu'on a des éléments à sa droite
                If .Cells(oRng.Offset(i, 1).Row, .Columns.Count).End(xlToLeft).Column >= oRng.Offset(i, 1).Column Then
                    'Si oui, on récupère la range des valeurs
                    Set oProd = Range(oRng.Offset(i, 1), .Cells(oRng.Offset(i, 1).Row, .Columns.Count).End(xlToLeft))
                    'qu'on parcours.
                    For Each oCell In oProd
                        'Si on trouve quelque chose
                        If oCell <> "" Then
                            n = n + 1
                            'on sauvegarde les éléments.
                            ReDim Preserve oTable(1 To 2, 1 To n)
                            oTable(1, n) = oCell
                            oTable(2, n) = oCell.Offset(1, 0)
                        End If
                    Next oCell
                End If
            End If
        Next i
    End With

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut
    Salut,

    Ici je pense, il faut redimensionner le tableau à 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ReDim Preserve oTable(1 To 3, 1 To n)
    oTable(1, n) = oCell
    oTable(2, n) = oCell.Offset(1, 0)
    oTable(3, n) = oCell.Color
    Gdal

  3. #3
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ReDim Preserve oTable(1 To 3, 1 To n)
    oTable(1, n) = oCell
    oTable(2, n) = oCell.Offset(1, 0)
    oTable(1, n) = oCell.Color
    Est-ce que cette ligne devrait être à 3 au lieu de 1? oTable(1, n) = oCell.Color.

    Merci
    (dans les 2 cas j'ai une erreur)

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut
    Les messages se sont croisés. Il y avait effectivement une erreur dans mon 1er post.

  5. #5
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Par défaut
    Merci pour la correction,

    Est-ce que je devrais définir oCell.Color dans les variables?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Recherche()
    'Déclaration des variables
    Dim oRng As Range
    Dim i As Integer, n As Integer
    Dim oProd As Range, oCell As Range
    Dim oTable() As String

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut
    Je viens d'essayer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'on sauvegarde les éléments.
    ReDim Preserve oTable(1 To 3, 1 To n)
    oTable(1, n) = oCell
    oTable(2, n) = oCell.Offset(1, 0)
    oTable(3, n) = oCell.DisplayFormat.Interior.Color
    Debug.Print oRng.Offset(i, 0) & " - " & oTable(1, n) & " - " & oTable(2, n) & " / " & oCell.Offset(1, 0).AddressLocal & " - " & oTable(3, n)
    Fonctionne!
    La ligne debug.print est utilisée pour le débugger (Affichage / Fenêtre d'exécution)

    Gdal

  7. #7
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Par défaut
    Merci,

    Je n'ai plus d'erreurs, tout fonctionne comme avant, mais sans que les couleurs apparaissent dans l'autre onglet malheureusement

    Je vais mettre le code au complet au lieu de juste une partie, ça ne peut pas nuire.

    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
    Sub Recherche()
    'Déclaration des variables
    Dim oRng As Range
    Dim i As Integer, n As Integer
    Dim oProd As Range, oCell As Range
    Dim oTable() As String
     
    'Avec Feuil5 (feuille de données)
     
    With Worksheets("Panier")
        'On se place sur B9
        Set oRng = .Range("B9")
        'On parcours de A1 à la dernière ligne non-vide
        For i = 0 To .Cells(.Rows.Count, 1).End(xlUp).Row - 1
            'Si on trouve "Tablette" ou "Produits" (on peut enlever le LCase si souhaité)
            'If LCase(oRng.Offset(i, 0)) = "Tablette" Or LCase(oRng.Offset(i, 0)) = "Produits" Then
             If oRng.Offset(i, 0) = "Tablette" Or oRng.Offset(i, 0) = "Produits" Then
                'On vérifie qu'on a des éléments à sa droite
                If .Cells(oRng.Offset(i, 1).Row, .Columns.Count).End(xlToLeft).Column >= oRng.Offset(i, 1).Column Then
                    'Si oui, on récupère la range des valeurs
                    Set oProd = Range(oRng.Offset(i, 1), .Cells(oRng.Offset(i, 1).Row, .Columns.Count).End(xlToLeft))
                    'qu'on parcours.
                    For Each oCell In oProd
                        'Si on trouve quelque chose
                        If oCell <> "" Then
                            n = n + 1
                            'on sauvegarde les éléments.
                            ReDim Preserve oTable(1 To 3, 1 To n)
                            oTable(1, n) = oCell
                            oTable(2, n) = oCell.Offset(1, 0)
                            oTable(3, n) = oCell.DisplayFormat.Interior.Color
                            'Debug.Print oRng.Offset(i, 0) & " - " & oTable(1, n) & " - " & oTable(2, n) & " / " & oCell.Offset(1, 0).AddressLocal & " - " & oTable(3, n)
     
                        End If
                    Next oCell
                End If
            End If
        Next i
    End With
     
    'Avec Feuil6 (feuille de résultats)
    With Worksheets("Resultats")
        'On se place après la dernière cellule non-vide de la colonne 1
        Set oRng = .Cells(.Rows.Count, 2).End(xlUp)
        'et on y écrit les résultats.
        For i = LBound(oTable, 2) To UBound(oTable, 2)
            oRng.Offset(i, 0) = oTable(1, i)
     
    'On ne déplace ici plus de 1 mais de 3 colonnes l'écriture des résultats.
            oRng.Offset(i, 3) = oTable(2, i)
                Next i
    End With
     
     
    End Sub
    Nom : panier.JPG
Affichages : 227
Taille : 41,2 Ko

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut
    Au début je pensais qu'il suffisait de faire l'opération inverse. Seulement DisplayFormat.Interior.Color est lecture seule...
    Dans les 2 partie du code, .Interior.Color suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oTable(3, n) = oCell.Interior.Color
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRng.Offset(i, 3).Interior.Color = oTable(3, i)
    Gdal

  9. #9
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Par défaut
    De plus en plus près, il ne manque pas grand chose, soit la couleur doit etre sur la colonne 2, mais le texte doit rester également

    Nom : presque.JPG
Affichages : 181
Taille : 56,5 Ko

    merci de ton aide en passant très apprécié

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut
    Bonjour,

    Pour avancer il faut aussi chercher à comprendre le code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'et on y écrit les résultats.
        For i = LBound(oTable, 2) To UBound(oTable, 2)
            oRng.Offset(i, 0) = oTable(1, i)
    En modifiant la valeur de offset? 3->0

    Gdal

  11. #11
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Je me permets.

    Le report d'une variable Tableau sur une feuille de travail peut s'effectuer en une seule ligne à l'aide des méthodes
    Resize et WorkheetFunction.Transpose
    (éventuellement .Offset)

    Exemple à adapter à ton cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("lesrésultats").Range("A3").Resize(Ubound(montablo,2), Ubound(montablo,1)) =WorksheetFunction.Transpose(montablo)
    Dans la méthode Resize, les index Ubound sont inversés afin d'assurer la concordance avec la fonction Transpose

  12. #12
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Par défaut
    Citation Envoyé par Gdal Voir le message
    Au début je pensais qu'il suffisait de faire l'opération inverse. Seulement DisplayFormat.Interior.Color est lecture seule...
    Dans les 2 partie du code, .Interior.Color suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oTable(3, n) = oCell.Interior.Color
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRng.Offset(i, 3).Interior.Color = oTable(3, i)
    Gdal
    Je pensais je devais remplacer cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRng.Offset(i, 3) = oTable(2, i)
    par celle que tu m'as donné... ça fonctionne maintenant

    Merci

  13. #13
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    As-tu adapté la méthode que j'ai formulée pour informer ta feuille de résultats à partir de ta variable Tableau?
    Je te conseille de la comprendre PUIS de l' appliquer.
    Reviens si nécessaire.

  14. #14
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 32
    Par défaut
    Je suis encore au stade très débutant...donc oui je vais essayer de la décoder et la réessayer

    Merci

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

Discussions similaires

  1. Couleur de texte, couleur de fond
    Par defluc dans le forum Delphi
    Réponses: 6
    Dernier message: 17/05/2006, 15h15
  2. Couleur de fond sur un "text"
    Par Livingstone dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/01/2006, 12h02
  3. [Tlistview] Couleur de fond et de texte d'une ligne
    Par radimby dans le forum Composants VCL
    Réponses: 8
    Dernier message: 21/12/2005, 09h17
  4. Changer la couleur de fond d'un champ "text"
    Par nic211 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/02/2005, 13h50
  5. Réponses: 4
    Dernier message: 23/06/2004, 14h30

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