copier cellules sans MFC

  • Initiateur de la discussion Initiateur de la discussion WocaM
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
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:
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.
 
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
 
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. 😱

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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
547
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
18
Affichages
314
Réponses
4
Affichages
461
Réponses
10
Affichages
281
Retour