[Excel] coller + mise en forme conditonnelle

Rob1 -  
 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 :

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:

8 réponses

lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Lermitte va me flinguer...):
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+
1
Rob1
 
YYYYEEEEESSSSS
ça marche merci beaucoup!!!!!!!!
++
donc j'ai encadré ma macro par:
Sub nommacro()
Application.EnableEvents = False
...
...
Application.EnableEvents = True
End Sub


Et dans celui de la feuille

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.EnableEvents = True Then Calculate
End Sub
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Je vient de lire ton poste 3
et comme demandé, où sont les fonction Ligne() et colonne()
0
Rob1
 
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:
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.
0
plubarj Messages postés 103 Statut Contributeur 6
 
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?
-1
Rob1
 
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:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate

End Sub


Peut-être que le problème se situe là ?
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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...
Sub ajoutdivers()
    Sheets("NomFeuille").select

A+
-1
Rob1
 
Test effectué. Pas de changement.
Mais merci.

La macro marche parfaitement sans la mise en forme conditionnelle mais ne fonctionne plus dès qu'on met en place la mise en forme conditionnelle.
0
grâce > Rob1
 
Bonjour
J'ai un problème de cacul en Excel et en plus comment il faut ajuster le lignes.
La marge normal en Excel c'est combien?
Peu-être quelqu'un à une reponse pour moi

Merci et à bientôt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
quel version d'Excell ?
-1
Rob1
 
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.
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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
-1
plubarj Messages postés 103 Statut Contributeur 6
 
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 Sub
et 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 Sub
A 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?
-1
Rob1
 
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.
0
plubarj Messages postés 103 Statut Contributeur 6 > Rob1
 
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()???
-1
Pauline (Rob1) > plubarj Messages postés 103 Statut Contributeur
 
CC
je pense qu'en fait on lui demande de surligner la ligne de la cellule qui contient la ligne.
++
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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.
-1
Rob1
 
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:


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
0