Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Affecter une valeur à plusieurs cellules sous condition

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

BChaly

XLDnaute Occasionnel
Bonsoir à tous,

Avec le code suivant, j'affecte la valeur "X" dans la cellule "C4" des feuilles "F2, F3, F4",
si la valeur de la cellule "C4" de la feuille "F1" est <> 0.

Comment faire la même chose avec plusieurs cellules situées dans des plages de cellules (Ex. "C4 : D8" et "C10 : D12")? Ces plages peuvent varier mais seront toujours identiques à celles de la feuille "F1" sur toutes les autres feuilles.

Merci pour votre aide.

Cordialement,

BChaly

Code:
Option Explicit

Sub Test()

    If Sheets("F1").Range("C4") <> 0 Then Sheets("F2").Range("C4") = "X"
    If Sheets("F1").Range("C4") <> 0 Then Sheets("F3").Range("C4") = "X"
    If Sheets("F1").Range("C4") <> 0 Then Sheets("F4").Range("C4") = "X"
    
    Range("A1").Select

End Sub
 

Pièces jointes

Re : Affecter une valeur à plusieurs cellules sous condition

Bonsoir BChaly,

Pas mal ce petit problème. Essayez donc :

Code:
Sub Test()
Dim ad As String, w As Worksheet, a As Range
ad = "C4:D8,C10:D12"
For Each w In Sheets(Array("F2", "F3", "F4"))
  w.Range(ad).FormulaR1C1 = "=IF(F1!RC<>0,""X"","""")"
  For Each a In w.Range(ad).Areas
    a = a.Value 'remplace les formules par les valeurs
  Next
Next
End Sub
A+
 
Re : Affecter une valeur à plusieurs cellules sous condition

Bonsoir job75,

Super !!! C'est exactement ce que je cherchais. Merci mille fois !!!

Est-ce possible de faire la même chose si les feuilles F2, F3, F4 se situent dans un autre fichier?
Je pense qu'il faut remplacer "Sheets(Array("F2", "F3", "F4"))" par une autre instruction mais laquelle?

A+
 
Dernière édition:
Re : Affecter une valeur à plusieurs cellules sous condition

Re,

Si le classeur où se trouve la feuille F1 se nomme Test_T.xls,

et si le classeur où se trouvent les feuilles F2 F3 F4 se nomme TOTO.xls :

Code:
Sub Test()
Dim ad As String, w As Worksheet, a As Range
ad = "C4:D8,C10:D12"
For Each w In Workbooks("TOTO.xls").Sheets(Array("F2", "F3", "F4"))
  w.Range(ad).FormulaR1C1 = "=IF([Test_T.xls]F1!RC<>0,""X"","""")"
  For Each a In w.Range(ad).Areas
    a = a.Value 'remplace les formules par les valeurs
  Next
Next
End Sub

Attention, il faut des guillemets anglais dans la formule s'il y a des espaces :

Code:
 w.Range(ad).FormulaR1C1 = "=IF('[Mon fichier.xls]F1'!RC<>0,""X"","""")"
Bien entendu les 2 fichiers doivent être ouverts.

A+
 
Re : Affecter une valeur à plusieurs cellules sous condition

Bonsoir à tous

Voir si on peut creuser cette piste
Code:
Sub a()
Dim x: x = Array("F1", "F2", "F3", "F4")
With Sheets(x)
.FillAcrossSheets Worksheets("F1").Range("C4:D8")
.FillAcrossSheets Worksheets("F1").Range("C10:D12")
End With
End Sub
 
Dernière édition:
Re : Affecter une valeur à plusieurs cellules sous condition

Re,

Rectificatif, le fichier Test_T.xls peut être fermé.

Il faut alors que la formule comporte son chemin d'accès.

Avec la macro dans le fichier des feuilles F2 F3 F4 :

Code:
Sub Test()
Dim ad As String, w As Worksheet, a As Range
ad = "C4:D8,C10:D12"
For Each w In Sheets(Array("F2", "F3", "F4"))
  w.Range(ad).FormulaR1C1 = "=IF('C:\...\...\[Test_T.xls]F1'!RC<>0,""X"","""")"
  For Each a In w.Range(ad).Areas
    a = a.Value 'remplace les formules par les valeurs
  Next
Next
End Sub
Dans tous les cas il faut les guillemets anglais.

Edit : bonsoir Jean-Marie, bon faut aller au lit maintenant 🙂

A+
 
Dernière édition:
Re : Affecter une valeur à plusieurs cellules sous condition

Bonsoir Job75


Faut pas creuser alors ?
(Pour une fois que j'utilise .FillAcrossSheets (d’ailleurs c'est la première fois 😉 ), c'est pas de chance ! =

Faut que j'aille ronfler ?
 
Re : Affecter une valeur à plusieurs cellules sous condition

Re


J'ai compris

Maintenant je vais dormir 😉
(Je sens qu'on peut creuser finalement non ?)
Code:
Sub ab()
Dim f As Worksheet, ta, blo: Set f = Worksheets("F1")
ta = f.Range("C4:D8"): blo = f.Range("C10:D12")
f.Range("C4:D8,C10:D12") = "X"
Dim x: x = Array("F1", "F2", "F3", "F4")
With Sheets(x)
.FillAcrossSheets f.Range("C4:D8")
.FillAcrossSheets f.Range("C10:D12")
End With
f.Range("C4:D8") = ta
f.Range("C10:D12") = blo
End Sub
 
Re : Affecter une valeur à plusieurs cellules sous condition

Bonsoir et Merci à tous les deux pour votre aide.

job75,

Très fort, C'est parfait! Je me permets de poser une question subsidiaire: Est-il possible de faire cette opération dans le sens contraire? A savoir laisser le fichier de réception "Toto" fermé, et lancer la macro à partir de "Test_T" qui est le fichier émetteur.

Staple1600,

Le code affecte une valeur "X" à toutes les cellules vides de "F2", "F3", "F4", mais en cherchant un peu je pense que je peux trouver la solution. Y-a-t-il un avantage en utilisant "FillAcrossSheets".

A+
 
Re : Affecter une valeur à plusieurs cellules sous condition

Bonsoir BChaly,

La macro du post #6 lit dans un fichier fermé, ce n'est pas difficile avec une formule de liaison.

Ecrire dans un fichier fermé c'est plus compliqué, on peut le faire par la méthode ADO.

Mais la macro fait des choses assez complexes : entrée d'une formule dans une plage, copie de valeurs sur des zones...

Alors je n'essaye pas d'aller plus loin.

A+
 
Re : Affecter une valeur à plusieurs cellules sous condition

Bonjour job75,

Pas de problème, malgré cela votre aide a été très précieuse et je vous remercie pour vos réponses.

Joyeuses Fêtes de fin d'année.

Cordialement,

BChaly
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
829
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…