Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres Copier le contenu de plusieurs cellules en fonction de la couleur de fond

beauserge

XLDnaute Nouveau
Bonjour à tous

Voici mon problème..
Sur excel 2007, j'ai une feuille qui se nomme (Donations) contenant sur la même colonne des cellules (de A11 à A85) qui change de couleur de fond en fonction d'une formule MFC.

Je voudrais recopier uniquement les cellules ayant une couleur de fond bleu (couleur en décimal = 14922983)
sur une 2ème feuille se nommant (Recap)

j'ai tenté de faire une macro à partir d'exemple que j'ai pu trouver mais ça me renvoie une erreur d'execution 9 - "L'indice n'appartient pas à la selection" ??
Je cale car je suis vraiment novice en Vba.

Voici le code en question qui coince :

Sub Macro1()
'
Dim cell As Range
For Each cell In Sheets("Donations").Range("A11:A85")
If cell.Interior.Color = 14922983 Then
cell.Copy
Sheets("Recap").Select
Sheets("Recap").Cells(Range("H65535").End(xlUp).Row + 1, 8).Select

ActiveSheet.Paste
End If

Next cell
End Sub

-------------------------------

Un petit coup de main serait le bienvenu pour dénouer ce problème ..

Merci d'avance pour votre aide

A vous lire
Salutations
Serge
 
Solution
Le fil

Version avec effacement des données en feuille Recap

Ensuite, j'aurai un dilemme, quelle macro utiliser ? celle de Soan ou la tienne ? lol
Perso dans l'ordre je dirais tu prends celle que :
1) Tu pourras maintenir tout seul si tu as besoin d'une modification dans X temps
1) Tu comprends le mieux

3) Tu es capable de transposer dans un autre fichier pour d'autre besoin.

*Il y a deux 1) c'est fait exprès

@Phil69970

beauserge

XLDnaute Nouveau
Soan

Je te remercie encore pour tes explications très détaillées, (j'en demandais pas autant) mais c'est beaucoup plus
clair pour moi et cela me permet de bien comprendre la composition de la macro - C'est Super !

j'ai plusieurs choses à te demander :

a) Ma liste de nom va se composer de 100 noms maximum (ai-je besoin d'ajuster un paramétre dans la macro) si j'ai tout
compris je pense que non mais tu vas me confirmer

b) ma liste va commencer dans mon vrai fichier en A11- donc je modifie le "If dlg=10 then exit", j'ai bon ?

c) j'ai des informations en dessous de ces noms sur la colonne A (cellule A110) - j'imagine qu'il faut que
je les déplacer pour ne pas que la macro les prenne en compte vu que c'est la meme colonne - confirmes moi

d) en fait dans le tableau exemple que je t'ai donné, j'avais supprimé des colonnes entre la colonne A et la colonne E
"Ecart"- j'imagine qu'il faut que je modifie le chiffre entre parenthése au niveau du code (Offset) afin que l'écart
entre la colonne A et ma colonne "Ecart" reelle dans mon fichier (qui est H) soit bonne. - donc je dois avoir un chiffre qui
est 7, c'est ça ?

e) Et enfin, toutes les semaines, j'insére une colonne après la colonne I.
Cela aura t'il un impact sur le macro ?
Je penserai que non puisque les colonnes qui nous interressent dans la macro sont A et I donc avant celle que
j'insererai ..
Dis moi si j'ai bon ...

Voilà, j'espère que mes interrogations et reflexions sont claires ....

A te lire
Serge
 

Phil69970

XLDnaute Barbatruc
Le fil

@beauserge

Mes réponses pour mon fichier à tes questions

a) Non tu peux avoir 100 ou 100 000 noms si tu veux

b) Fichier modifié

c) Soit tu les déplaces soit une autre colonne s’arrête à la même hauteur que ta liste de noms et on met cette colonne

d) Il faut modifier la colonne E par la bonne colonne d'écart
If .Range("E" & i) <= 0 Then

e) Toutes les colonnes que tu mets après la colonne écart n'aura aucun impact sur la macro

Une partie de mes réponses est compatible avec le fichier de Soan , il va te faire une réponse circonstancié dont il a le secret

Voici le nouveau fichier j'ai mis quelques commentaires dedans.

*Merci de ton retour

@Phil69970
 

Pièces jointes

  • Copie couleur V3.xlsm
    25.5 KB · Affichages: 1

beauserge

XLDnaute Nouveau
Bonsoir Phil et merci de ta réponse..
c'est clair et les commentaires aussi

par contre y'a un truc qui me chagrine, c'est qu'à chaque fois que je clique sur le bouton Macro, les infos sont copiées sur la feuille Recap mais n'écrasent pas les anciennes données ?

Je voudrais que les anciennes données soit effacées et remplacées par les nouvelles lorsque je clique sur le bouton .

J'imagine que tu peux modifier le code en ce sens .

Ensuite, j'aurai un dilemme, quelle macro utiliser ? celle de Soan ou la tienne ? lol
Enfin, vaut mieux 2 bonnes macros que rien du tout

A te lire
Serge
 

Phil69970

XLDnaute Barbatruc
Le fil

Version avec effacement des données en feuille Recap

Ensuite, j'aurai un dilemme, quelle macro utiliser ? celle de Soan ou la tienne ? lol
Perso dans l'ordre je dirais tu prends celle que :
1) Tu pourras maintenir tout seul si tu as besoin d'une modification dans X temps
1) Tu comprends le mieux

3) Tu es capable de transposer dans un autre fichier pour d'autre besoin.

*Il y a deux 1) c'est fait exprès

@Phil69970
 

Pièces jointes

  • Copie couleur V4.xlsm
    26.1 KB · Affichages: 2

beauserge

XLDnaute Nouveau
Très bien Phil !

Tu as raison, je vais attendre les réponse de Soan et ensuite j'analyserai le code afin de voir celui qui me parait le plus simple pour pouvoir plus tard le réutiliser dans une autre fichier et le modifier facilement sans demander de l'aide ...

Vraiment grand merci encore.

A suivre pour la fin du topic bientôt
 

soan

XLDnaute Barbatruc
Inactif
@Serge (salut Phil)

pour ton post #17 :

Je te remercie encore pour tes explications très détaillées, (j'en demandais pas autant) mais c'est beaucoup plus
clair pour moi et cela me permet de bien comprendre la composition de la macro - C'est Super !

merci de ton retour !



a) exact : inutile de modifier le code ; tous les noms (100 ou même plus) seront pris en compte grâce à dlg.

b) exact : c'est bien If dlg = 10 Then Exit Sub ; car en-têtes en ligne 10 ; et en A10 : "Membres" ; mais attention : il faudra aussi remplacer For lg1 = 9 To dlg par : For lg1 = 11 To dlg !

c) exact : il ne doit pas y avoir d'infos sous le dernier nom de la liste, sinon la dernière ligne utilisée pour les noms ne sera pas correctement détectée : la valeur de dlg sera fausse ! il faut donc effectivement déplacer ailleurs tes infos de la cellule A110.

d) exact : si tu rajoutes 1 colonne entre A et E, ce sera .Offset(, 5) au lieu de .Offset(, 4) ; si tu rajoutes 2 colonnes entre A et E, ce sera .Offset(, 6) ; etc...

e) exact : si tu rajoutes des colonnes à droite de la colonne E actuelle (que ce soit à partir de F, de i, ou de L), ça n'aura pas d'impact sur le code VBA, et la macro marchera correctement.

ben tu as bon partout, à ton petit quizz ! (ça prouve que tu as bien compris tous les commentaires ! )


j'ai oublié de t'indiquer un avantage important de mon code VBA : comme ma macro fait ce qu'il faut sans avoir à tester la couleur de fond, ça fait qu'elle continuera de marcher correctement même si tu choisis plus tard une autre couleur que le bleu pour la règle de MFC ; par contre, si tu changes le test de cette même règle de MFC (qui est actuellement "<=0"), il faudra adapter le code !​

soan
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Le fil

@beauserge

Si tu passes à excel 2010 et plus tu pourras récupérer la couleur de la MFC avec le code VBA automatiquement

Code à remplacer UNIQUEMENT quand tu auras excel 2010 et plus

VB:
Sub Macro1()
Application.ScreenUpdating = False
Dim DerLigSrc&, DerLigDst&, Ma_Coul&

DerLigDst = Sheets("Recap").Range("A" & Rows.Count).End(xlUp).Row                   'Derniere ligne colonne A feuille recap
Sheets("Recap").Range("A10:A" & DerLigDst).ClearContents                            'Efface le contenu
Sheets("Recap").Range("A10:A" & DerLigDst).Interior.ColorIndex = xlColorIndexNone   'Efface la couleur

With Sheets("Donations")
    DerLigSrc = .Range("A" & Rows.Count).End(xlUp).Row
    DerLigDst = Sheets("Recap").Range("A" & Rows.Count).End(xlUp).Row + 9           'C'est la ligne à laquelle on va écrire dans la feuille Récap
    For i = 11 To DerLigSrc                                                         'La boucle commence à partir de la ligne 11
        If .Range("E" & i) <= 0 Then                                                'Colonne de qui correspond à l'écart
            Sheets("Recap").Range("A" & DerLigDst) = .Range("A" & i).Value
            DerLigDst = Sheets("Recap").Range("A" & Rows.Count).End(xlUp).Row + 1   'On écrit à la ligne suivante donc la derniere +1
        End If
        Ma_Coul = Range("A" & i).DisplayFormat.Interior.Color 'Récupere la couleur de la MFC
    Next i
End With
Sheets("Recap").Range("A10:A" & DerLigDst - 1).Interior.Color = Ma_Coul
End Sub

@Phil69970
 

beauserge

XLDnaute Nouveau
Bon je vois que c'est la guerre entre Soan et Phil pour qui gagnera au grand concours de Macro

Merci pour ces dernières précisions inintéressantes en effet de part et d'autres !

Je vais placer la macro ce soir ou demain dans mon fichier et ensuite si tout est Ok, je viendrai clôturer la discussion.
Je ne sais pas si je peux marque solution ok à chacun pour vous récompenser mais en tout cas vous le méritez bien !

Bonne soirée à vous
A+
Serge
 

Phil69970

XLDnaute Barbatruc
Le fil

Non c'est pas la guerre avec Soan au contraire on s'aime bien et on plaisante en MP
Je ne sais pas si je peux marque solution ok à chacun
Et non il faudra choisir

La logique est de prendre la solution que tu as mis dans ton fichier définitif mais l'essentiel n'est pas là mais ce que tu en as retenu et toutes les possibilités qu'excel nous offre.

@Phil69970
 

beauserge

XLDnaute Nouveau
Bonjour Soan et Phil

pour info: (je suis sur Excel 2007 depuis des années et je ne compte pas en changer pour l'instant car je maitrise plutôt bien).

Je reviens donc vers vous après avoir testé les 2 macros qui fonctionnent très bien dans mon fichier principal.
Au final, j'ai opté pour celle de Phil car je vais pouvoir l'adapter plus facilement sans aide extérieure dans d'autres fichiers que j'ai (j'ai déja fait des essais et c'est parfait)

Mais en tout cas, Soan je garde ta macro et tes explications précieusement car je suis sur qu'elle pourra me servir surement dans un projet quelconque.

Je tenais à vous remercier grandement une nouvelle fois tous deux car vous avez été super efficace et fait preuve d'une réactivité incroyable !
Sur ce, je clos le sujet à présent.

Bonne continuation et peut être à une autre fois sur le forum ...

Cordialement
Serge
 

beauserge

XLDnaute Nouveau
Bonjour à tous et Phil en particulier

J'ai un petit soucis avec une macro (la macro3 en l’occurrence dans mon fichier ci joint)
qui est sensé récupérer dans la colonne A "Membres" les noms des personnes qui ont fait un don supérieur à 0 (colonne H "Ecart") (soit 23 logiquement)

Et pourtant dans mon onglet Recap 2, il m'affiche 44 noms au lieu de 23 ???
Je ne comprends pas , tout me parait bon dans ma macro.

Bouton bleu en haut à droite "Dons fait= Recap2" pour déclencher la macro 3

Je tourne en rond depuis quelques heures et je ne vois pas la cause du problème !

NB : Les 2 autres macros 1 et 2 qui sont sur le même principe fonctionne parfaitement ...

Si quelqu'un peut me démeler cela, merci par avance pour votre aide.

A vous lire
Serge
 

Pièces jointes

  • macros 3 ne fonctionne pas correctement.xlsm
    69.3 KB · Affichages: 2

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…