XL 2019 Copier les valeurs, les couleurs pas MEFC ni formules

Dim.Reichart

XLDnaute Occasionnel
Bonsoir,
J'ai une macro qui fait une copie du planning dans les colonnes sur la gauche (vous avez des exemples, et au pire, pressez le bouton…) à des fins de sauvegarde.
Le planning de départ à une MEFC qui met en gris si le jour est en week end ou férié, il y a des formules sur les lignes de date pour cela.

Je souhaite que le planning sauvegardé comporte les valeurs et les couleurs, mais ni les formules, ni les MEFC qui feraient ramer le fichier inutilement (t dont je n'ai plus besoin une fois les couleurs sauvegardées).

Après recherche sur le forum, j'ai essayé avec:
range(sauvegarde).interior.colorindex = range(planning).interior.colorindex
range(sauvegarde).font.formats = range(planning).font.formats
range(planning).copy range(sauvegarde).pastespecial paste:= xlpasteformats

Soit cela copie les MEFC, et les décale puisque je ne copie pas les cellules de référence, soit juste les valeurs, bref, ça ne fonctionne pas.
Est-ce que vous avez une autre solution, ou une explication à me proposer?
 

Pièces jointes

  • Exercice.xlsm
    32.4 KB · Affichages: 7

Staple1600

XLDnaute Barbatruc
Re

Je voulais juste de te simplifier la tâche et épargner tes phalanges ;)
Car écrire
If WeekDay(Cells("AR" & Lig, A) > 5 Then
c'est plus court et moins douloureux niveau doigts ;) que
If Format(DateValue(Cells("ar" & Lig).Offset(0, A)), "jjj") = "sam" Or Format(DateValue(Cells("ar" & Lig).Offset(0, A)), "jjj") = "dim"
;)
 

Dim.Reichart

XLDnaute Occasionnel
J'ai plus de temps le soir, je vais retester et t'en dire plus @mapomme, désolé si tu l'as mal pris, ça n'était pas le but, loin de la, tu m'as aussi appris des choses, et ça, c'est toujours utile.
EDTI: Par contre, il m'a déjà fait tout à l'heure "une erreur s'est produite pendant le chargement du projet", mais j'ai cru que ça venait de mon coté.
@Staple1600 je vais quand même prendre la formule parce que faut admettre que meme si j'etais content d'avoir réussi, ta méthode est plus simple.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

mapomme
Je confirme que ca ne marche pas.
Mais je sais pourquoi (voir mon message#6) ;)
Tu en déduiras que je teste sur un PC avec ...
Sinon en testant directement de VBE, ca plante toujours (toujours pour la même cause chez moi)
Et bizarrement quand je clique sur la forme puis Affecter macro
s'affiche ALEA.ENTRE.BORNES

PS: Je suppute que cela fonctionne sur mon PC idoine comme cela fonctionne sur ton PC
Sauf si tu constates la même chose rapport à la forme
 

Dim.Reichart

XLDnaute Occasionnel
@mapomme quand j'ai voulu ouvrir le fichier, excel a planté, mais de mémoire, font.style et font.color agissent sur le texte, seul interior.color m'interesse vraiment, et cela me mettait tout la plage en noir quand je copiai celle d'origine avec display.interior.color.
Mais je me suis tout de même inspiré de ta formule affecter la couleur souhaitée.
 

Dim.Reichart

XLDnaute Occasionnel
Merci à toi pour ton aide.
Est-ce que le problème de plantage peut provenir d'une version d'excel différente? Je suis sur Excel 2019 pour ma part.

Pour ce qui est des couleurs, j'ai essayé aussi avec un if par colonne then =display.interior.color dans mon propre fichier, mais cela trouvait la bonne colonne et la mettait entierement noire, c'est pour cela que je me suis orienté sur if then interior.color= N° couleur.
 

Staple1600

XLDnaute Barbatruc
Re,

mapomme
Tu n'as pas lu entre mes lignes? ;)
Chez moi (en tout cas avec ce PC) ca ne peut pas marcher et jamais ca ne marchera.
Parce que je suis sur un PC avec XL 2003.
Donc pas d'usage possible de DisplayFormat.Interior.Color

Mais sur un PC avec un Excel plus récent, ca devrait marcher.

Tu m'en veux point pour ma précédente réponse alambiquée (qui se voulait humoristique) ? ;)

NB: J'ai converti ton *.xlsm en *.xls pour pouvoir lire ton code.
Est-ce cela qui fait ce qu'on voit ci-dessous? *
01mapomme.jpg

*: J'évoquais déjà la chose dans le message#20
 

Staple1600

XLDnaute Barbatruc
Re,

@mapomme quand j'ai voulu ouvrir le fichier, excel a planté, mais de mémoire, font.style et font.color agissent sur le texte, seul interior.color m'interesse vraiment, et cela me mettait tout la plage en noir quand je copiai celle d'origine avec display.interior.color.
Mais je me suis tout de même inspiré de ta formule affecter la couleur souhaitée.
Dim.Reichart
Est-ce que tu as étévoir le lien que je postais dans le message#6?
Parce que la piste que je te suggérais de suivre est celle que suit aussi mapomme
Et le lien expliquait la syntaxe de DisplayFormat.Interior.Color
 

Dim.Reichart

XLDnaute Occasionnel
J'ai peut etre mal compris, mais si tu convertis un fichier XLSM en XLS, ca n'efface pas toute la partie macro?

Sinon, pour les jours fériés, j'ai essayé avec Countif, avec ou sans mise en forme de date "dd/mm/yyyy", et ça ne fonctionne toujours pas (bon, j'ai eu le 5 aout en couleur, donc a mon avis, ca fonctionne, mais mal)
VB:
if WorksheetFunction.CountIf(Worksheets("tableau").Range("r:r"), Format(Acell, "dd/mm/yyyy")) > 0 Then
où le tableau!R:R liste les jours fériés, et Acell est une variable qui lit la date inscrite en K9 (au dessus du tableau d'origine, la date est au format "jjj" pour me renvoyer le jour de semaine, mais existe en tant que date complête)

Mesage croisé: @Staple1600 oui, je suis allé voir, j'ai essayé différentes variantes, mais comme dis plus haut, lorsqu'une mise en forme se faisait que ce soit avec color ou colorindex, j'obtenais des cellules entierement noires, illisibles.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Non, un xls contient des macros.
Le souci (enfin le mien durant quelques jours), je ne disposes que d'un PC avec Excel 2003
Donc je ne peux ouvrir les *.xlsm et certaines fonctions VBA récentes me sont donc interdites
(comme DisplayFormat.Interior.Color)
Je pensais que mapomme avait capté ma blagounette (message#20)

Demain, j'essaierai de dégoter un voisin ou une voisine avec un PC récent et un Excel tout aussi récent
et je testerai
VB:
Sub FormatMFCcopieCouleur()
Dim source As Worksheet, dest As Worksheet, xcell

   Set source = ThisWorkbook.Sheets("Feuil1")
   Set dest = ThisWorkbook.Sheets("Feuil2")

   dest.Rows.Delete
   source.UsedRange.Copy dest.Range(source.UsedRange.Address)
   dest.UsedRange = dest.UsedRange.Value

   For Each xcell In dest.UsedRange
      If xcell.FormatConditions.Count <> 0 Then
        xcell.Font.FontStyle = xcell.DisplayFormat.Font.FontStyle
        xcell.Font.Color = xcell.DisplayFormat.Font.Color
        xcell.Interior.Color = xcell.DisplayFormat.Interior.Color
      End If
   Next xcell
   
   dest.UsedRange.FormatConditions.Delete
   dest.Activate
End Sub
NB: Je colle ici le code VBA de mapomme pour pouvoir l'utiliser à partir d'un PC (en mode non connecté sur XLD)
 

Staple1600

XLDnaute Barbatruc
Re

Avec XL2K3, je ne peux que la chose suivante
(j'ai modifié la syntaxe juste pour un gain de place, mais la macro de mapomme telle quelle mais sans la boucle
avec du DisplayFormat fonctionne aussi)
VB:
Sub FormatMFCcopieCouleur_XL2K3()
Feuil2.Rows.Delete
Feuil1.UsedRange.Copy Feuil2.Range(Feuil1.UsedRange.Address)
Feuil2.UsedRange = Feuil2.UsedRange.Value
Feuil2.UsedRange.FormatConditions.Delete
Feuil2.Activate
End Sub
Donc la recopie valeurs/seules fonctionne
Il reste à tester simplement cette partie
For Each xcell In dest.UsedRange If xcell.FormatConditions.Count <> 0 Then xcell.Font.FontStyle = xcell.DisplayFormat.Font.FontStyle xcell.Font.Color = xcell.DisplayFormat.Font.Color xcell.Interior.Color = xcell.DisplayFormat.Interior.Color End If Next xcell

Mais pour cela, il faut de l'Excel supérieur à 2003 ;)
 

Staple1600

XLDnaute Barbatruc
Re

Une dernière (mapomme comprendra l'allusion légumière) avant d'aller au dodo ;)
VB:
Sub AvecDesEndives()
With Feuil2
.Rows.Delete: Feuil1.UsedRange.Copy .[A1]
    With .UsedRange
    .Value = .Value: .FormatConditions.Delete
    End With
    .Activate
End With
End Sub
Macro réservée aux seuls vieux bouzins (avec Excel 97 au moins ou XL 2003 au plus ;))
 

Dim.Reichart

XLDnaute Occasionnel
Je ne peux pas tester donc...
Par conte, je ssuis content, j'ai réussi, voici le code:
VB:
Set Dest = Range("ar1:bz" & C - 9).Offset(Lig - 1)
    Dest.Value = Range("g10:ao" & C).Value
    For A = 1 To 30
    If Cells(9, 10 + A) <> "" Then
        If Weekday(Cells(9, 10 + A)) > 5 Or WorksheetFunction.CountIf(Worksheets("tableau").Range("r:r"), Cells(9, 11 + A)) > 0 Then
        With Range("av1:av" & C - 9).Offset(Lig - 1, A).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.15
        End With
        End If
    End If
    Next A
J'ignore pourquoi, mais il faut que les jours fériés soient décalés d'1 pour que ca tombe en face, mais ça fonctionne et de mon point de vue, c'est l'essentiel.

Pour le souci de @mapomme , je crois qu'il faudrait m'expliquer un peu plus, parce que vu d'ici je ne sais pas ce qu'il faut obtenir en fait...
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87