Alternative à une fonction VBA

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 !

Etienne2323

XLDnaute Impliqué
Bonjour à tous,
je frappe un mur aujourd'hui avec une fonction VBA et j'aurais besoin d'un petit coup de main. Je cherche à savoir si c'est possible d'adapter ceci à ma situation. Il s'agit simplement d'un exemple mais ça présente bien le cas.

Code:
Set Plage = Application.Union(Range("A1:A5"), Range("C1:C5"))

For Each Cel In Plage
    Cel.Interior.ColorIndex = 6
Next Cel

Voila le problème. Si mes deux plages sont sur le même onglet, aucun problème, la fonction Application.Union fait très bien le travail. Par contre, les deux plages que je cherche à couvrir se trouvent sur deux onglets différents. Existe-t'il une manière de faire un Range qui couvre des plages qui se trouvent sur 2 onglets distincts ?

Merci à vous tous !

Cordialement,

Étienne
 
Re : Alternative à une fonction VBA

Salut,

Simplement comme ceci (pas besoin de passer par une boucle pour remplir les cellule)
Code:
     Worksheets("Feuil1").Range("A1:A5").Interior.ColorIndex = 6
     Worksheets("Feuil2").Range("C1:C5").Interior.ColorIndex = 6

Remplace Feuil1 et2 par les bonnes feuilles.

++
Minick
 
Re : Alternative à une fonction VBA

Bonjour Minick,
merci pour la réponse mais ce n'est pas ce que je cherche à faire. J'avais utilisé cet exemple seulement pour illustrer le principe. En réalité, ma situation pourrait être décrite comme suit. J'ai une boucle sous forme de tableau qui stock des les noms de mes fonds et les rendements qu'ils ont obtenus au cours du trimestre. Une fois cette action complétée, j'effectue une recherche dans un autre fichier, nommé "DATA" de manière à inscrire ces rendements (tirés de mon tableau) aux bons endroits, selon les bons noms de fonds (tirés également de mon tableau) . Le fait est que j'avais plus de 256 colonnes dans mon onglet DATA et donc j'ai dû séparer le tout en 2 onglets. J'aimerais seulement pouvoir continuer mon "scan" des noms des fonds sur mon 2e onglet.

Merci encore !

Étienne
 
Re : Alternative à une fonction VBA

bonjourvetenne,

a essayer

Set Plage = Application.UnionSheets("feuil1").(Range("A1:A5"), Sheets("feuil2").Range("C1:C5"))

For Each Cel In Plage
Cel.Interior.ColorIndex = 6
Next Cel


remplacer nom feuil1 et Feuil2

bon WE
Bpol
 
Re : Alternative à une fonction VBA

Bonjour,

VBA sait faire beaucoup de choses, mais pas l'union de plages dans des feuilles différentes.

Il faut analyser chaque feuille séparément comme l'indique Minick.

Edit : par contre, si les adresses des plages sont les mêmes, on peut sélectionner simultanément les 2 feuilles, toute modification dans l'une se répercute alors dans l'autre.

A+
 
Dernière édition:
Re : Alternative à une fonction VBA

Bonjour bpol,
merci pour l'essai. J'ai effectivement essayé tout ce qui tournait autour de la fonction union mais sans aucun résultats valables. Comme le précise job, il est impossible de faire des modifications dans une plage sur deux onglets différents. J'ai donc décidé de décomposer mes boucles et mes listes de saisies 🙁 Beaucoup plus long mais au moins ça fonctionne.

Merci à tous pour votre aide !

Bonne journée !

Cordialement,

Étienne
 
Re : Alternative à une fonction VBA

bonjour Etienne2323, Minick, bpol, job75

j'arrive après la bataille...

une autre solution, mais dans tous les cas, il faudra modifier le code un peu...
Code:
Sub test()
Dim zones() As Range, i As Integer, curCell As Range

zones = MonUnion( _
    ThisWorkbook.Sheets("Feuil1").Range("A1:A5"), _
    ThisWorkbook.Sheets("Feuil2").Range("B1:B5"), _
    ThisWorkbook.Sheets("Feuil3").Range("C1:C5"))
    
    
For i = LBound(zones) To UBound(zones)
    For Each curCell In zones(i).Cells
        curCell.Interior.ColorIndex = 6
    Next curCell
Next i
End Sub



Public Function MonUnion(ParamArray zones()) As Range()
Dim i As Integer, res() As Range
For i = LBound(zones) To UBound(zones)
    ReDim Preserve res(LBound(zones) To i)
    Set res(i) = zones(i)
Next i
MonUnion = res
End Function
a+
 

Pièces jointes

- 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

J
Réponses
13
Affichages
1 K
T
Réponses
2
Affichages
1 K
TrXtan
T
A
Réponses
3
Affichages
2 K
Alex6942
A
A
Réponses
6
Affichages
2 K
AlexMancho
A
Retour