VBA Excel : Création de Ranges par concaténation de 2 autres

Résolu
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 - Modifié le 13 avril 2024 à 18:56
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 - 14 avril 2024 à 08:37

Bonjour,
Dans le bout de code suivant, je cherche à créer deux ranges Origine et Destination par concaténation d'un range NF et des offset:
Sub Bout_de_Code_3()
Dim  NJ, Origine, Destination As Range
Sheets("MaFeuil").Select
Set NJ = ActiveCell
Set Origine = NJ : NJ.Offset(0, 3)
Set Destination = NJ.Offset(1,0) : NJ.Offset(7,3)

End Sub
Mais ce code est incorrect car ça bugue ... et je ne trouve pas les erreurs ???


Windows / Chrome 123.0.0.0

A voir également:

3 réponses

Bruno83200_6929 Messages postés 282 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 23 octobre 2024 57
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)


1
Bruno83200_6929 Messages postés 282 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 23 octobre 2024 57
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

0
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 16
13 avril 2024 à 19:14

Désolé, mais je ne comprends pas ta réponse ???

0
cousinhub29 Messages postés 955 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 15 novembre 2024 344
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?


0
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 16
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

0
cousinhub29 Messages postés 955 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 15 novembre 2024 344
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


0
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 16
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

0
cousinhub29 Messages postés 955 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 15 novembre 2024 344 > mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024
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

0
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 16 > cousinhub29 Messages postés 955 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 15 novembre 2024
13 avril 2024 à 20:50

J'adhère à cet avis : le principal est de comprendre!

0
yg_be Messages postés 23333 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551 > mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024
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.

0
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 16 > yg_be Messages postés 23333 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024
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 ... 

0