Début en VBA [Résolu]

Signaler
Messages postés
7
Date d'inscription
vendredi 15 mai 2020
Statut
Membre
Dernière intervention
19 mai 2020
-
Messages postés
7
Date d'inscription
vendredi 15 mai 2020
Statut
Membre
Dernière intervention
19 mai 2020
-
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

Messages postés
15357
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
1 octobre 2020
1 369
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?
Messages postés
7
Date d'inscription
vendredi 15 mai 2020
Statut
Membre
Dernière intervention
19 mai 2020

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
Messages postés
17232
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
22 septembre 2020
4 262
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
Messages postés
7
Date d'inscription
vendredi 15 mai 2020
Statut
Membre
Dernière intervention
19 mai 2020

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 ;)
Messages postés
16220
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
1 octobre 2020
3 038
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)
Messages postés
7
Date d'inscription
vendredi 15 mai 2020
Statut
Membre
Dernière intervention
19 mai 2020

Merci Michel pour ces liens. Info-3000 va devenir pour un temps ma page de chevet :)
Messages postés
7
Date d'inscription
vendredi 15 mai 2020
Statut
Membre
Dernière intervention
19 mai 2020

Bonsoir Michel_m.
Je me suis inscrit sur Developpez.com... Une mine d'or là aussi.
Merci beaucoup.
Messages postés
7
Date d'inscription
vendredi 15 mai 2020
Statut
Membre
Dernière intervention
19 mai 2020

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.
Messages postés
17232
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
22 septembre 2020
4 262
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

Messages postés
23514
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
1 octobre 2020
6 377
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
Messages postés
7
Date d'inscription
vendredi 15 mai 2020
Statut
Membre
Dernière intervention
19 mai 2020

Merci Eric, c'est exactement cela.

Sheets("Feuil2").Cells(4, 1).Interior.Color = Sheets("Feuil1").Cells(4, 1).DisplayFormat.Interior.Color
Messages postés
14
Date d'inscription
jeudi 14 mai 2020
Statut
Membre
Dernière intervention
16 mai 2020

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.
Messages postés
16220
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
1 octobre 2020
3 038
Bonjour,
Solutions déjà données ce matin : lire les post précédents ...