Extraction de cellule selon le style

jeromecools

XLDnaute Nouveau
Bonjour,
Je voudrais faire une recherche de cellule selon le style et récupérer ces cellules dans une nouvelle feuille.
Qulqu'un pourrais m'aider avec une solution ?
Merci pour votre aide,
jerome
 

jeromecools

XLDnaute Nouveau
Re : Extraction de cellule selon le style

Voici un petit fichier pour me faire comprendre.

Le but c'est de récupérer les case en jaune (donc le style de recherche c'est fond jaune) pour avoir une liste des contenu sur une colonne dans une nouvelle feuille.
 

Pièces jointes

  • ExtraireLesCellulesJaunes.xls
    30 KB · Affichages: 54

jeromecools

XLDnaute Nouveau
Re : Extraction de cellule selon le style

Merci beaucoup Staple1600, mais je ne comprend pas tout dans le code.
Je débute avec VBA.
Je suis beaucoup plus a l'aise avec PHP. Hors, VBA me semble plus simple au niveau des expressions, mais je ne comprend pas la logique.

Mon plan :
1) Chercher et sélectionner les cellules jaunes dans la première feuille
2) ajouter chaque réponse dans un tableau en VBA
3) extraire mes réponses du tableau dans une collone, sur une nouvelle feuille.

Est-ce bien ce que dois faire ?

Merci pour ton aide
 

Staple1600

XLDnaute Barbatruc
Re : Extraction de cellule selon le style

Re et bienvenue sur le forum, jeune padawan en VBA.


Un exemple basique (à adapter au besoin)

Code:
Sub a()
Dim c As Range, i As Long, t() As Variant
i = 1
ReDim t(1 To 100)
For Each c In ActiveSheet.UsedRange
If c.Interior.ColorIndex = 6 Then
t(i) = c.Text
i = i + 1
End If
Next c
Feuil2.[A1].Resize(100) = Application.Transpose(t)
End Sub
Il existe une notion de Style dans Excel qui diffère de la couleur de fond d'une cellule
(d'où mon précédent message)

Je te laisse tester ce nouveau code qui fait ce que tu demandes
(voir le résultat sur la feuille 2)
Si tu as des questions, je reviendrai commenter le code VBA.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Extraction de cellule selon le style

Re

Ce code est loin d'être nickel, mais il fait ce que demandait ta question.
Je suis un simple membre du forum qui pratique Excel (depuis Excel 4 sous Windows 3.11) avec curiosité.

Tu as compris tout le code ?

Pas besoin de commentaires ?

PS: je te mets une variante (qui devrait nécessiter moins d'adaptation future)
Code:
Sub aa()
[COLOR=Green]'Déclarations[/COLOR]
Dim c As Range, i As Long, s_tr$, t As Variant
[COLOR=Green]'On parcourt chaque cellule de la zone active[/COLOR]
For Each c In ActiveSheet.UsedRange
[COLOR=Green]'Si la couleur de fond est jaune (cf : 6)[/COLOR]
If c.Interior.ColorIndex = 6 Then
s_tr = s_tr & c.Text & "²"
[COLOR=Green]'alors on concatène la "valeur" de la cellule dans une chaine[/COLOR]
End If
Next c
[COLOR=Green]'on transforme cette chaine en tableau (array)[/COLOR]
t = Split(s_tr, "²")
[COLOR=Green]'On recopie ces valeurs en feuille 2[/COLOR]
Feuil2.[A1].Resize(UBound(t)) = Application.Transpose(t)
End Sub
 
Dernière édition:

jeromecools

XLDnaute Nouveau
Re : Extraction de cellule selon le style

Avec ton premier code j'ai fait ceci :

Code:
' Macro pour extraire les données contenue dans les cellules ColorIndex jaunes (6)
Sub ExtraireLesDonneesSurFondJaunes()
    Dim c As Range, n As Long, i As Long, t() As Variant
    n = 1
    i = 1
    ' Dans la feuille active, je cherche les cellules jaunes
    ' Je veux d'abord chercher le nombre de cellule jaunes
    For Each c In ActiveSheet.UsedRange
        If c.Interior.ColorIndex = 6 Then
        n = n + 1
        End If
    Next c
    ' Je dimensionne mon tableau sur le nombre de valeur trouvée
    ReDim t(1 To n)
    ' Et je copie les données dans mon tableau t()
    For Each c In ActiveSheet.UsedRange
        If c.Interior.ColorIndex = 6 Then
        t(i) = c.Text
        i = i + 1
        End If
    Next c
    ' Je cree maintenant une nouvelle feuille après les autres existante
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ' Je copie les données dans une colonne
    ActiveSheet.[A1].Resize(n) = Application.Transpose(t)
End Sub

Je pense que faire 2 fois la même recherche est stupide... dans mon code

Ta 2e solution est bien, mais il ne faut pas de * dans une cellule...
 

Staple1600

XLDnaute Barbatruc
Re : Extraction de cellule selon le style

Re


Merci beaucoup Staple1600, mais je ne comprend pas tout dans le code.
Je débute avec VBA.

Pour un débutant, tu as l'air plutôt doué, bravo ;)

Ta 2e solution est bien, mais il ne faut pas de * dans une cellule...
De quoi parles-tu ?

Ma seconde macro permet justement de ne pas avoir à faire un ReDim et évite de faire 2 boucles.
 

jeromecools

XLDnaute Nouveau
Re : Extraction de cellule selon le style

Je parle de ton sigle : "²". Je pensais que c'était "*".
Peux-être que le raccourci pour une tabulation est mieux, mais je ne sais pas ce que c'est.
Bon, au final, je préfère ta méthode.

Merci pour tes commentaires ;)
 

Staple1600

XLDnaute Barbatruc
Re : Extraction de cellule selon le style

Re

Le ² fait ici office de séparateur dans la fonction Split


Essayes cet exemple tu comprendras mieux

Code:
Sub test()
Dim s_tr$, t
s_tr = "abc²def²ghi²jkl"
t = Split(s_tr, "²")
MsgBox t(0) & vbLf & t(1) & vbLf & t(2) & vbLf & t(3)
End Sub
 

jeromecools

XLDnaute Nouveau
Re : Extraction de cellule selon le style

oui, ca ne marche pas.

Dommage qu'en VBA les tableaux ne sont pas plus exploitable facilement. C'est pratique pour mettre des données et les traiter.
Mais si il faut toujours connaitre le nombre de donnée qu'on veux y mettre c'est moins utile.
Ta solution devient la meilleur.
 

Discussions similaires

Réponses
40
Affichages
1 K
Réponses
3
Affichages
214

Statistiques des forums

Discussions
312 752
Messages
2 091 663
Membres
105 038
dernier inscrit
Fred BELLEROSE