Gestion de couleur VBA

Lucie -  
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis coincé pour copier/coller des données dans des cellules particulières, peut-être quelqu'un pourrait m'aider?
J'ai un code actuel qui copie la colonne B d'une feuille sheet1 vers une feuille sheet2 d'un autre classeur excel. La colonne se copie entièrement sans distinction de couleurs.
Maintenant, j'aimerais copier uniquement les lignes dont la couleur est différente de la couleur 15 dans la feuille sheet1. Afin de coller dans les cellules de la colonne de la feuille sheet2 qui sont blanches (non hachurées).

Je vous joint un pdf pour illustrer mes propos :
http://www.cjoint.com/c/EGveOxQbTuc


Je n'arrive pas à trouver un code qui aurait l'avantage de copier/coller les données rapidement. En effet il y a 500 lignes à copier.

En vous remerciant,
Lucie


Code actuel:
Sub copy_paste_test()

' This sub copy data from Default file to DRR file of the ongoing year (ex : Fus DRR 2014.xlsm)
'
Application.ScreenUpdating = False
Source.Activate
Sheets("Sheet1").Select

Range("B5:B" & end_sh1).Select
Selection.Copy

slave.Activate
Sheets("Sheet2").Select

Range(Cells(13, day_cl), Cells(end_fu, day_cl)).Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Source.Activate
Sheets("Sheet1").Select

Application.ScreenUpdating = True

End Sub

8 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
0
Lucie
 
Merci pour le lien, j'obtiens donc le code ci-dessous mais j'ai une erreur à cause de la première ligne for...

Sub copy_paste_test()

'
Dim Col As Range, C As Range
Dim Row_paste As Range, R_paste As Range

Application.ScreenUpdating = False


For Each Col In Range("B5:B" & end_sh1).Columns
For Each C In Col.Cells
If C.Interior.ColorIndex = "15" Then
Else
Source.Activate
Sheets("Sheet1").Select
Selection.Copy
slave.Activate
Sheets("Sheet2").Select
End If
Next
Next

For Each Row_paste In Range(Cells(13, day_cl), Cells(end_fu, day_cl)).Columns
For Each R_paste In Row_paste.Cells
If R_paste.Interior.ColorIndex = "-1442" Then

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Source.Activate
Sheets("Sheet1").Select
Else
End If
Next
Next
Application.ScreenUpdating = True

End Sub
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Voici un exemple à toi de l'adapter:

Sub copy_paste_test()
Dim Col As Range, C As Range
Dim Row_paste As Range, R_paste As Range
Dim DernLigne As Long
DernLigne = Range("B65536").End(xlUp).Row
Application.ScreenUpdating = False
For Each Col In Range("B5:B" & DernLigne).Columns
For Each C In Col.Cells
If C.Interior.ColorIndex = "15" Then
'tu peux mettre ici le code pour la 2ème partie
Else
 C.Select
    Selection.Copy
     Sheets("Feuil2").Select
     Range(C.Address).Select
  ActiveSheet.Paste
   Sheets("Feuil1").Select
End If
Next
Next
Application.ScreenUpdating = True
End Sub



0
Lucie
 
Salut, après une journée je n'arrive toujours pas à comprendre comment faire.. Le mieux que j'ai réussi à faire et d'afficher la dernière ligne de la feuille1 sur toutes les lignes de la feuille2.... :(
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Le code que je t'ai donné copie la cellule de la Feuille1 au même emplacement dans la Feuille2.
Je ne vois pas comment opérer pour mettre les données dans les cellules non hachurées.
A moins de les stocker dans une colonne et ensuite de faire la boucle dans la feuille 2
J'étudie cela, je te tiens au courant
0
Lucie
 
D'accord, j'ai une idée pour éviter d'avoir à repérer les cellules hachurées de la feuille2.
Dans la feuille 1 si on doit copier la cellule B1 alors [la couleur de la cellule 1 est différente de 15 ou A1 contient obligatoirement des caractères (non vide)].

De cette façon je n'ai pas besoin de repérer les cellules hachurées de la feuille 2 puisque aucun caractère ne s'affichera dans les cellules hachurées. Je ne sais pas si je suis claire.

Dans le pdf que j'avais posté, on voit bien que les cellules oranges contenant des caractères de la feuille1 correspondent aux cellules hachurées dans la feuille 2..

J'espère que j'ai réussi à expliquer mon idée,
Merci encore pour l'aide
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Je ne comprends plus rien

Dans la feuille 1 si on doit copier la cellule B1

On commence la recherche en B5

Le code que j'ai donné ne suffit pas!

Il copie les cellules dans la feuille2!

L'as-tu essayé!
0
Lucie
 
Vous avez bien compris ce que je voulais faire mais j'avoue que c'était un mauvais exemple excusez moi .. Je voulais expliquer le principe mais effectivement je veux commencer par copier B5 de la feuille 1 dans I13 de la feuille 2 et ainsi de suite pour les cellules Bx de la feuille 1 tant que Ax de cette même feuille n'est pas coloré en 15 ou n'est pas vide. Si cette condition est vrai alors on copie Bx dans la colonne I ligne après ligne..Sinon on ne fait rien.
0
Lucie
 
J'ai détaillé ce que je souhaite en m'aidant du pdf :
Pour ligne5: [couleur(A5)<>15 ou A5 non vide ] donc copie B5 dans I13
Pour ligne 6: [couleur(A6)<>15 ou A6 non vide] donc copie B6 dans I14
Pour ligne 7:[couleur (A7)<>15 ou A7 non vide]donc copie B7 dans I15

Pour ligne 8 : [Couleur(A8)=15] donc on passe à la ligne 9
Pour ligne 9 : [couleur(A9)=15] donc on passe à la ligne 10
Pour ligne 10: [couleur (A10)<>15 ou A10 non vide]donc on copie B10 dans I16
...
Pour ligne 14 : [A14 vide] donc on passe à la ligne 15
Pour ligne 15: [couleur(A15)=15] donc on passe a la ligne 16...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Si tu connais les tenants et aboutissants, pourquoi ne pas le faire par des Formules sur les cellules, a la place de passer par une macro.
Poste un nouveau post , car je ne connais pas les formules

Bonne continuation
0
Lucie
 
Malheureusement c'est pas possible, il y a plusieurs fichiers différents à traiter automatiquement et durant l'utilisation on doit pouvoir rajouter des lignes dans la feuille 1 (en respectant les codes couleurs) sans empêcher la recopie automatique. Je continue à chercher une solution et je te tiens au courant.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Bonjour,

C'est une question excel, dans un forum excel.
Pourquoi poster un pdf ? Pour qu'on ait le plaisir d'essayer de le refaire à l'identique cellule par cellule ?
eric
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Bonjour eriiic, effectivement, nous ne pouvons pas faire grand chose sans des éléments concrets.

Lucie , voici un nouveau code qui copie les données de la feuille1 dans la colonne I de la feuille2 sur les mêmes lignes . A partir de là essaie d'adapter suivant tes besoins.

Je ne peux faire plus:

Sub copy_paste_test()
Dim Col As Range, C As Range
Dim DernLigne As Long
DernLigne = Range("B65536").End(xlUp).Row
Application.ScreenUpdating = False
For Each Col In Range("B5:B" & DernLigne).Columns
For Each C In Col.Cells
If C.Interior.ColorIndex = "15" Then
'rien
Else
C.Select
    Selection.Copy
    Sheets("Feuil2").Select
   Range("I" & C.Row).Select 'on colle dans la colonne I sur les mêmes lignes
  ActiveSheet.Paste
Sheets("Feuil1").Select
End If
Next
Next
 Application.ScreenUpdating = True
End Sub



0
Lucie
 
Bonjour, merci pour vos commentaires et votre aide. J'ai réussi à faire ce que je voulais (voir code ci-dessous), mais je viens de comprendre le soucis que j'avais, dans ma fiche 2 il y a des lignes cachées qui se remplissent alors que je ne le veux pas..

Donc j'ai encore une dernière question si je souhaite copier une colonne de la fiche 1 dans une colonne de la fiche 2 sans prendre en compte et remplir les lignes cachés comment pourrais je faire?

Merci
Lucie
Sub copy_paste_Ok()

'
' This sub copy data from Default file to DRR file of the ongoing year (ex : Fus DRR 2014.xlsm)


Dim WsS As Worksheet, WsC As Worksheet
Dim Cell As Range
Dim Plagecouleur As Range
Dim k As Variant



Application.ScreenUpdating = False
Source.Activate
Sheets("Sheet1").Select
k = 25
Set WsC = Sheets("Sheet2")
Set Plagecouleur = Columns("A").Rows("5:600")
For Each Cell In Plagecouleur

Cell.Select


If Selection.Interior.ColorIndex = 15 Or Selection.Value = "" Then

Else
'Copy Ok and Not-Ok
Selection.Offset(0, 1).Select
Selection.Copy
' slave.Activate
Source.Activate
Sheets("Sheet2").Select
Range("H" & k).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

k = k + 1
Source.Activate
Sheets("Sheet1").Select
End If

Next
Application.ScreenUpdating = True
Set C = Nothing: Set WsS = Nothing: Set WsC = Nothing

End Sub
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
La même chose qu'avec les cellule colorées:

Sub copy_cache()
Dim Col As Range, C As Range
Dim DernLigne As Long
DernLigne = Range("A65536").End(xlUp).Row
Application.ScreenUpdating = False
For Each Col In Range("A1:A" & DernLigne).Columns
For Each C In Col.Cells
If C.EntireRow.Hidden = True Then
'rien
Else
C.Select
    Selection.Copy
    Sheets("Feuil2").Select
   Range(C.Address).Select
  ActiveSheet.Paste
Sheets("Feuil1").Select
End If
Next
Next
 Application.ScreenUpdating = True
End Sub

0