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

copie cellule sous condition de couleur

  • Initiateur de la discussion Initiateur de la discussion creolia
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

creolia

XLDnaute Impliqué
Bonsoir a tous

je viens solliciter votre aide

j'ai fais une condition si la cellule valeur est inferieur a 10 il deviens rouge mais
maintenant je souhaiterais copier des cellules sous condition si ils sont à fond rouge copier la cellule dans la feuil 2 et si entre temps il redevienne dans ce blanc il s'enlève de la feuil 2

es ce possible svp

j'ai mis un fichier joins pour situer mon souhait merci de votre aide
 

Pièces jointes

Re : copie cellule sous condition de couleur

Bonjour creolia,

La macro adaptée correctement :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A:C]) Is Nothing Then Exit Sub
Dim plage As Range, ad1$, ad2$, formule$, cel As Range
Set plage = Range("D1:D" & Range("A65536").End(xlUp).Row)
[COLOR="Red"]ad1 = "Feuil1!C[-4]"[/COLOR]
ad2 = "Feuil1!" & plage.Address(ReferenceStyle:=xlR1C1)
formule = "=INDEX(" & ad1 & ",SMALL(IF(" & ad2 & "<10,ROW(" & ad2 & ")),ROWS(R2C:RC)))"
With Sheets("Feuil3")
  .Range("E2:G65536").ClearContents
  For Each cel In .Range("[COLOR="red"]E2:G[/COLOR]" & plage.Count)
    cel.FormulaArray = formule 'formule matricielle
    If IsError(cel) Then cel = "" Else cel = cel.Value
  Next
End With
End Sub

Mettez aussi les colonnes Date au bon format...

Vous en avez fini ?

A+
 
Re : copie cellule sous condition de couleur

MERCI pour ta patience j'ai presque fini reste juste une chose pourquoi avec la nouvelle formule quand je remet la valeur supérieure a 10 il ne s'efface pas automatiquement dans la feuil3 alors que avant sa se faisais merci encore pour ta patience car ce sais que la sa devient un peut lourd lol
 
Re : copie cellule sous condition de couleur

Re,

Ah ben voui, vous aviez mis la plage [A:C] au lieu de [A: D]...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [COLOR="Red"][A:D][/COLOR]) Is Nothing Then Exit Sub
Dim plage As Range, ad1$, ad2$, formule$, cel As Range
Set plage = Range("D1:D" & Range("A65536").End(xlUp).Row)
ad1 = "Feuil1!C[-4]"
ad2 = "Feuil1!" & plage.Address(ReferenceStyle:=xlR1C1)
formule = "=INDEX(" & ad1 & ",SMALL(IF(" & ad2 & "<10,ROW(" & ad2 & ")),ROWS(R2C:RC)))"
With Sheets("Feuil3")
  .Range("E2:G65536").ClearContents
  For Each cel In .Range("E2:G" & plage.Count)
    cel.FormulaArray = formule 'formule matricielle
    If IsError(cel) Then cel = "" Else cel = cel.Value
  Next
End With
End Sub

Aussi dans votre fichier joint voyez la MFC en colonne A, j'ai modifié la formule pour qu'elle fonctionne sur toute la colonne

A+
 

Pièces jointes

Re : copie cellule sous condition de couleur

LOL tu vas me détester je suis embêter encore avec mon tableau sa marche bien sauf que une fois mon vrais tableau don j'ai mis l'exemple fini ma valeur est dans la colonne AY et a chaque fois j'essaie de remplir Nom et prénom sa prend un temps fou saurais tu pourquoi stp
 
Re : copie cellule sous condition de couleur

Bonsoir creolia,

Deux choses dans votre fichier posaient problème :

1) En feuille DONNEE il y avait une colonne PRENOM en trop qui décalait tout... J'ai supprimé celle en colonne B.

2) En feuille DONNEE il y a des formules en colonne A qui renvoient le texte vide "". Donc
Range("A65536").End(xlUp).Row donne la ligne 370.

Pour trouver la dernière ligne ne contenant pas "" j'utilise maintenant la méthode Find :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A:AY]) Is Nothing Then Exit Sub 'test définissant LA ZONE CONCERNEE
Dim derlig As Long, plage As Range, ad1$, ad2$, formule$, cel As Range, n As Range
Application.ScreenUpdating = False
[COLOR="Red"]derlig = Columns("A").Find("?*", LookIn:=xlValues, SearchDirection:=xlPrevious).Row 'dernière ligne en colonne A où la valeur est <> ""[/COLOR]
Set plage = [COLOR="red"]Range("AY1:AY" & derlig)[/COLOR] 'définit la plage ou la valeur designe l'alerte
ad1 = "DONNEE!C[-10]" 'adresse relative de la 1ère colonne où se trouvent les donnes source [-10] différence des n° des colonnes B (source) et L (destination)
ad2 = "DONNEE!" & plage.Address(ReferenceStyle:=xlR1C1)
formule = "=INDEX(" & ad1 & ",SMALL(IF(" & ad2 & "<10,ROW(" & ad2 & ")),ROWS(R2C:RC)))"
With Sheets("ACCUEIL") 'partis réserné a la feuille cible ou se trouvent le tableau des alarme copier
  .Range("L7:N65536").ClearContents 'ici ou doit etre copier la premiere cellule alarme
  For Each cel In [COLOR="red"].Range("L7:N" & derlig)[/COLOR] 'plage où l'on entre la formule
    cel.FormulaArray = formule 'formule matricielle
    If IsError(cel) Then cel = "" Else cel = cel.Value
  Next
End With
End Sub

Le fichier sur cijoint.fr.

Edit : ajouté Application.ScreenUpdating = False qui gagne du temps de calcul.

A+
 
Dernière édition:
Re : copie cellule sous condition de couleur

Re,

Concernant la rapidité, il est certain qu'avec la formule matricielle l'exécution prend un certain temps.

Avec des valeurs jusqu'à la ligne 370, il faut 3,75 s sur mon ordi.

Edit : avec Application.ScreenUpdating = False la durée est réduite à 1,5 s. J'édite le post précédent.

A+
 
Dernière édition:
Re : copie cellule sous condition de couleur

merci job75 j'essaie tous cela dsl répondre aussi tard n'ayant pas de réponse je bossais sur votre toute première solution avec la formule. je teste sa et je vous tien au courant et encore merci pour tout
 
Re : copie cellule sous condition de couleur

une question peut ton designer le périmètre de calcule a partir de la ligne A8 au lieu de A1 car j'ai toujours des erreur du style impossible DE DÉFINIR LA PROPRIÉTÉ FormulaArray DE CLASSE RANGE comme j'utilise un formulaire pour renseigner la ligne 7 sa me plante a chaque fois je me suis dit si le périmètre d'utilisation pouvais se limiter a partir de A:8 sa résoudrais mon soucis quand pensez vous.
 
Re : copie cellule sous condition de couleur

Re,

Bon on va arrêter avec la formule matricielle.

Je l'avais donnée dans la feuille de calcul au début, mais en VBA ce n'est pas terrible, surtout pour le temps de calcul...

Voici une solution bien mieux adaptée.

Elle utilise le filtre automatique ainsi qu'un document provisoire auxiliaire pour la copie de la plage filtrée :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A:AY]) Is Nothing Then Exit Sub 'test définissant LA ZONE CONCERNEE
Dim derlig As Long
Application.ScreenUpdating = False
Me.AutoFilterMode = False 'désactive le filtre automatique s'il est en place
derlig = Columns("A").Find("?*", LookIn:=xlValues, SearchDirection:=xlPrevious).Row 'dernière ligne en colonne A où la valeur est <> ""
[COLOR="Red"]Range("AY6:AY" & derlig)[/COLOR].AutoFilter Field:=1, Criteria1:="<10" 'filtre sur la colonne AY
Sheets("ACCUEIL").Range("L7:N65536").ClearContents 'vide toute la zone de restitution
Workbooks.Add 'nouveau document provisoire
Range("B6:D" & derlig).Copy ActiveSheet.Range("B6") 'copie la plage (filtrée) vers le document provisoire
ThisWorkbook.Sheets("ACCUEIL").Range("L7:N" & derlig) = ActiveSheet.Range("B7:D" & derlig).Value 'copie les valeurs sur la plage de restitution
ActiveWorkbook.Close False 'fermeture/suppression du document provisoire
Me.AutoFilterMode = False 'désactive le filtre automatique
End Sub

Même avec 370 lignes, la durée du calcul est de 0,04 s.

Le fichier sur cijoint.fr

Edit : j'avais mal défini la zone à filtrer (en rouge).

Bonne nuit.
 
Dernière édition:
Re : copie cellule sous condition de couleur

Bonjour creolia,

Un peu pour le fun, voici une dernière solution.

Elle utilise 3 tableaux, et elle est très rapide (0,01 s pour 370 lignes) :

Code:
Option Base 1

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A:AY]) Is Nothing Then Exit Sub 'test définissant LA ZONE CONCERNEE
Dim derlig As Long, tablo, tablotest, tablofinal(), i As Long, n As Long
derlig = Columns("A").Find("?*", LookIn:=xlValues, SearchDirection:=xlPrevious).Row 'dernière ligne en colonne A où la valeur est <> ""
tablo = Range("B7:D" & derlig).Value2 'plage des données à copier - Value 2 à cause des dates
tablotest = Range("AY7:AY" & derlig) 'plage à tester
For i = 1 To UBound(tablotest)
  If tablotest(i, 1) < 10 Then
    n = n + 1 'compte les lignes copiées
    ReDim Preserve tablofinal(3, n) 'tableau de restitution évolutif (seule la 2ème dimension peut évoluer)
    tablofinal(1, n) = tablo(i, 1): tablofinal(2, n) = tablo(i, 2): tablofinal(3, n) = tablo(i, 3) 'remplissage du tableau de restitution
  End If
Next
With Sheets("ACCUEIL")
  .Range("L7:N65536").ClearContents 'vide la plage de restitution
  .Range("L7").Resize(n, 3) = Application.Transpose(tablofinal) 'copie le tableau de restitution
End With
End Sub

Le fichier sur cijoint.fr

A+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
137
Réponses
9
Affichages
209
Réponses
3
Affichages
372
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…