Début en VBA

Résolu
Bonjour,

Motivé par l'envie d'avancer dans un projet dépassant le simple cadre d'Excel, je me rends bien compte que sans la programmation de macros je ne pourrais progresser.
Je débute donc en VBA tout récemment ... j'ai commencé hier soir.
J'ai surtout commencé à fouiller le Net sans savoir où ni quoi chercher précisément.
La seule constance étant que je sache quel résultat je souhaite obtenir dans Excel.

Pour l'instant, mon objectif est d'arriver à recopier les cellules de la feuille1 vers la feuille2 sans avoir d'aller/retour visuel entre chaque feuille. à chaque copie de cellule.

J'ai compris qu'il faut donc éviter le
Worksheets("feuille1").Select


Lors de la programmation, je souhaite que la cellule 'destination' prenne la couleur de la cellule 'source' :

Sheets("feuille2").Cells(4, 1).Interieur.Color = Sheets("feuille1").Cells(4, 1).FormatConditions(1).interior.Color


La cellule destination prends bien une couleur au lancement de la macro, mais pas la couleur de la cellule feuille source. Il faut savoir que la couleur de la cellule source est issue d'une mise en forme conditionnelle. Cela a-t-il une cause à effet ?

Avez-vous une explication ? et surtout un coup de pouce à me proposer ?

Vous remerciant par avance.

7 réponses

  1. Bonjour,

    destination prends bien une couleur
    Par quel miracle, si cellule source n'a pas de couleur?

    source est issue d'une mise en forme
    Quelle est cette mise en forme?
    0
    1. Bonjour F894009,

      la cellule source a un mise en forme conditionnelle définie dans Excel, selon la valeur de la case, 1=vert, 2 =rouge, 3 = orange.

      En utilisant le code corrigé : (Merci Mike -31)

      Sheets("Feuil2").Cells(4, 1).Interior.Color = Sheets("Feuil1").Cells(4, 1).FormatConditions(1).Interior.Color


      Lorsque dans la Feuil1 j'ai ma case en vert, une fois la macro lancée je n'obtient pas du rouge dans la Feuil2
      0
  2. Bonjour,

    J'ajouterais que le VBA est un langage à utiliser sans la moindre erreur ce qui bloque le code voir les fonctions d'Excel
    il est possible d'écrire un code de diverses façons à condition de respecter les règles strictes du langage
    si on analyse ta formule
    Sheets("feuille2").Cells(4, 1).Interieur.Color = Sheets("feuille1").Cells(4, 1).FormatConditions(1).interior.Color
    plusieurs erreurs
    Sheets("feuille2") feuille2 doit être le nom exact de l'onglet si tu ne l'as pas renommé c'est Feuil2
    ensuite tu écris Interieur.Color c'est Interior
    pour commencer je te conseille d'écrire en minuscule et si les termes sont juste la premièer occurrence se mettra automatiquement en majuscule
    quelques exemples pour écrire ta ligne de code

    Sheets("Feuil2").Cells(4, 1).Interior.Color = Sheets("Feuil1").Cells(4, 1).Interior.Color
    ou
    Sheets("Feuil2").Range("A4").Interior.Color = Sheets("Feuil1").Range("A4").Interior.Color
    ou
    Sheets(2).Range("A4").Interior.Color = Sheets(1).Range("A4").Interior.Color
    ou encore
    Sheets(2).[A4].Interior.Color = Sheets(1).[A4].Interior.Color
    ou encore avec des plages nommées
    [Cible2].Interior.Color = [Cible1].Interior.Color

    si je peux me permettre, pour commencer en VBA il faut se fixer un objectif simple et utiliser un support papier avec des explications assez claire comme VBA pour les Nuls que je trouve pas trop mal écrit et facile à se repérer et qui ne mérite pas ce titre
    0
    1. Merci beaucoup Mike-31 pour ta réponse rigoureuse, avec plusieurs solutions et explications.
      J'ai compris les 3 premières possibilités d'écriture mais je pense que pour la 4° il me manque la notion nécessaire à nommer une plage en VBA. (à moins que la plage ne soit nommée via Excel ... il faut que je teste)

      VBA pour les nuls ... assurément un bon début pour moi, je vais regarder ;)
      0
  3. Contributeur
    Bonjour à tous

    Pour apprendre le VBA, il existe ce site particulièrement pédagogique et décontracté même s''il date (XL2003)
    http://www.http//www.info-3000.com/vbvba/


    mais n'oublie pas ce dicton excellien:

    AVANT DE PENSER VBA, PENSER EXCEL

    Tu trouveras aussi des topos sur VBA Excel ici (niveau plus élevé)
    http://www.https//excel.developpez.com/cours/?page=prog#environnement


    En ce qui concerne ton problème actuel
    il faut que tu recopies les conditions de mise en couleur sur la cellule cible (il y a mieux avec une macro parametrée mais c'est un 2° niveau)
    0
    1. Merci Michel pour ces liens. Info-3000 va devenir pour un temps ma page de chevet :)
      0
    2. Bonsoir Michel_m.
      Je me suis inscrit sur Developpez.com... Une mine d'or là aussi.
      Merci beaucoup.
      0
  4. Bonjour à tous,

    Je ne peux pas recopier simplement la valeur de cellule source vers la cellule destination et appliquer sur la cellule destination la même mise en forme conditionnelle.
    Mon objectif final est de recopier la couleur d'une cellule source vers ma cellule destination (mon premier post) et la seconde étape sera de recopier la valeur d'une autre cellule source toujours vers ma même cellule destination.
    > Copier Feuil1 couleur A1 vers Feuil2 A1
    > Copier Feuil1 valeur A2 vers Feuil2 A1

    Merci à vous pour les réponses que vous m'avez apportées.
    0
    1. Re,

      Là aussi plusieurs façon d'écrire le code, essaye comme cela

      Sheets("Feuil2").Range("A1") = Sheets("Feuil1").Range("A2").Value
      Sheets("Feuil2").Range("A1").Interior.Color = Sheets("Feuil1").Range("A1").Interior.Color

      0
      1. Contributeur
        Bonjour,

        attention que .FormatConditions(1).interior.Color te fourni la couleur définie pour la MFC, mais pas celle de la cellule. La MFC peut être appliquée... ou pas.
        Pour avoir le résultat de toutes les MCF, appliquées ou pas, c'est :
        .DisplayFormat.Interior.Color

        eric
        0
        1. Merci Eric, c'est exactement cela.

          Sheets("Feuil2").Cells(4, 1).Interior.Color = Sheets("Feuil1").Cells(4, 1).DisplayFormat.Interior.Color
          0
      2. Bonjour :)

        Pourquoi ne pas copier simplement la valeur et affecter la même mise en forme conditionnelle dans la feuille2 ?

        Cela donnerait simplement :

        Sheets("feuille2").range("A1") = Sheets("feuille1").range("A1")

        Et par ce biais vous obtiendrez avec la même mise en formes conditionnelles, la même couleur.
        -1
        1. Contributeur
          Bonjour,
          Solutions déjà données ce matin : lire les post précédents ...
          0