Résolu XL 2019 Surlignage qui bloque une Macro

bambi

XLDnaute Occasionnel
Bonjour à toutes et tous et tèrs bonne année 2020 ! :)

Voici mon problème

J'ai une macro COPIER dans le Classeur 2 qui me permet de copier les données de la feuille 1 pour les coller à la suite du tableau du Classeur 1
Jusque-là, tout va bien

Mais j'ai besoin de mettre en valeur les lignes du tableau FLEUR (Classeur 1, Feuille FLEUR)
Je l'ai fait à l'aide d'une MFC et de la fonction Calculate

Mais du coup, ma macro COPIER (Classeur 2) ne fonctionne plus.
Elle s'arrête à la ligne ActiveSheet.Paste

J'ai beau chercher depuis hier, je cale
Donc si quelqu'un à une solution, un grand merci d'avance ;)

Je joins les deux fichiers modèles
 
Ce fil a été résolu! Aller à la solution…

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Bambi,
Ce n'est pas la MFC qui pose problème, c'est le Calculate de Classeur1/Sub Worksheet_SelectionChange. ( Si vous le mettez en commentaires, tout marche )
XL perd ses repères lorsque vous recalculez. Est ce vraiment utile dans votre contexte ?
 

bambi

XLDnaute Occasionnel
Bonjour sylvanu :)

Oui, malheureusement, je sais bien que sans le Calcultate cela fonctionne.
C'est bien là tout mon problème. Et c'est pour cela que j'ai posté ma question.

L'exemple mis n'est qu'un tout petit échantillon de mon tableau final, qui est très grand
J'ai ajouté récemment cette mise en valeur de ligne pour pouvoir facilement "travailler" sur mon tableau

Donc sans le Calculate, ça ne me sert plus à rien :(

J'aimerai vraiment faire fonctionner les deux.
Ou au pire, trouver un autre moyen compatible de mettre en valeur la ligne sur laquelle je travaille.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Vous auriez pu le dire dans votre post, juste pour éviter de nous faire chercher.:eek:
Le mieux je pense est d'invalider Calculate lorsque vous CleanData.
On ne fait pas Calculate lorsque le fichier où il y a CleanData est ouvert.
Code:
Option Explicit
' LIGNE SURLIGNEE SI CELLULE SELECTIONNEE
' MFC FORMULE = LIGNE() = CELLULE("ligne")
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Wb As Workbook, Flag As Integer
  For Each Wb In Workbooks
    If Wb.Name = "Classeur2-1.xlsm" Then Flag = 1 ' Si Flag=1 c'est que le fichier est ouvert
  Next Wb
  If Flag = 0 Then Calculate
End Sub
Mais ça dépends de la structure de vos logiciels, et si c'est possible.
 

bambi

XLDnaute Occasionnel
Vous auriez pu le dire dans votre post, juste pour éviter de nous faire chercher.:eek:
Mais je l'ai dit puisque c'est exactement ma demande initiale.
Sinon je n'aurais pas posté. :oops:
Bref !
Merci pour votre réponse.
Je regarde votre solution tout de suite dans mes originaux.
Et je reviens vous dire si ça fonctionne.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Désolé,
Je l'ai fait à l'aide d'une MFC et de la fonction Calculate
Mais du coup, ma macro COPIER (Classeur 2) ne fonctionne plus.
Il n'est pas évident pour quelqu'un de l'exterieur de comprendre que c'est Calculate qui pose problème.
Bref!
Ma solution marche, je l'ai testée. cependant cela dépend du cycle de vie de vos fichiers. On ne peut plus calculer lorsque l'autre fichier est ouvert.
 

bambi

XLDnaute Occasionnel
Désolée pour le malentendu, je serai plus précise les prochaines fois.
Mais moi-même, j'ignorais que le problème venait de Calculate. :confused:

Sinon, c'est parfait @sylvanu. Votre solution fonctionne à la perfection. Merci.gif
Effectivement, je dois refermer le Classeur 2 mais ce n'est pas du tout un problème.
Il ne sert qu'à trier, reformater et coller les données de plusieurs fichiers vers mon Classeur 1
Donc je vais automatiser sa fermeture avec un petit bout de code et ce sera parfait.
Bonne soirée et encore merci ;)
 

bambi

XLDnaute Occasionnel
Code:
Option Explicit
' LIGNE SURLIGNEE SI CELLULE SELECTIONNEE
' MFC FORMULE = LIGNE() = CELLULE("ligne")
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Wb As Workbook, Flag As Integer
  For Each Wb In Workbooks
    If Wb.Name = "Classeur2-1.xlsm" Then Flag = 1 ' Si Flag=1 c'est que le fichier est ouvert
  Next Wb
  If Flag = 0 Then Calculate
End Sub
Je fais un petit up sur cette macro de @sylvanu
Elle fonctionne très bien et fait exactement ce que je voulais qu'elle fasse
Elle apporte le surlignage des lignes et empêche le conflit qu'il y avait avec la fonction Calculate

Mais je viens de découvrir qu'elle m'empêche de copier/coller les lignes :confused:

Exemple dans le classeur joint

Est-ce possible de "débloquer" le copier/coller sans remettre en cause la fonction de surlignage ?

Merci de votre aide ;)
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Bambi,
Désolé, on s'est mal compris.
Vous ne pourrez pas faire un copier coller dans Classeur1.xslm que si Classeur2-1.xlsm est ouvert.
Si dans Classeur 1, à la fin de la macro Sub Worksheet_SelectionChange vous mettez : If Flag = 0 Then Calculate alors ça marche ... et vous retombez dans le premier cas ! :mad:
N'est il pas possible d'ouvrir Classeur2-1.xlsm quand vous travaillez sur Classeur 1 ?

Ou plus généralement, ne vous est-il pas possible de supprimer ce Calculate quand on sélectionne la page Fleur ? En utilisant un autre système.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Je viens de faire un essai :
1- Dans Classeur1 revenir comme avant avec juste Calculate
2- Dans Classeur2, remplacer la macro CleanData par :
VB:
Sub CleanData()
    'Application.ScreenUpdating = False
   
    Sheets("Feuil1").Select

    'Copie dans le presse papier l'ensemble des données
    tablo = Range("A1").CurrentRegion
    ' Range("A1").CurrentRegion.Copy
   
    'Ouvre le fichier TableauDeBord et colle le résultat à partir de la première case vide colonne B, feuille CarnetDeTrades
    Workbooks.Open Filename:="C:\Users\PC_PAPA\Desktop\Classeur1.xlsm"
   
    Sheets("Fleur").Select
    Fin = Range("A65536").End(xlUp).Row
    Range("A" & Fin).Select
    For i = 1 To UBound(tablo)
            Range("A" & Fin + i) = tablo(i, 1)
            Range("B" & Fin + i) = tablo(i, 2)
    Next
   
End Sub
En supprimant le copier coller et en le remplaçant par un array ( data classeur1 --> array, puis array --> classeur2 ) on évite tous les problèmes.
A essayer. Chez moi ça à l'air de fonctionner.
 
Ce message a été identifié comme étant une solution!

bambi

XLDnaute Occasionnel
Bonjour @sylvanu :)

Cela m'a pris un peu de temps pour te répondre car mon fichier original est un peu plus complexe
J'ai dû adapter ta dernière macro à mon tableau final.
Mais tu as vu juste et ça fonctionne parfaitement.

Merci pour cette aide précieuse.
Bonne fin de journée à toi. ;)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Content que ça marche. :)
En fait j'ai appris une chose.
Si dans une feuille on fait un copier d'une cellule, puis recalculer, puis coller ... ça ne marche pas.
Le presse papier est vidé lors de recalcul. Allez savoir pourquoi !!!
Je pensais que c'était le Calculate au sein de la Worsheet_Change qui posait problème.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas