copier cellules sans MFC

WocaM

XLDnaute Junior
Bonsoir,

J'ai crée un fichier de planning avec des MFC grâce à la macro de MydearFriend (version 2 datant de 2005 si je me trompe pas )
car au travail on utilise encore une version qui ne supporte que 3 MFC et cela répond très bien à nos besoins
Le problème viens en fait de la fonction copier que j'utilise en VBA.

En cliquant sur un bouton, je copie des cellules qui peuvent venir de 3 feuilles différentes (Janvier, Février , Mars , etc.. ) et que je colle dans une feuille récapitulative (cycle 1, 2, etc...).

Cela marche bien sauf qu'a chaque fois que je clique sur le bouton cela copie en même temps les MFC des cellules d'origines qui s'accumulent dans ma feuille récapitulative

Si je fais une simple copie des valeurs avec une MFC via la macro de MDF, cela ne marche pas, les données sont bien copieés mais la MFC ne se fait pas

En fait le fonctionnement idéal serait que dès que l'on modifie une cellule dans janvier par exemple, cette modification soit reporté automatiquement dans le cycle concerné avec la MFC de la cellule d'origine

voila le code que j'utilise pour mon bouton

Code:
Sub cycle_1() ' cycle_1 menu Macro
Application.ScreenUpdating = False
Sheets("janvier").Range("T6:AU20").Copy 'copie la plage
With Sheets("cycle_1").Range("E6")
    .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End With
Sheets("fevrier").Range("M6:AN20").Copy 'copie la plage
With Sheets("cycle_1").Range("E25")
    .PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
End With
Sheets("cycle_1").Select
Range("R1").Select
End Sub

voila la macro de MDF que j'utilise (sa version 5 bug dans mon fichier???)

Code:
Option Explicit
'---------------------------------------------------------------------------------------
' Auteur    : Didier FOURGEOT (myDearFriend!)
' Date      : 18/09/2005
' Sujet     : MFC multiples
'---------------------------------------------------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim TabTemp As Variant
Dim L As Long
Dim V As Variant
    'Ne gère pas les sélections de plages
    If Target.Cells.Count > 1 Then Exit Sub
    'Vérifie la présence du format conditionnel "spécial"
    If Target.FormatConditions.Count < 1 Then Exit Sub
    If Target.FormatConditions(1).Formula1 = "=mDF" Then
        With Sheets("MFC")
            'Charge les préférences dans un tableau variant temporaire
            L = .Range("A65536").End(xlUp).Row
            TabTemp = .Range(.Cells(1, 1), .Cells(L, 1)).Value
            'Détermine le format à utiliser suivant la valeur de la cellule
            If Target.Value = "" Then
                L = 1
            Else
                For L = 2 To UBound(TabTemp, 1)
                    If Target.Value = TabTemp(L, 1) Then Exit For
                Next L
            End If
            'Gestion des erreurs (impératif, compte tenu de la désactivation des évènements)
            On Error GoTo Fin
            Application.EnableEvents = False
            'Applique le format (sauf les bordures)
            .Cells(L, 2).Copy
            V = Target.Formula
            Target.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, _
                    SkipBlanks:=False, Transpose:=False
            Target.Formula = V
            'Il semble que sur Mac et dans certaines situations (non ciblées) le format
            'conditionnel "spécial" d'origine ne soit pas écrasé par le nouveau, il convient
            'donc de s'en assurer avant de réimposer ce format spécial.
            If Target.FormatConditions.Count < 1 Then Target.FormatConditions.Add Type:=xlExpression, Formula1:="=mDF"
            Application.CutCopyMode = False
            Application.EnableEvents = True
        End With
    End If
    Exit Sub
Fin:
    'En cas d'erreur dans le code, il convient impérativement de rétablir la gestion des
    'évènements d'application pour la suite. Par une gestion d'erreur, on réaffecte la
    'valeur True à la propriété Application.EnableEvents et on informe l'utilisateur qu'une
    'erreur non gérée est survenue
    MsgBox "Erreur non gérée dans la procédure Workbook.SheetChange()" & vbLf & "Erreur : " & _
        Err & " " & Err.Description, vbOKOnly, "myDearFriend!"
    Application.EnableEvents = True
End Sub

merci d'avance de vos réponses d'expert
WocaM
 

CBernardT

XLDnaute Barbatruc
Re : copier cellules sans MFC

Bonsoir WocaM,


Essaye la macro suivante modifiée afin de reporter les formats et donc la MFC :

Sub cycle_1() ' cycle_1 menu Macro
Application.ScreenUpdating = False
Sheets("janvier").Range("T6:AU20").Copy 'copie la plage
With Sheets("cycle_1").Range("E6")
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
Sheets("fevrier").Range("M6:AN20").Copy 'copie la plage
With Sheets("cycle_1").Range("E25")
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
Application.CutCopyMode = False
Sheets("cycle_1").Select
Range("R1").Select
End Sub
 

WocaM

XLDnaute Junior
Re : copier cellules sans MFC

Merci pour ta réponse mais cela ne marche pas

Mais un éclair de génie m'est apparu dans la nuit et j'ai trouvé cette petite phrase à rajouter et cela efface les rêgles de MFC

Code:
Cells.FormatConditions.Delete

Merci quand même

si quelqu'un a une solution pour que cette copie de donnée se fasse de façon automatique et non par action via un bouton je suis toujours preneur


cordialement WocaM
 

Staple1600

XLDnaute Barbatruc
Re : copier cellules sans MFC

Bonjour


Tu peux aussi éviter de passer par le copier/coller
en passant par un Array.
Code:
Dim tablo
tablo=Sheets("janvier").Range("T6:AU20")
Je laisse le soin à ROGER2327 (ou à pierrejean ou à qui voudra bien) de te montrer comment (en espérant qu'ils passeront par là)

Car je n'ai décidément plus le temps, je dois vraiment aller à la douche.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : copier cellules sans MFC

Bonsoir


Voici un exemple illustratif
VB:
Sub exemple_array()
Dim t
'création de valeurs pour test + format
'en feuille 1
With Sheets(1).[A1:C10]
    .Formula = "=RAND()"
    .Value = .Value
    .Font.Bold = True
    .Borders.LineStyle = 1
End With
'création d'un tableau : Array
t = Sheets(1).[A1].CurrentRegion
' "recopie" en feuille 2 sans utiliser
'le copier/coller
Sheets(2).[A1].Resize(UBound(t, 1), UBound(t, 2)) = t
End Sub
Désolé de pouvoir t'en dire plus ce soir
Mais je commence à piquer du nez sur mon clavier.
 

WocaM

XLDnaute Junior
Re : copier cellules sans MFC

Bonsoir,

J'ai testé ton bout de code mais je comprend rien à son fonctionnement ni à son résultat d'ailleurs.

Il me copie bien des valeurs dans la feuille (2) mais les données initiales sont remplacés par des séries de chiffres à virgules qui semble sortie de nulle part

De plus sur la feuille (2) je retrouve ces même chiffres mais brut sans aucun style alors que sur la feuille (1) certaines cases avait un fond de couleur ou un style gras

Ce que je voulais à la base c'est copier les cellules sans les règles de MFC mais en conservant les couleurs, police, taille...

J'ai pour l'instant trouvé une solution et effaçant les règles via le code que j'avais donné juste avant

Il y a peut-être plus simple mais là, la méthode par array ne semble par convenir à ce que je recherche, à moins que l'on m'explique comment ca marche et ce qu'on peut faire avec

cordialement Wocam
 

Staple1600

XLDnaute Barbatruc
Re : copier cellules sans MFC

Re

Comme les commentaires* présents dans le code VBA précédent le disaient
(*ce qui est en vert), la première partie du code ne sert qu'à créer des données bidons
(ce qui t'évites de devoir les créer pour tester la macro)

Et cette macro sert le propos suivant:
ne pas utiliser le copier/coller pour transmettre la valeur d'une cellule à une autre.
(en l'occurrence ici une plage de cellules A1:C10 de la feuille 1 vers la feuille 2)

J'ai posté cette macro pour ceci
merci de ta réponse mais ne connaissant pas du tout la méthode "array"

je reste un peu dans l'expectative
Je pensais pourtant avoir été assez clair dans mes propos et dans mes commentaires. :eek:

PS:
mais en conservant les couleurs, police, taille...
Ces caractéristiques peuvent aussi remplir des Arrays
Mais ceci est une autre histoire... qui peut être t'intéressera plus tard.
Je reviendrai t'en parler à ce moment là.
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
475

Statistiques des forums

Discussions
311 725
Messages
2 081 944
Membres
101 849
dernier inscrit
florentMIG