Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 04/02/2010, 10h45   #1
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 27
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 27
Points : 15
Points : 15
Par défaut Parcourir une feuille d'un autre classeur

Bonjour,
je cherche à lire au fur et à mesure des lignes du haut vers le bas dans une feuille donnée dans un classeur.
Je cherche à utiliser une ligne de code sous la forme :
<Nom du classeur à lire>.<Feuille du classeur à lire>.<parcourir un range de cellules>

J'ai le message d'erreur :
Citation:
Erreur d'execution 1404 : "La méthode 'Range' de l'objet '_worksheet' a échoué
je ne trouve pas mon erreur dans le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
Sub Importation(sNomFeuille As String)
    Dim lSource As Long, lDest As Long
    Dim WbSource As Workbook, wbCible As Workbook
    Dim shCible As Worksheet
    Dim rPlageCell As Range

Set WbSource = ThisWorkbook
Set wbCible = Application.Workbooks.Open(Application.GetOpenFilename)
Set shCible = Workbooks(wbCible.Name).Worksheets(sNomFeuille)

For lSource = 3 To shCible.Range("A56536").End(xlUp).Row
    'Set rPlageCell = shCible.Range("A" & lSource) 'Cette ligne fonctionne
    Set rPlageCell = shCible.Range(Cells(lSource, 1), Cells(lSource, 3))
Next lSource
End Sub
En rouge la ligne qui provoque l'erreur, je dois mal me débrouiller avec l'utilisation :
Code :
range(cells(lig, col), cells(lig,col))
Le ligne du dessus en commentaire fonctionne, mais ne me permet pas de lire la plage de cellules dont j'ai besoin par la suite.

Je vous joins les 2 fichiers que j'ai épuré pour l'exemple.
Le fichier classeursource.xls est à ouvrir en 1er, puis un clic sur le bouton Importation dans un des onglets demande l'ouverture du second fichier : classeurcommande.xls

Merci de votre aide
Did85
Fichiers attachés
Type de fichier : xls ClasseurSource.xls (38,5 Ko, 3 affichages)
Type de fichier : xls ClasseurCommande.xls (16,5 Ko, 2 affichages)

Dernière modification par jpcheck ; 04/02/2010 à 11h00. Motif: on privilegie les prefixes pour les version Excel :)
did85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 11h49   #2
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 27
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 27
Points : 15
Points : 15
J'ai trouvé, il faut ajouter dans la ligne en rouge :

Code :
Set rPlageCell = shCible.Range(shCible.Cells(lSource, 1), shCible.Cells(lSource, 3))
Merci
did85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 11h55   #3
Membre Expert
 
Avatar de Fvandermeulen
 
Frédéric Vandermeulen
Inscription : juillet 2007
Messages : 1 716
Détails du profil
Informations personnelles :
Nom : Frédéric Vandermeulen
Âge : 36
Localisation : Belgique

Informations forums :
Inscription : juillet 2007
Messages : 1 716
Points : 2 108
Points : 2 108
Salut,
Quand tu utilise Range(Cells(x,y),cells(x,z)) il vaut toujours mieux préciser la feuille sur laquelle la plage doit être récupérée, surtout si tu travaille avec deux fichiers.
En fait la fait de préciser avant Range ne suffit pas car il considère que Cells appartient à la feuille active.
Ta ligne doit donc s'écrire

Code :
Set rPlageCell = shCible.Range(shCible.Cells(lSource, 1), shCible.Cells(lSource, 3))
A+

Edit: Post inutile, désolé j'avais pas rafraichi...
__________________
N'oubliez pas le si votre problème est solutionné.
Fvandermeulen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 13h04.


 
 
 
 
Partenaires

Hébergement Web