VBA Excel : Création de Ranges par concaténation de 2 autres
Résolumikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 - 14 avril 2024 à 08:37
- VBA Excel : Création de Ranges par concaténation de 2 autres
- Liste déroulante excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
- Excel compter cellule couleur sans vba - Guide
3 réponses
13 avril 2024 à 18:56
Bonsoir Mike,
Malgré que vous ayez oublié d'indiquer votre code, je vais essayer de vous expliquer le principe.
Si les données de la plage NF sont dans la colonne A, par exemple, vous pouvez utiliser A1:A10.
Pour la plage origine vous saisissez =OFFSET(A1,2,0,10,1)
Pour la plage destination vous saisissez: =OFFSET(A1,-2,0,10,1)
Modifié le 13 avril 2024 à 19:06
Bonjour,
Lors des déclarations des variables, il faut toutes les déclarer
La syntaxe "NJ, Origine, Destination As Range" n'est pas correcte.
Ensuite, Offset ne fait que décaler la plage.
Dans ce cas, il serait plus importun d'essayer ce code :
Sub Bout_de_Code_3()
Dim NJ As Range, Origine As Range, Destination As Range
With Sheets("MaFeuil")
Set NJ = .Range("A1") 'par exemple, cellule A1
Set Origine = NJ.Offset(0, 3) 'donc cellule D1
Set Destination = NJ.Offset(7, 3) 'donc cellule G7
End With
End Sub
Bruno, ça marche pas top, ChatGpt, non?
Modifié le 13 avril 2024 à 19:31
Merci pour vos réponses!
Mais, malheureusement ce n'est pas exactement ce que je souhaite obtenir. Je me suis probablement mal exprimé !
Si NJ est par exemple en A1 (mais il peux être n'importe où, c'est pour cela que je nomme ce range NJ dans mon code ) je dois obtenir:
1) Origine égal à la zone A1: B1 en codant avec NJ et des offset
2) Destination égal à la zone A2: B8 toujours exprimé avec NJ et des offset
13 avril 2024 à 19:36
Re-,
C'est bien ce que je te disais, Offset ne fait que décaler.
Pour décaler et définir une plage plus (ou moins) conséquente, il faut en plus utiliser Resize...
Dans ton cas :
Sub Bout_de_Code_3()
Dim NJ As Range, Origine As Range, Destination As Range
With Sheets("Feuil1") 'j'ai modifié le nom de l'onglet
Set NJ = .Range("A1") 'par exemple, cellule A1
NJ.Select 'pour essai
Set Origine = NJ.Resize(1, 2) 'donc plage A1:B1
Origine.Select 'pour essai
Set Destination = NJ.Offset(1, 0).Resize(7, 2) 'donc plage A2:B8
Destination.Select 'pour essai
End With
End Sub
J'ai mis les instructions .Select, afin que tu puisses observer les définitions des plages
Modifié le 13 avril 2024 à 20:14
C'est top! ça fonctionne parfaitement...
Cela dit, j'ai entre temps trouvé sur le site de Microsoft le code suivant:
Set Origine = Range(NJ, NJ.Offset(0, 3))
Set Destination = Range(NJ.Offset(1, 0), NJ.Offset(7, 3))
que j'ai testé et qui fonctionne bien
Merci pour ton aide. Cordialement, Mikel
13 avril 2024 à 20:28
Re-,
Il y a plein de manière de coder, mais la meilleure restera toujours celle que tu comprends, et que tu maîtrises...
Utiliser un code "joli", voire "plus court", n'est pas forcément synonyme d'efficience, surtout si tu n'en as pas compris la construction.
Bonne continuation
13 avril 2024 à 20:50
J'adhère à cet avis : le principal est de comprendre!
14 avril 2024 à 07:53
bonjour,
vu tes questions répétitives sur les mêmes sujets, je me demande si tu prends le temps de comprendre.
Modifié le 14 avril 2024 à 08:40
Bonjour,
Je ne pense pas que mes questions soient répétitives: chacune porte sur un sujet particulier et chaque fois différent, avec des subtilités de syntaxes que je ne maîtrise pas par manque d'expérience ...
13 avril 2024 à 19:10
Il y a eu un bug, je n'avais que votre question, puis lorsque je suis revenu, je vois que vous avez indiqué votre code. En plus j'avais mal interprété ce que vous désiriez faire exactement.
C'était presque ca, je vous ai repris les erreurs :
Sub Bout_de_Code_3()
Dim NJ As Range, Origine As Range, Destination As Range
Set NJ = Sheets("MaFeuil").ActiveCell
Set Origine = NJ.Offset(0, 3)
Set Destination = NJ.Offset(1,0).Resize(7,3)
End Sub
13 avril 2024 à 19:14
Désolé, mais je ne comprends pas ta réponse ???