Garder à l'identique les cellules lors d'une macro

Résolu
Philbert29 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -  
Philbert29 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

je crée une macro. Je sais comment faire. Enfin, pas complètement puisque je fais appel à vous. :-)

Au cours de la macro, je veux faire un tri. Mais certaines cellules ont les caractères en rouge, d'autres en vert. Quand je regarde ce que la macro a donné, je retrouve les couleurs, mais par sur les bonnes cellules .

Qu'est ce que je rate ?

Merci pour vos réponses

13 réponses

  1. Philbert29 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   2
     

    Merci Bruno

    J'ai réussi. J'ai tripatouillé dans la macro à partir de tes infos et ça marche.

    Je ne saurai pas trop comment  j'ai fait mais le résultat est là.

    Encore merci.

    1
  2. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
     

    Bonjour,

    Si tu peux me montrer :

    ton code de tri
    comment les couleurs sont appliquées

    je peux te dire exactement où ça bloque...


    0
  3. Philbert29 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   2
     

    Bonjour

    Je ne sais pas si c'est cela que tu souhaites.

    J'ai fait une capture de la feuille excel après utilisation de la macro. Tu peux constater que les couleurs ne sont pas avec la bonne cellule.

    Et la capture de la macro concernée, en espérant que c'est cela que tu souhaites.

    Merci pour ton aide.

    0
  4. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
     

    Re suite...

    Merci pour la capture, elle est très parlante 
    Et là, on peut être beaucoup plus précis.

    Ce que tu observes confirme à 99% ceci :

    Tu tris les valeurs, mais PAS toute la plage (ou pas correctement liée)

    L’erreur classique en VBA

    Très souvent, on a un code du type :

    Range("B2:B20").Sort Key1:=Range("B2"), Order1:=xlDescending

    Ça trie uniquement la colonne des scores

    MAIS PAS les noms à côté

    Ce qu’il faut faire

    Tu dois trier toute la zone, par exemple :

    Range("A2:B20").Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlNo


    Là :

    les noms
    les valeurs
    les couleurs

    tout reste aligné 

    Version propre (recommandée)

    Encore mieux :

    With ActiveSheet.Sort
        .SetRange Range("A2:B20")
        .SortFields.Clear
        .SortFields.Add Key:=Range("B2:B20"), Order:=xlDescending
        .Header = xlNo
        .Apply
    End With

    Petit test simple

    Pour vérifier chez toi :

    Prends ton tableau
    Fais un tri manuel dans Excel (menu Données → Trier)
    Si tout reste OK → ton VBA est en cause
    Si ça casse aussi → problème de structure


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

    Posez votre question
  6. Philbert29 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   2
     

    Je comprends ce que tu me dis, mais je n'y arrive pas.

    Quand je fais manuellement, les  prénoms ont leur bon score mais pas la bonne couleur.

    Je fais col 1-2 Clt c, puis 4-5 collage spécial valeur

    0
  7. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
     


    Pourquoi ça ne marche pas

    Quand tu fais :

    collage spécial → valeurs

    Excel copie :

    les nombres
    le texte
    PAS les formats (donc pas les couleurs)

    Donc :

    les scores sont bons 
    les prénoms sont bons 
    les couleurs restent celles d’avant 

    LES SOLUTIONS (selon ton besoin)
    Solution 1 — Copier AVEC les formats (le plus simple)

    Au lieu de :

    Collage spécial → Valeurs

    fais :

    Collage spécial → Valeurs + formats

    Solution 2 — Copier uniquement les formats après

    Coller les valeurs
    Puis refaire :

    Collage spécial → Formats

    LA VRAIE BONNE MÉTHODE (recommandée)

    Ne copie plus du tout

    Fais ton tri directement sur le tableau final

    Exemple :

    Tu travailles directement en colonnes 4-5
    Tu fais le tri là-dessus

    Comme ça :

    plus de copie
    plus de problème de couleur

    Si tu veux

    Je peux te :

    corriger ta macro complète

    Envoie-moi ton code


    0
  8. Philbert29 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   2
     

    Je vais effectivement te demander de corriger ma macro.
    Pour info, et c'est peut-être la raison, la valeur des cellules proviennent d'une autre feuille .

    Je t'envoie donc la feuille 1, la feuille 2 avec l'indication pour une cellule de la formule (les autres en dessous sont similaires et avec l'utilisation de la macro qui désespérément ne veut pas garder les bonnes couleurs.

    Et 

    bien sûr la macro.

    Merci

    0
  9. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
     

    Merci !

    Tes erreurs :

    Ta macro fait ça :

    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats

    Problème :

    Tu copies les valeurs + formats numériques
    MAIS PAS les couleurs de police

    Et il y a un 2ème problème

    Tu fais un .Select + Selection

    C’est :

    fragile
    source d’erreurs
    inutile

    CORRECTION SIMPLE (ta macro corrigée)

    Sub Macro4()
    
        Dim ws As Worksheet
        Set ws = ActiveWorkbook.Worksheets("résultats")
        
        ' Copie complète (AVEC couleurs)
        ws.Range("G2:H19").Copy Destination:=ws.Range("K2")
        
        ' Tri propre
        With ws.Sort
            .SortFields.Clear
            .SortFields.Add Key:=ws.Range("L2:L19"), _
                SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
            
            .SetRange ws.Range("K2:L19")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    
    End Sub


    IMPORTANT (dans TON cas précis)

    Tu dis :

    les valeurs viennent d'une autre feuille

    Donc :

    les couleurs ne viennent PAS des formules
    elles sont déjà dans G:H

    donc la copie complète est la bonne solution

    Si tu veux aller plus loin

    Tu peux aussi :

    automatiser les couleurs selon le score (beaucoup plus robuste)
    ou 
    simplifier tout ton système (moins de colonnes intermédiaires)

    Tu es déjà très proche d’un truc propre 

    Si tu as besoin d'une aide, dis le moi !


    0
  10. Philbert29 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   2
     

    Bonsoir

    Décidément, je n'y arrive vraiment pas, quelque soit la méthode.
    Je n'arrive pas à figer la couleur pour les 2 cellules côte à côte.
    Si ça marche pour la couleur, alors les valeurs des nombres sont erronés et si les nombres sont bons, les couleurs vertes et rouges se promènent un peu partout, et ça en rajoute ! ?

    https://docs.google.com/spreadsheets/d/1G8uUYFA4qVpF71UWx_v9nc_Y3SZhTgeAW921CxSoJkk/edit?usp=sharing 

    Je te mets le lien du fichier. Si tu peux écrire la macro. Merci

    0
  11. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
     

    Bonjour,

    Ok là je comprends ta frustration… et je vais être direct avec toi :

    Tu te bats contre Excel pour rien, parce que ton approche actuelle est instable par nature.

    Mais on va régler ça proprement une bonne fois pour toutes.

    Dès que j'ai un moment je te redonne une autre méthode pour reformuler ta feuille ! A plus ! 


    0
  12. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
     

    Re bjr,

    Le vrai problème de fond

    Tu fais :

    Des formules entre feuilles
    Des couleurs manuelles
    Une copie
    Un tri

    Résultat :

    soit les valeurs sont justes
    soit les couleurs sont justes
    jamais les deux en même temps

    C’est NORMAL, pas une erreur de ta part.

    LA solution robuste (celle qui marche à 100%)

    On arrête complètement de copier les couleurs

    Et on fait ça correctement :

    Principe
    Les couleurs doivent dépendre d’une règle
    PAS d’un copier/coller

    Étape 1 — SUPPRIMER les couleurs actuelles

    Dans ta feuille résultats :
    enlève toutes les couleurs manuelles

    Étape 2 — Mise en forme conditionnelle

    Sur la colonne des scores (ex : L2:L19) :

    Règle 1 (rouge)
    = L2 < 10

    Règle 2 (vert)
    = L2 >= 10

    Appliquer à :
    K2:L19 (pour colorer nom + score ensemble)

    Étape 3 — Macro SIMPLIFIÉE (sans copie de formats)

    Voilà TA macro propre :

    Sub Classement_Propre()
    
    ```
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("résultats")
    
    ' Copier uniquement les valeurs (pas les formats !)
    ws.Range("K2:L19").Value = ws.Range("G2:H19").Value
    
    ' Tri
    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ws.Range("L2:L19"), _
            Order:=xlDescending
        
        .SetRange ws.Range("K2:L19")
        .Header = xlNo
        .Apply
    End With
    ```
    
    End Sub
    


    Pourquoi ça marche (et pourquoi toi ça bug)

    Avant :

    tu copiais des couleurs → elles se décalent
    ou tu les perdais → incohérence

    Maintenant :

    tu copies uniquement les données
    les couleurs se recalculent automatiquement
    le tri ne casse rien

    Résultat final

    Tu peux :

    trier 100 fois
    changer les valeurs
    relancer la macro

    Les couleurs seront TOUJOURS justes


    0
  13. danielc0 Messages postés 2182 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    Sur quelle feuille fais-tu le tri ? A lire ton code, tu te bases tu te bases sur les colonnes J et K qui ne contiennent pas de couleur. Explique exactement ce que tu veux faire.

    Daniel


    0
  14. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
     

    re,

    EXEMPLE


    0