Copier-Coller sous condition de couleur

Résolu
Andbed Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
Andbed Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Voici mon code :

Private Sub CommandButton1_Click()

  Dim Lig     As Long
  Dim Col     As String
  Dim NbrLig  As Long
  Dim NumLig  As Long
  
  Sheets("Synthèse").Activate ' feuille de destination
  
  Col = "E"                 ' colonne de la donnée non vide à tester
  NumLig = 5                ' début de la ligne à écrire dans la feuille de destination
  With Sheets("Fichier inv")     ' feuille source
  NbrLig = .Cells(500, Col).End(xlUp).Row   'zone à tester
  For Lig = 7 To NbrLig                     'définition du commencement et de la fin de la zone à tester
    If .Cells(Lig, Col).Font.Color = RGB(255, 0, 0) Then      'condition de test : si le texte de la cellule de la colonne E est rouge alors
       .Cells(Lig, Col).EntireRow.Copy                       'copie de la ligne entière
        NumLig = NumLig + 1                 'sélection de la ligne de destination
        Cells(NumLig, 1).Select             '
      ActiveSheet.Paste                     'Coller sur la feuille de destination
    End If
  Next                                      'boucle
  End With                                  'Fin de boucle
    
End Sub


Pourquoi ne fonctionne-t-il pas?
Merci de vos réponses.
A voir également:

6 réponses

melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Bonjour,

tout dépend de ton fichier.
Voici ce que fait ton code et il fonctionne :

- il balaie toute la colonne E de la feuille Fichier inv
- Si dans la colonne E, tu as une donnée écrite en rouge (RGB(255,0,0)) alors il copie la ligne dans la feuille synthèse.

Il faudrait voir ton fichier (en le mettant sur cjoin.com et mettant le lien ici) pour savoir ce que tu voudrais que ton code fait et qu'il ne fait pas.
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Normal si couleur vient d'une MFC
0
Andbed Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   1
 
Voici le lien du fichier en question : https://www.cjoint.com/?3LkiAqWXrVU

Les codes liés aux boutons du fichiers ont été réalisés via des solutions trouvées sur internet et de fait pas forcément optimisées...je ne maitrise pas VBA.

Et effectivement la couleur rouge est une MFC, de fait comment palier à ça?

En tout cas, merci vos conseils.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Ton code ne peux pas fonctionner car la couleur de ta police est obtenue par Mise en Forme conditionnelle.
Pour t'en persuader, clic droit sur une cellule concernée (E8 par exemple), Format de cellules, et regarde la couleur de ta police. Elle est bien en auto et donc pas RGB(255, 0, 0).

Il faut donc que ton test ne se fasse pas sur la couleur, mais sur la même formule que dans ta mise en forme conditionnelle.
En fait, lorsque tes cellules en colonne E sont rouges (ou vertes), c'est qu'une condition est remplie. Par conséquent, utilises cette condition dans ton If...
0

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

Posez votre question
Andbed Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   1
 
J'ai modifié la ligne condition dans le If :

If .Cells(Lig, Col).Font.Color = RGB(255, 0, 0) Then

Par :

If .Cells(Lig, Col).Value < CDate(Date + 13) Then

ça fonctionne mieux, mais le filtre me copie des lignes de la feuille "Fichier inv" qui n'ont pas de valeur, dans la feuille "Synthèse". De fait, je me retrouve avec une liste synthétique non représentative du travail que j'aurai a faire en réalité.

Comment palier à cette intégration de ligne en "trop" ?

Nouveau lien : https://www.cjoint.com/?3LkpARbfbmw
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Si tu ne veux pas les lignes ou il n'y a rien en colonne E :

If .Cells(Lig, Col).Value < CDate(Date + 13) And .Cells(Lig, Col).Value <> "" Then 


Prends l'habitude ici d'utiliser les balises code <> en haut de la zone de texte.
0
Andbed Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci pijaku, c'était pas grand chose, mais il fallait y penser.

Merci aussi aux autres intervenants pour leurs conseils avisés.
0