renseigner la valeur de cellules en fonction d'une couleur de police définie sur une

ruliann

XLDnaute Occasionnel
bonjour,

voilà je souhaiterais renseigner la valeur de certaines cellules en fonction d'une couleur de police définie sur une plage de cellule.

j'ai joins un fichier exemple : imaginons que 2 personnes ait réalisé des dépenses lors de vacances communes et qu'elles veuillent faire les comptes au retour de congés.

j'ai cherché du côté des MFC, mais sans succès.

merci pour vos réponses
 

Pièces jointes

  • exemple.xlsx
    14.1 KB · Affichages: 42
  • exemple.xlsx
    14.1 KB · Affichages: 53
  • exemple.xlsx
    14.1 KB · Affichages: 48

JCGL

XLDnaute Barbatruc
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

Bonjour à tous,

Les MeFC ne font qu'appliquer un format sur valeur pas l'inverse.

Es-tu ouvert à une autre disposition plus facile à manipuler ?

A+ à tous
 

VDAVID

XLDnaute Impliqué
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

Bonsoir ruliann, JGCL,

Une première piste par macro, à insérer dans un module (Alt + F11 ==> Insérer ==> Module):

Code:
Option Explicit
Option Base 1
Option Compare Text


Dim maPlage As Range, Cel As Range, CelluleStart As Range
Dim tabl()
Dim Ws As Worksheet
Dim i As Integer, h As Integer


Sub Récupération()
    
    
    'Feuille où doit être exécutée la macro
    Set Ws = ThisWorkbook.Sheets("Feuil1")
    
    'Plage où doit être exécutée la macro
    Set maPlage = Ws.Range("B2:K5")
    
    'Cellule de départ de réception des données
    Set CelluleStart = Ws.Range("B11")
    
    ReDim tabl(maPlage.Columns.Count * maPlage.Rows.Count, 1)
    
    For Each Cel In maPlage
    
        If IsNumeric(Cel.Value) = True Then
                
            For i = LBound(tabl(), 2) To UBound(tabl(), 2)
            
                If tabl(1, i) = Cel.Font.Color Then
                
                    For h = 2 To UBound(tabl())
                        
                        If tabl(h, i) = "" Then
                            
                            tabl(h, i) = Cel.Value
                            GoTo Borne
                        
                        End If
                    
                    Next h
                
                End If
                
            Next i
            
            ReDim Preserve tabl(UBound(tabl()), UBound(tabl(), 2) + 1)
            tabl(1, UBound(tabl(), 2)) = Cel.Font.Color
            tabl(2, UBound(tabl(), 2)) = Cel.Value
            
            
        End If
        
Borne:

    Next Cel
    
    For i = LBound(tabl(), 2) To UBound(tabl(), 2)
        
        For h = 2 To UBound(tabl())
            
            If tabl(h, i) = "" Then Exit For
            CelluleStart.Offset(h - 2, i - 1).Value = tabl(h, i)
            CelluleStart.Offset(h - 2, i - 1).Font.Color = tabl(1, i)
        
        Next h
    
    Next i
    
End Sub
 

Pièces jointes

  • exemple(1).xlsm
    24.2 KB · Affichages: 33
  • exemple(1).xlsm
    24.2 KB · Affichages: 43
  • exemple(1).xlsm
    24.2 KB · Affichages: 43

JCGL

XLDnaute Barbatruc
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

Bonjour à tous,

Avec un TCD et un SOMMEPROD()

A+ à tous

Edition : Salut VDavid et Salut + Bises à 00
 

Pièces jointes

  • JC Exemple.xlsx
    22 KB · Affichages: 32
  • JC Exemple.xlsx
    22 KB · Affichages: 39
  • JC Exemple.xlsx
    22 KB · Affichages: 78
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

Bonjour à toutes et à tous, bonjour + bises, JCGL :D,

Une autre macro à lancer après avoir nommé un onglet "Récapitulatif" :

Code:
Option Explicit
Sub Dépenses_de_X_et_de_Y()
    Application.ScreenUpdating = 0
    Dim c As Range
    With Sheets("Récapitulatif"): .Cells.Clear: .[a1] = "X": .[b1] = "Y": End With
    For Each c In Range("b2", Cells(Rows.Count, 2).End(3)).Resize(, 9)    '
        If IsNumeric(c) And c.Font.Color = 16711935 Then Sheets("Récapitulatif").Range("A" & Rows.Count).End(xlUp)(2) = c    'rose
        If IsNumeric(c) And c.Font.Color = 16711680 Then Sheets("Récapitulatif").Range("B" & Rows.Count).End(xlUp)(2) = c    'bleu
    Next
    Application.ScreenUpdating = -1
End Sub

A bientôt :)
 

ruliann

XLDnaute Occasionnel
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

merci à tous les 3 pour vos réponses

je pense que la solution de VDAVID est plus proche de ce que je recherche. N'y connaissant pas grd chose en macro, je recherche la ligne du code qui indique que les résultats doivent s'afficher en colonne D? car en appliquant la macro sur une autre colonne, les résultats s'affichent systématiquement sur la colonne D

@JCGL > le sommeprod va me servir pour autre chose :)

@DoubleZero > intéressant, mais si j'ai comme contrainte de ne pas pouvoir créer d'autre onglet? sur mon fichier?
 
Dernière édition:

VDAVID

XLDnaute Impliqué
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

Re tout le monde,

Après modifications, voici ce que ça donnerait.
J'ai mis des commentaires en plus pour adapter:

Code:
Option Explicit
Option Base 1
Option Compare Text


Dim maPlage As Range, Cel As Range, CelluleStart As Range
Dim tabl()
Dim Ws As Worksheet
Dim i As Integer, h As Integer


Sub Récupération()
    
    
    'Feuille où doit être exécutée la macro
    Set Ws = ThisWorkbook.Sheets("Feuil1")
    
    'Plage où doit être exécutée la macro
    Set maPlage = Ws.Range("B2:K5")
    
    'Cellule de départ de réception des données
    Set CelluleStart = Ws.Range("D11")
    
    ReDim tabl(maPlage.Columns.Count * maPlage.Rows.Count, 1)
    
    For Each Cel In maPlage
    
        If IsNumeric(Cel.Value) = True Then
                
            For i = LBound(tabl(), 2) To UBound(tabl(), 2)
            
                If tabl(1, i) = Cel.Font.Color Then
                
                    For h = 2 To UBound(tabl())
                        
                        If tabl(h, i) = "" Then
                            
                            tabl(h, i) = Cel.Value
                            GoTo Borne
                        
                        End If
                    
                    Next h
                
                End If
                
            Next i
            
            If tabl(1, 1) <> "" Then ReDim Preserve tabl(UBound(tabl()), UBound(tabl(), 2) + 1)
            tabl(1, UBound(tabl(), 2)) = Cel.Font.Color
            tabl(2, UBound(tabl(), 2)) = Cel.Value
            
            
        End If
        
Borne:

    Next Cel
    
    For i = LBound(tabl(), 2) To UBound(tabl(), 2)
        
        For h = 2 To UBound(tabl())
            
            If tabl(h, i) = "" Then Exit For
            
            'CelluleStart est la cellule de départ que tu peux définir plus haut (Set CelluleStart = Ws.Range("D11") )
            'Le * 3 correspond aux nombres de colonnes de décalage entre deux colonnes. Ici si tu commences à D, ça ferait D ==> G ==> J ==> M ...
            CelluleStart.Offset(h - 2, (i - 1) * 3).Value = tabl(h, i)
            CelluleStart.Offset(h - 2, (i - 1) * 3).Font.Color = tabl(1, i)
        
        Next h
    
    Next i
    
End Sub
 

ruliann

XLDnaute Occasionnel
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

j'imagine que le fait d'avoir nommé mon onglet "R juin - L juil" n'est pas une bonne idée...

j'ai un message d'erreur "impossible d'executer le code en mode arret". Je pense que ce sont les espaces qui mettent le bin's non?

edit: la réponse est oui
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

Bonjour à tous,

Ton message semble provenir du fait que tu as cliqué sur le bouton alors tu étais en débogage ou en mode pas à pas.

A+ à tous
 

ruliann

XLDnaute Occasionnel
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

une dernière question:

si je souhaite que cette macro soit utilisable sur plusieurs onglets (mais tjs dans le même fichier excel), j'imagine qu'il faut que je modifie la 1ère ligne :

Sub Récupération()


'Feuille où doit être exécutée la macro
Set Ws = ThisWorkbook.Sheets("R_juin_L_juil")

'Plage où doit être exécutée la macro
Set maPlage = Ws.Range("=R_juin_L_juil!$B$5:$CA$16")

'Cellule de départ de réception des données
Set CelluleStart = Ws.Range("M22")

ReDim tabl(maPlage.Columns.Count * maPlage.Rows.Count, 1)

For Each Cel In maPlage

If IsNumeric(Cel.Value) = True Then

For i = LBound(tabl(), 2) To UBound(tabl(), 2)

If tabl(1, i) = Cel.Font.Color Then

For h = 2 To UBound(tabl())

If tabl(h, i) = "" Then

tabl(h, i) = Cel.Value
GoTo Borne

End If

Next h

End If

Next i

If tabl(1, 1) <> "" Then ReDim Preserve tabl(UBound(tabl()), UBound(tabl(), 2) + 1)
tabl(1, UBound(tabl(), 2)) = Cel.Font.Color
tabl(2, UBound(tabl(), 2)) = Cel.Value


End If

Borne:

Next Cel

For i = LBound(tabl(), 2) To UBound(tabl(), 2)

For h = 2 To UBound(tabl())

If tabl(h, i) = "" Then Exit For

'CelluleStart est la cellule de départ que tu peux définir plus haut (Set CelluleStart = Ws.Range("D11") )
'Le * 3 correspond aux nombres de colonnes de décalage entre deux colonnes. Ici si tu commences à D, ça ferait D ==> G ==> J ==> M ...
CelluleStart.Offset(h - 2, (i - 1) * 150).Value = tabl(h, i)
CelluleStart.Offset(h - 2, (i - 1) * 150).Font.Color = tabl(1, i)

Next h

Next i

End Sub

est-ce que ceci serait la bonne modif pour indiquer à excel d'effectuer la macro quelque soit l'onglet?

'Feuille où doit être exécutée la macro
Set Ws = ThisWorkbook
 

VDAVID

XLDnaute Impliqué
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

Bonsoir tout le monde,

Pour l'appliquer sur plusieurs onglets tu dois insérer une boucle, qui va parcourir tous les noms d'onglets.
Je posterai une adaptation du code demain dans la journée
Bonne nuit ! :)
 

VDAVID

XLDnaute Impliqué
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

Bonjour à tous,

Voici le code pour exécuter la macro sur plusieurs feuilles.

Par contre, les plages de données à analyser doivent être au même endroit sur toutes les feuilles sinon il faudra adapter encore.

Le code:

Code:
Option Explicit
Option Base 1
Option Compare Text


Dim maPlage As Range, Cel As Range, CelluleStart As Range
Dim tabl(), tablSplit() As String
Dim Ws As Worksheet
Dim i As Integer, h As Integer, m As Integer
Dim Chaine As String


Sub Récupération()
    
    
    'Feuille où doit être exécutée la macro
    
    Application.ScreenUpdating = False
    'Ensemble des feuilles où doit être exécutée la macro, séparés par un ";"
    Chaine = "Feuil1;Feuil2;Feuil3"
    
    tablSplit = Split(Chaine, ";")
    
    For m = LBound(tablSplit()) To UBound(tablSplit())
    
    Set Ws = ThisWorkbook.Sheets(tablSplit(m))
    
    'Plage où doit être exécutée la macro
    Set maPlage = Ws.Range("B2:K5")
    
    'Cellule de départ de réception des données
    Set CelluleStart = Ws.Range("D11")
    
    ReDim tabl(maPlage.Columns.Count * maPlage.Rows.Count, 1)
    
    For Each Cel In maPlage
    
        If IsNumeric(Cel.Value) = True Then
                
            For i = LBound(tabl(), 2) To UBound(tabl(), 2)
            
                If tabl(1, i) = Cel.Font.Color Then
                
                    For h = 2 To UBound(tabl())
                        
                        If tabl(h, i) = "" Then
                            
                            tabl(h, i) = Cel.Value
                            GoTo Borne
                        
                        End If
                    
                    Next h
                
                End If
                
            Next i
            
            If tabl(1, 1) <> "" Then ReDim Preserve tabl(UBound(tabl()), UBound(tabl(), 2) + 1)
            tabl(1, UBound(tabl(), 2)) = Cel.Font.Color
            tabl(2, UBound(tabl(), 2)) = Cel.Value
            
            
        End If
        
Borne:

    Next Cel
    
    For i = LBound(tabl(), 2) To UBound(tabl(), 2)
        
        For h = 2 To UBound(tabl())
            
            If tabl(h, i) = "" Then Exit For
            
            'CelluleStart est la cellule de départ que tu peux définir plus haut (Set CelluleStart = Ws.Range("D11") )
            'Le * 3 correspond aux nombres de colonnes de décalage entre deux colonnes. Ici si tu commences à D, ça ferait D ==> G ==> J ==> M ...
            CelluleStart.Offset(h - 2, (i - 1) * 3).Value = tabl(h, i)
            CelluleStart.Offset(h - 2, (i - 1) * 3).Font.Color = tabl(1, i)
        
        Next h
    
    Next i
    
    Next m
    
    Application.ScreenUpdating = False
    
End Sub
 

ruliann

XLDnaute Occasionnel
Re : renseigner la valeur de cellules en fonction d'une couleur de police définie sur

bonjour

merci VDAVID

oui j'ai bien compris la nécessité de garder les mêmes coordonnées pour la plage de référence. Ce qui veut dire qui si, par exemple, j'insère 1 ligne sur cette plage de données pour l'onglet "moi de juin", il faudra que j'insère la même ligne sur tous les onglets (janvier/février, etc...) de manière à ce que la macro fonctionne

si je prévois suffisamment de lignes dès le début, ça devrait fonctionner

merci à toi
 

Discussions similaires

Statistiques des forums

Discussions
312 218
Messages
2 086 366
Membres
103 197
dernier inscrit
sandrine.lacaussade@orang