Erreur dans mon code

Résolu
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 - Modifié le 10 avril 2024 à 11:18
Bruno83200_6929 Messages postés 282 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 23 octobre 2024 - 10 avril 2024 à 12:24

Bonjour,
Dans le code suivant:
Dim NJ as Range
'Worksheets("Feuil2").Range(MaPlage.Address).Copy _
    Destination:=Worksheets("Toto").Range("E3475")
Worksheets("Feuil2").Range(MaPlage.Address).Copy _
    Destination:=Worksheets("Toto").NJ.Offset(0, 4)

1) la ligne mise en commentaire fonctionnait correctement.
2) comme l'adresse "E3475" n'est pas toujours la même, je l'ai remplacé par une variable NJ (set NJ = ActiveCell) . Mais alors, ça buggue ...
Où est mon erreur ?


Windows / Chrome 123.0.0.0

A voir également:

2 réponses

blux Messages postés 26486 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 17 novembre 2024 3 315
10 avril 2024 à 11:18

Salut,

on suppose que c'est du VBA/Excel ?


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

Oui , désolé, j'ai oublié de préciser ...

0
Bruno83200_6929 Messages postés 282 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 23 octobre 2024 57
10 avril 2024 à 12:01

Bonjour,, 


Il semble que vous ayez une erreur dans la manière dont vous essayez d'utiliser la variable NJ. Dans votre code, vous avez déclaré NJ comme une variable de type Range, mais vous essayez de l'utiliser comme s'il s'agissait d'une propriété de l'objet Worksheet.

Pour utiliser correctement la variable NJ, vous devez l'utiliser comme une plage à part entière. Voici comment vous pourriez le faire :

Dim NJ As Range
Set NJ = Worksheets("Toto").Range("E3475") ' ou toute autre façon de définir NJ

Worksheets("Feuil2").Range(MaPlage.Address).Copy Destination:=NJ.Offset(0, 4)


Dans ce code, nous avons d'abord défini la variable NJ comme une plage valide dans la feuille "Toto". Ensuite, nous utilisons cette plage NJ comme destination pour la copie de la plage MaPlage depuis la feuille "Feuil2", avec un décalage de 4 colonnes vers la droite.

En espérant vous avoir aidé.

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

Merci pour tes explications toujours aussi claires et précises:
ça fonctionne bien avec Copy Destination:=NJ.Offset(0, 4) !
En fait, j'ai compris que NJ étant défini comme un Range de la feuille "Toto" , il est donc redondant de préciser dans Copy Destination:= la feuille contenant NJ (ici, Worksheets("Toto")) . C'est ce qui devait provoquer le bug ?
Merci pour ton aide! Cordialement, Mikel

1
Bruno83200_6929 Messages postés 282 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 23 octobre 2024 57 > mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024
10 avril 2024 à 12:24


Oui, exactement ! Je suis heureux que mes explications aient été utiles.

Lorsque vous définissez une plage (Range) dans une feuille spécifique (dans ce cas, "Toto"), vous capturez déjà l'emplacement précis de cette plage dans cette feuille. Ainsi, lorsque vous utilisez NJ.Offset(0, 4), vous dites essentiellement à Excel de copier vers la plage qui est décalée de 4 colonnes à droite par rapport à NJ sur la feuille "Toto". Par conséquent, spécifier la feuille dans Copy Destination devient redondant, car NJ lui-même est déjà associé à la feuille "Toto".

En omettant la feuille dans Copy Destination, vous évitez les erreurs potentielles causées par des références croisées entre différentes feuilles, ce qui aurait pu être à l'origine du bug que vous avez rencontré. En résumé, votre compréhension est tout à fait correcte !

A plus !

1