[Excel] coller + mise en forme conditonnelle
Rob1
-
grâce -
grâce -
J'ai un petit problème sous Excel.
La situation: sur une feuille, les cellules C3 à C13 forment une sorte de "formulaire" de saisie de données, Une macro Sub ajoutdivers() copiant ensuite ces données avec une transposée à la ligne 17 qui est la première ligne d'une base de données.
Le code de la macro :
Jusque là tout va bien. Ensuite j'ai voulu créer une mise en forme conditionnelle dans la base de données pour que quand on sélectionne une cellule, toute la ligne soit "surlignée" (fond coloré) pour faciliter la lecture (le tableau a beaucoup de lignes, et elles sont assez longues).
Et là, quand j'essaie d'exécuter la macro, Excel me retourne :"erreur d'exécution 1004 : la méthode PasteSpecial de la classe Range a échouée". Après divers essais, j'ai l'impression qu'il est impossible de coller les données dans la base de données à cause de sa mise en forme "surlignement".
Donc bien sûr : est-ce que quelqu'un a une solution ?
merci d'avance
La situation: sur une feuille, les cellules C3 à C13 forment une sorte de "formulaire" de saisie de données, Une macro Sub ajoutdivers() copiant ensuite ces données avec une transposée à la ligne 17 qui est la première ligne d'une base de données.
Le code de la macro :
Sub ajoutdivers()
Rows("17:17").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown 'insertion d'une nouvelle ligne à la ligne 17
Range("C3:C13").Select
Selection.Copy 'copie des données du "formulaire"
Range("B17").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True ' collage spécial transposé des données à la ligne 17
Range("C3:C13").Select 'effacer les cellules du "formulaire"
Application.CutCopyMode = False
Selection.ClearContents
End Sub
Jusque là tout va bien. Ensuite j'ai voulu créer une mise en forme conditionnelle dans la base de données pour que quand on sélectionne une cellule, toute la ligne soit "surlignée" (fond coloré) pour faciliter la lecture (le tableau a beaucoup de lignes, et elles sont assez longues).
Et là, quand j'essaie d'exécuter la macro, Excel me retourne :"erreur d'exécution 1004 : la méthode PasteSpecial de la classe Range a échouée". Après divers essais, j'ai l'impression qu'il est impossible de coller les données dans la base de données à cause de sa mise en forme "surlignement".
Donc bien sûr : est-ce que quelqu'un a une solution ?
merci d'avance
A voir également:
- [Excel] coller + mise en forme conditonnelle
- Mise en forme conditionnelle excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Mise en forme tableau croisé dynamique - Guide
- Mise a jour chrome - Accueil - Applications & Logiciels
8 réponses
Lermitte va me flinguer...):
Pourquoi.. Aucune raison!!
Mais j'ai quand même une petite solution si tu à trouver le conflit.
C'est plus générique.
A+
Pourquoi.. Aucune raison!!
Mais j'ai quand même une petite solution si tu à trouver le conflit.
Sub test()
Application.EnableEvents = False
.....
....
Application.EnableEvents = True
End Sub
C'est plus générique.
A+
Je vient de lire ton poste 3
et comme demandé, où sont les fonction Ligne() et colonne()
et comme demandé, où sont les fonction Ligne() et colonne()
en fait j'ai été dans
->Format
->Mise en forme conditionnelle
->j'ai sélectionné "La formule est" dans le petit menu déroulant
->j'ai saisi la formule "=LIGNE()=CELLULE("ligne")"
->j'ai choisi une couleur
Puis j'ai été dans VBA editor, j'ai sélectionné ma feuille et j'ai tapé le code suivant:
Voilà apparement c'est ce dernier qui plante et qui empêche de faire le faire le collage spécial.
->Format
->Mise en forme conditionnelle
->j'ai sélectionné "La formule est" dans le petit menu déroulant
->j'ai saisi la formule "=LIGNE()=CELLULE("ligne")"
->j'ai choisi une couleur
Puis j'ai été dans VBA editor, j'ai sélectionné ma feuille et j'ai tapé le code suivant:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Calculate End Sub
Voilà apparement c'est ce dernier qui plante et qui empêche de faire le faire le collage spécial.
Hello Rob
Comment as-tu défini ta mise en forme conditionnelle lors de la sélection d'une ligne? Par macro? Si oui, peux-tu donner le code pour voir s'il y a pas conflit?
Comment as-tu défini ta mise en forme conditionnelle lors de la sélection d'une ligne? Par macro? Si oui, peux-tu donner le code pour voir s'il y a pas conflit?
Merci pour la rapidité.
J'ai défini la mise en forme conditionnellle grâce à format et pas grâce à une macro.
la formule est: =LIGNE()=CELLULE("ligne") et après j'ai pris une couleur.
En fait je voudrais que la mise en forme soit active tout le temps mais sur une portion réduite de la feuille (que dans la base de données).
Par contre j'utilise cette formule pour la mise en forme soit effective:
Peut-être que le problème se situe là ?
J'ai défini la mise en forme conditionnellle grâce à format et pas grâce à une macro.
la formule est: =LIGNE()=CELLULE("ligne") et après j'ai pris une couleur.
En fait je voudrais que la mise en forme soit active tout le temps mais sur une portion réduite de la feuille (que dans la base de données).
Par contre j'utilise cette formule pour la mise en forme soit effective:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Calculate End Sub
Peut-être que le problème se situe là ?
Bonjour,
Le fait de modifier la couleur de la ligne n'a rien à voir avec le problème.
Erreur 1004, ne trouve pas l'objet ou l'adresse que tu donne n'est pas valable.
essaye en ajoutant...
A+
Le fait de modifier la couleur de la ligne n'a rien à voir avec le problème.
Erreur 1004, ne trouve pas l'objet ou l'adresse que tu donne n'est pas valable.
essaye en ajoutant...
Sub ajoutdivers()
Sheets("NomFeuille").select
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Excel 2003 (11.6560.6568) SP2
Pour le problème en cours, j'ai remarqué quand si je copie manuellement le contenu de cellules du "formulaire" puis que je vais dans une cellule de la base de données, je ne peux plus faire de coller (même le coller classique de base).
Je suppose que c'est l'action de la mise en forme qui fait que je "perds" ce que j'ai copié. Dès qu'on fait une action sans rapport avec coller, Excel "perd" ce qu'il a copié (contrairement à d'autres logiciels comme Word, bloc-notes etc.).
Donc je pense qu'il me faut faire ce surlignement d'une manière complètement différente.
Pour le problème en cours, j'ai remarqué quand si je copie manuellement le contenu de cellules du "formulaire" puis que je vais dans une cellule de la base de données, je ne peux plus faire de coller (même le coller classique de base).
Je suppose que c'est l'action de la mise en forme qui fait que je "perds" ce que j'ai copié. Dès qu'on fait une action sans rapport avec coller, Excel "perd" ce qu'il a copié (contrairement à d'autres logiciels comme Word, bloc-notes etc.).
Donc je pense qu'il me faut faire ce surlignement d'une manière complètement différente.
Oui, je comprenais pas; j'ai le 2000 et il n'y a pas cette possibilité.
Mais pour mettre une ligne en surbrillance tu devrais pouvoir y arriver facilement avec l'éditeur de macro. et ensuite l'adapter
Mais pour mettre une ligne en surbrillance tu devrais pouvoir y arriver facilement avec l'éditeur de macro. et ensuite l'adapter
C'est le paste special qui entre en conflit avec ton Calculate lors du SelectionChange et je ne vois pas comment désactiver ce SelectionChange autrement que par une magouille du genre (Lermitte va me flinguer...):
Public SelectionChangeDeactivated As Boolean
Sub test()
SelectionChangeDeactivated = True
Rows("17:17").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown 'insertion d'une nouvelle ligne à la ligne 17
Range("C3:C13").Select
Selection.Copy 'copie des données du "formulaire"
Range("B17").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True ' collage spécial transposé des données à la ligne 17
Range("C3:C13").Select 'effacer les cellules du "formulaire"
Application.CutCopyMode = False
Selection.ClearContents
SelectionChangeDeactivated = True
End Subet pour bloquer ton Calculate lors de l'exécution de la macro:Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not SelectionChangeDeactivated Then Calculate End SubA part ça, je n'arrive pas à comprendre la formule que tu utilise dans le formattage conditionnel. C'est quoi le "ligne" entre guillemets? J'ai essayé 2-3 truc avec ma version anglaise comme '=ROW=CELL("ROW")' mais rien n'y fait. Tu tiens ce truc que quelque part ou t'as découvert ça tout seul?
J'ai bien compris ce que tu voulais faire par contre pourquoi avoir mis 2 fois TRUE (SelectionChangeDeactivated = True
) ? J'ai essayé de mettre false au deuxième mais ça ne marche non plus.
Pour ce qui est du =LIGNE()=CELLULE("ligne") je l'ai trouvé sur le site:
http://www.veriti.net/forum/viewtopic.php?t=239.
) ? J'ai essayé de mettre false au deuxième mais ça ne marche non plus.
Pour ce qui est du =LIGNE()=CELLULE("ligne") je l'ai trouvé sur le site:
http://www.veriti.net/forum/viewtopic.php?t=239.
Désolé pour le true true. Décidément, j'ai de la peine avec mes copy/paste...
Pour la formule, merci. Le truc fonctionne avec la version anglaise en mettant =ROW()=CELL("row").
Mais si quelqu'un peut m'expliquer comment ça se fait que ça marche. Qu'est-ce que c'est que ce "row" ou "ligne" entre guillemets, balancé comme argument de la fonction CELLULE()???
Pour la formule, merci. Le truc fonctionne avec la version anglaise en mettant =ROW()=CELL("row").
Mais si quelqu'un peut m'expliquer comment ça se fait que ça marche. Qu'est-ce que c'est que ce "row" ou "ligne" entre guillemets, balancé comme argument de la fonction CELLULE()???
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Application.EnableEvents = True Then Calculate End Sub
Pas besoin...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub
mais tu peu dire merci à plubarj, c'est lui qui à trouver la faille.
ok d'accord je viens de tester.
Petite astuce pour ceux qui comme moi vont galérer je vous donne la formule pour qu'après avoir ajouter une ligne dans la base de données, la mise en forme se conserve:
Merci à plubarj et lermite222 pour votre aide
++ Rob1 (Et Pauline) ->binôme de choc
Petite astuce pour ceux qui comme moi vont galérer je vous donne la formule pour qu'après avoir ajouter une ligne dans la base de données, la mise en forme se conserve:
Range("B17:L17").Select 'Sélection de la ligne sur laquelle la mise en forme va être conservée
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=LIGNE()=CELLULE(""ligne"")" 'Formule de la mise en forme
Selection.FormatConditions(1).Interior.ColorIndex = 24 'Choix de la couleur(dépend de la mise en forme)
Merci à plubarj et lermite222 pour votre aide
++ Rob1 (Et Pauline) ->binôme de choc
ça marche merci beaucoup!!!!!!!!
++
donc j'ai encadré ma macro par:
Et dans celui de la feuille