Garder à l'identique les cellules lors d'une macro
RésoluPhilbert29 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
-
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.
-
Bonjour,
Si tu peux me montrer :
ton code de tri
comment les couleurs sont appliquéesje peux te dire exactement où ça bloque...
-
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.
-
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 couleurstout 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 WithPetit 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
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
Pourquoi ça ne marche pasQuand 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’avantLES 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à-dessusComme ça :
plus de copie
plus de problème de couleurSi tu veux
Je peux te :
corriger ta macro complète
Envoie-moi ton code
-
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
-
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 policeEt il y a un 2ème problème
Tu fais un .Select + Selection
C’est :
fragile
source d’erreurs
inutileCORRECTION 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:Hdonc 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 !
-
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
-
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 !
-
Re bjr,
Le vrai problème de fond
Tu fais :
Des formules entre feuilles
Des couleurs manuelles
Une copie
Un triRésultat :
soit les valeurs sont justes
soit les couleurs sont justes
jamais les deux en même tempsC’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 < 10Règle 2 (vert)
= L2 >= 10Appliquer à :
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érenceMaintenant :
tu copies uniquement les données
les couleurs se recalculent automatiquement
le tri ne casse rienRésultat final
Tu peux :
trier 100 fois
changer les valeurs
relancer la macroLes couleurs seront TOUJOURS justes
-
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
-