IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA]fonction pour copier valeur ET format


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut [VBA]fonction pour copier valeur ET format
    Bonjour,

    je suis en Excel 2003 (je sais que ce que je veux faire existe en Excel 2007) et je souhaite developper une fonction qui va en fonction d'une valeur m'afficher une fleche montante (verte), plate (noire) ou descendante (rouge).

    exemple de la formule a mettre dans la cellule C1:
    =Fleche(A1,B1)

    J'ai place dans une feuille mes trois fleches formatee aux bonnes couleurs et j'ai nommee les cellules (Bon, Meme, Mauvais)

    Aucun probleme pour copier la valeur, mais impossible de copier le format... mes fleches reste noires (couleur Automatique)...

    Attache mon fichier excel... et ci-apres le code de ma fonction

    Quelqu'un aurait'il une idee, une solution a me proposer ?

    d'avance merci,

    Daniel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Function Fleche(Nb_1 As Integer, Nb_2 As Integer) As String
        a = Nb_1 + Nb_2
        If a > 0 Then
            strRange = "Bon"
            ColorType = 10
        End If
        If a = 0 Then
            strRange = "Meme"
            ColorType = 3
        End If
        If a < 0 Then
            strRange = "Mauvais"
            ColorType = 3
        End If
    CurrentColumn = ActiveCell.Column
    CurrentRow = ActiveCell.Row
     
    ThisWorkbook.Sheets(1).Range(strRange).Select
    Selection.Copy
    ActiveSheet.Cells(CurrentRow, CurrentColumn).Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
    Fleche = ThisWorkbook.Sheets(1).Range(strRange).Value
     
     
    End Function
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Sheets(1).Range(strRange).Select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fleche = ThisWorkbook.Sheets(1).Range(strRange).Value
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strRange = "Bon" 'ou "mauvais", etc...
    Rien de choquant ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    NON, rien de choquant...

    Quelqu'un as t'il une idee/une solution,

    par avance merci

    Daniel.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    AH !
    et comment se réfère-t-on à une cellule nommée, avec Range ?

    Et les guillemets ? On s'en moque, maintenant ?

    Essaye donc d'affiger une valeur de ton range, comme tu t'y prends (avec Range(strRange)... ==>> et dis-nous un peu ...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    pas besoin de guillemet puisque strRange est une variable !!?? CQFS

    Quelqu'un a t'il une idee/une solution?

    par avance merci

  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Tu ne peux pas modifier la mise en forme via une fonction.
    Une solution éventuelle :

    • fonction à placer dans un module
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      Function Fleche(Nb_1 As Integer, Nb_2 As Integer) As String
      Dim Result As String
       
      Select Case Nb_1 + Nb_2
          Case Is < 0: Result = "Mauvais"
          Case 0: Result = "Meme"
          Case Is > 0: Result = "Bon"
      End Select
       
      Fleche = Range(Result)
       
      End Function
    • procédure événementielle à placer dans la feuille en question
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      Private Sub Worksheet_Change(ByVal Target As Range)
      Dim plage As Range, cel As Range, DerL As Integer
       
      'en supposant que la fonction s'inscrit en colonne D
      DerL = Range("D" & Rows.Count).End(xlUp).Row
      Set plage = Range("D1:D" & DerL)
       
      For Each cel In plage
          Select Case cel.Value
              Case Range("Mauvais").Value: cel.Font.ColorIndex = Range("Mauvais").Font.ColorIndex
              Case Range("Meme").Value: cel.Font.ColorIndex = Range("Meme").Font.ColorIndex
              Case Range("Bon"): cel.Font.ColorIndex = Range("Bon").Font.ColorIndex
          End Select
      Next
      End Sub


    Autre solution possible, utiliser une simple mise en forme conditionnelle pour appliquer la couleur.
    .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. copier feuille sur place pour garder valeur et format uniquement
    Par fabiencal dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/07/2008, 17h45
  2. Fonction pour charger une chaine formaté
    Par dxdiag dans le forum Débuter
    Réponses: 5
    Dernier message: 08/02/2008, 21h35
  3. Fonction pour copier les fichiers
    Par nabil dans le forum Vos contributions VB6
    Réponses: 0
    Dernier message: 08/12/2007, 09h16
  4. [req] fonction pour copier lecteur complet
    Par freezerhm dans le forum C
    Réponses: 2
    Dernier message: 19/03/2007, 13h07
  5. Détourner une fonction pour copier un fichier en mémoire
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/11/2003, 08h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo