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

Résolu
mikel831 Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   -  
mikel831 Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   -

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

3 réponses

  1. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
     

    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
    1. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
       

      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
    2. mikel831 Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   19
       

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

      0
  2. cousinhub29 Messages postés 1114 Date d'inscription   Statut Membre Dernière intervention   383
     

    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
    1. mikel831 Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   19
       

      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
  3. cousinhub29 Messages postés 1114 Date d'inscription   Statut Membre Dernière intervention   383
     

    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
    1. mikel831 Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   19
       

      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
      1. cousinhub29 Messages postés 1114 Date d'inscription   Statut Membre Dernière intervention   383 > mikel831 Messages postés 237 Date d'inscription   Statut Membre Dernière intervention  
         

        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
      2. mikel831 Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   19 > cousinhub29 Messages postés 1114 Date d'inscription   Statut Membre Dernière intervention  
         

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

        0
      3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mikel831 Messages postés 237 Date d'inscription   Statut Membre Dernière intervention  
         

        bonjour,

        vu tes questions répétitives sur les mêmes sujets, je me demande si tu prends le temps de comprendre.

        0
      4. mikel831 Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   19 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         

        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