[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
Configuration: Windows XP
Internet Explorer 7.0 & Mozilla 2.0

8 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    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
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Je vient de lire ton poste 3
    et comme demandé, où sont les fonction Ligne() et colonne()
    0
    1. 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
  3. 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
    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
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    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
      1. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    quel version d'Excell ?
    -1
    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
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  8. 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
    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
      1. 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
      2. 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
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    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