Débutant VB: pourquoi donc ces qq lignes génèrent-elles une erreur?

  • Initiateur de la discussion Initiateur de la discussion lama
  • Date de début Date de début

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 !

L

lama

Guest
Bonjour,
je suis d'un niveau intermédiaire en VB, j'ai plutôt codé en impératif qu'en objet, et j'avoue ma totale méconnaissance des classes et méthodes que j'utilise.
Cependant, j'obtiens un comportement que je ne comprends pas avec le code suivant:
Code:
    Dim c As Range
    Dim Source As String
    Dim Cible As String
    Dim Impression As String
    Dim Plage As Range
    Dim début, fin As Long
    
    Source = Worksheets("FeuilleA").Name
    Cible = Worksheets("FeuilleB").Name
    Impression = Worksheets("FeuilleC").Name 'La feuille courante, contenant le bouton qui lance cette procédure

    début = Sheets(Impression).Range("C4").Value
    fin = Sheets(Impression).Range("C5").Value
    Set Plage = Sheets(Impression).Range(Cells(début + 1, 1), Cells(fin + 1, 1))

Ceci fonctionne parfaitement, mais si dans la dernière ligne je remplace "Impression" par "Source" (je change de feuille) j'obtiens 'Erreur 1004 définie par l'application ou par l'objet' sur cette dernière ligne.

Help please! 🙁
 
Re : Débutant VB: pourquoi donc ces qq lignes génèrent-elles une erreur?

Bonjour lama.


Dans
Code:
Set Plage = Sheets(Impression).Range(Cells(début + 1, 1), Cells(fin + 1, 1))
Cells(début + 1, 1) et Cells(fin + 1, 1) font implicitement référence à des cellules de l'onglet nommé "FeuilleC" puisque
"Impression = Worksheets("FeuilleC").Name 'La feuille courante, contenant le bouton qui lance cette procédure"​
et s'écrit explicitement
Code:
Set Plage = Sheets(Impression).Range(Sheets(Impression).Cells(début + 1, 1),  Sheets(Impression).Cells(fin + 1, 1))

Lorsque vous écrivez
Code:
Set Plage = Sheets(Source).Range(Cells(début + 1, 1), Cells(fin + 1, 1))
vous obtenez explicitement
Code:
Set Plage = Sheets(Source).Range(Sheets(Impression).Cells(début + 1, 1),  Sheets(Impression).Cells(fin + 1, 1))


Difficile d'en dire plus sur quelques lignes de code ne constituant même pas une procédure complète, de surcroît sans support...


Bonne journée.


ℝOGER2327
#7695


Jeudi 19 As 142 (Saint Courtial des Péreires, aérostier et inventeur - fête Suprême Quarte)
1[SUP]er[/SUP] Frimaire An CCXXIII, 5,9916h - raiponse
2014-W47-5T14:22:48Z
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
1
Affichages
305
Réponses
4
Affichages
692
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
1 K
Réponses
9
Affichages
830
Réponses
2
Affichages
739
Réponses
3
Affichages
903
Retour