XL 2016 Appeler cellule d'une autre feuille si colorée

camomille5

XLDnaute Nouveau
Bonjour à tous,

Je développe un fichier excel dans lequel je note mes stocks. Par conséquent, lorsque la valeur de la cellule est en dessous d'une limite que j'ai fixée, la case est colorée en rouge (via mise en forme conditionnelle). Et j'aimerai par la suite appeler la ligne, dont la cellule est rouge, dans une autre feuille afin de faire une feuille récapitulatif de ce que je dois racheter.
Après de longues recherches j'ai cru comprendre que c'était compliqué et qu'il fallait utiliser la macro mais je n'y connais pas grand chose.
Du coup si quelqu'un parmi vous connait la méthode ou peut me donner des indices je prend volontier!

Merci d'avance :)
 

job75

XLDnaute Barbatruc
Bonjour camomille5, bienvenue sur XLD,

Quels sont les noms de la feuille source et de la feuille des résultats ?

Dans quelle(s) colonne(s) sont les cellules colorées ?

Quelle est la valeur de la limite ?

Si vous lisez la Charte du forum vous verrez qu'il est utile de joindre un fichier représentatif du problème.

A+
 

camomille5

XLDnaute Nouveau
Bonjour job75,

Merci beaucoup pour votre réponse! Autant pour moi je n'en avais pas connaissance...
Je mets ci-joint un extrait de mon fichier. Toutes les réponses à vos questions sont dedans. Le seul bémol pour mon fichier c'est que les limites de stock ne sont jamais les mêmes pour chaque produit. J'ai donc du entrer à la main la valeur limite de chacun. Par conséquent on ne pourra pas utiliser une valeur universelle comme limite.
 

Pièces jointes

  • Exemple_stock.xlsx
    11.3 KB · Affichages: 8

job75

XLDnaute Barbatruc
Vos 2 MFC en colonne I n'ont guère de sens car :

- elles ne concernent chacune qu'une seule cellule

- elles ne font pas référence aux limites indiquées en colonne J.

Mais comme ce n'est pas le sujet de ce fil je ne m'occuperai que des cellules colorées en colonne I.

Pour copier les lignes colorées j'utilise cette macro évènementielle placée dans le code de la feuille "Recap" :
VB:
Private Sub Worksheet_Activate()
Dim P As Range, ncol%, i&, n&, j%
Set P = Feuil1.[A1].CurrentRegion
ncol = P.Columns.Count
ReDim resu(1 To P.Rows.Count, 1 To 7)
For i = 2 To P.Rows.Count
    If P(i, 9).DisplayFormat.Interior.ColorIndex <> xlNone Then 'si la cellule en colonne I est colorée, même par MFC
        n = n + 1
        For j = 1 To 6: resu(n, j) = P(i, j): Next j
        resu(n, 7) = P(i, ncol)
    End If
Next i
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A3] '1ère cellule de destination
    If n Then .Resize(n, 7) = resu
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 7).ClearContents 'RAZ en dessous
End With
Columns.AutoFit 'ajuste les largeurs
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Elle se déclenche automatiquement quand on active la feuille.

Notez l'utilisation de la propriété DisplayFormat [Edit] qui n'existe qu'à partir d'Excel 2010.

Bonsoir JHA.
 

Pièces jointes

  • Exemple_stock(1).xlsm
    19.9 KB · Affichages: 5
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour camomille5, JHA, le forum,

Autre solution dans ce fichier (2) avec cette macro :
VB:
Private Sub Worksheet_Activate()
Dim ncol%, tablo, i&, x$, y$, n&, j%
ncol = 11 'nombre de colonnes du tableau source, à adapter
tablo = Feuil1.[A1].CurrentRegion.Resize(, ncol) 'matrice, plus rapide
ReDim resu(1 To UBound(tablo), 1 To 7)
For i = 2 To UBound(tablo)
    x = CStr(tablo(i, 9)): y = CStr(tablo(i, 10))
    If IsNumeric(x) And IsNumeric(y) Then
        If CDbl(x) <= CDbl(y) Then
            n = n + 1
            For j = 1 To 6: resu(n, j) = tablo(i, j): Next j
            resu(n, 7) = tablo(i, ncol)
        End If
    End If
Next i
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A3] '1ère cellule de destination
    If n Then .Resize(n, 7) = resu
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 7).ClearContents 'RAZ en dessous
End With
Columns.AutoFit 'ajuste les largeurs
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
MFC sur toute la colonne I avec la formule =ESTNUM(I1)*(I1<=J1)

A+
 

Pièces jointes

  • Exemple_stock(2).xlsm
    20.3 KB · Affichages: 7

camomille5

XLDnaute Nouveau
Bonjour et merci beaucoup JHA et job75 pour vos super réponses! Je n'aurai jamais trouvé seule c'est certain!
J'ai gardé la méthode de job75 car elle m'évite de rajouter une colonne vrai/faux et j'ai remodifié la colonne "limite" du doc pour que je puisse faire comme sur votre dernière proposition job75.
Lorsque j'essaie de copier votre code dans un nouveau module de mon fichier j'ai un message "sub ou fonction non définie" en me montrant la première ligne "Private Sub Worksheet_Activate()"
Je suis donc entrain de rajouter mes feuilles dans votre fichier car je ne sais pas comment définir cette fonction/sub.
2e problème, j'ai plusieurs feuilles (et elles n'ont pas la même configuration parfois). J'ai essayé dans un premier temps de changer le numéro "Feuil2" ligne 4 mais cela ne change pas la feuille concernée dans le recap. Je vous met votre fichier avec une autre feuille en plus si jamais vous voulez vous appuyer dessus
J'ai essayé plusieurs choses c'est pour cela que je répond tardivement mais aucun succès!
Aussi, j'ai ajouté un module d'auto-activation des feuilles que j'ai trouvé sur internet, il semble marcher
 

Pièces jointes

  • Exemple_stock_modif - Copie.xlsm
    29.4 KB · Affichages: 3

job75

XLDnaute Barbatruc
J'ai bien dit que la macro Worksheet_Activate est placée dans le code de la feuille "Recap".

Clic droit sur l'onglet et Visualiser le code.

Elle n'apparaît pas dans la liste des macros, c'est normal.

C'est une macro évènementielle qui s'exécute automatiquement quand on active la feuille.

Le fichier du post #9 n'a aucun sens et n'a plus rien à voir avec ceux des posts précédents.
 

camomille5

XLDnaute Nouveau
Autant pour moi, je pensais que tous les codes étaient dans les modules ! Je n'avais jamais utilisé cettte face de Excel avant
Les premiers fichiers que je vous donnaient étaient des simplifiés, je pensais qu'il suffirait de changer le nom de la feuille pour pouvoir l'appliquer à mon fichier mais apparemment c'est plus compliqué que ça... :'D
Et oui vos fichiers sont tout a fait fonctionnels et rapides sinon aucun soucis de ce côté
 

job75

XLDnaute Barbatruc
S'il y a plusieurs feuilles voyez ce fichier (3).

Bien entendu si vous modifiez le nombre ou la position des colonnes il faut revoir la macro.

Et pour le faire vous même il faudra avoir compris comment elle fonctionne, ce n'est pas gagné :rolleyes:
 

Pièces jointes

  • Exemple_stock(3).xlsm
    23.8 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 912
Membres
101 837
dernier inscrit
Ugo