Problème MACRO

VincentIAPADRE Messages postés 2 Date d'inscription vendredi 30 août 2013 Statut Membre Dernière intervention 30 août 2013 - 30 août 2013 à 12:13
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 2 sept. 2013 à 12:00
Bonjour à tous,

Dans le cadre de mon travail, je souhaite faire une macro dont l'objectif est d'ouvrir un fichier (avec boite de dialogue pour choisir le fichier), de selctionner un onglet et de copier les valeurs dans le fichier cible.

Cependant, je rencontre un probleme lors de la selection de l'onglet, et du copiage des données qui sont dedans.
En synthèse, j'aimerais:
1- Ouverture d'un fichier avec selection via une boite de dialogue ==> ok
2- Dans le fichier, selection d'un onglet particulier et copier les données==> bug à ce niveau la: Set Sel = Sheets("staff list").Select
3- Collage de ces valeurs dans un autre document excel, qui est aussi le fichier d'ouverture de la macro.

Pouvez vous m'aider?
Ci joint, la macro en question,

Merci :-)

Sub OuvertureFichier()
'
' OuvertureFichier Macro
'

'
Dim sNomFich As String
Dim Sel As Range
Dim Dest As Range
Dim Sel2 As Range

'Déclarer la boite de dialogue
Dim OD As FileDialog
'Demander une boite de dialogue à Windows
Set OD = Application.FileDialog(msoFileDialogFilePicker)
'initialiser la boite de dialogue
OD.Filters.Clear 'vider les filtres par défaut

'Lancer la boite de dialogue

If OD.Show = -1 Then

sNomFich = OD.SelectedItems(1) 'fichier choisi par l'utilisateur

Workbooks.OpenText Filename:=sNomFich, _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 2), Array(3, 4), Array(4, 1), Array(5, 1), Array(6, 2), Array(7, 2), Array(8, 2), _
Array(9, 1), Array(10, 2)), TrailingMinusNumbers:=True

Set Sel = Sheets("staff list").Select
Set Sel2 = Range(Range("A1"), Range("A1").End(xlDown).End(xlToRight))
Sel.Copy
Set Dest = Windows("Matrice de passage.xlsm").Activate.Sheets("Import").Range("A1").End(xlDown).Offset(1, 0)
Dest.PasteSpecial Paste:=xlPasteAll
Else
MsgBox ("Vous n'avez pas choisi de fichier à importer")
End If
End Sub

4 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
30 août 2013 à 13:03
Bonjour,

- Lorsque l'on colle des lignes de codes sur le forum... On utilise les BALISES DE CODE
Exemple:
Dim MaVariable as String
MaVariable="Ceci est du code"


- Tu nous indiques avoir un souci lors de la selection de l'onglet.
Bien que ton code soit assez facilement compréhensible, merci d'indiquer à quelle ligne de ton code tu rencontre le souci.
Bien sur, tu as déjà essayé de lancer cette macro en mode pas à pas et vérifié le bon déroulement de celle-ci ( les variables correspondent à ce que tu souhaites, les classeurs s'affichent correctement...).


En attendant, tu as déjà un souci sur ta variable :
Dim Sel As Range
'...
'-->> Tu as un message d'erreur sur cette ligne....
Set Sel = Sheets("staff list").Select 

Tu déclares Sel en tant que RANGE... et tu lui assigne une FEUILLE ?
Ca ne peut pas fonctionner.
0
VincentIAPADRE Messages postés 2 Date d'inscription vendredi 30 août 2013 Statut Membre Dernière intervention 30 août 2013
30 août 2013 à 13:34
Bonjour,

C'est la premiere fois que je poste une question sur ce forum, excusez moi de mon manque de références.

Je rencontre un Probleme a ce niveau la:

Set Sel = Sheets("staff list").Select

En effet, la macro ouvre bien le fichier excel, mais n'arrive pas à me selectionner l'onglet intitulé "Staff list", ni a me copier les valeurs qui sont dedans.

Je démarre dans la VBA, d'ou, saans doute, mon manque sur certaines notions élémentaires. J'ai essayer de remplacer range par Variant, et ca ne fonctionne pas.

J'avait pour idée d'utiliser les variantes:
SnomFIch pour la selection du fichier
Sel pour le choix de l'onglet dans le fichier
Sel2 pour lui dire de copier les valeurs de toute la feuille
Dest pour coller le fichier dans la feuille de destination.

En vous remerciant,
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
30 août 2013 à 13:53
Range correspond à une plage de cellules
Pour un onglet il faut utiliser sheet
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
31 août 2013 à 22:02
Juste pour que les choses soient bien claires dans les esprits :
Un onglet n'est pas une feuille, mais un simple contrôle pointant vers une feuille.
Modifier donc tout ce qui est dit depuis le début de cette discussion : utiliser le mot feuille et non onglet ! Sinon ===>>> incohérent et de nature à contribuer à une fort fâcheuse confusion.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
31 août 2013 à 23:53
Là ce n'est que de la sémantique. .je ne fais que reprendre les termes du demandeur...
En lisant son code on comprend bien de quoi il s'agit.
Mais bon...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 1/09/2013 à 10:45
Bonjour, jordane,
C'est dans l'esprit de VincentIAPADRE, que je voulais clarifier les choses.
Le fait que toi, tu parles bien d'objet feuille et non d'onglet montre que ces choses sont claires dans ton esprit.
Ce n'est pas de la "sémantique", mais bel et bien une précision nécessaire. Ou alors, pour visiter une maison, on n'a plus qu'à dire, pendant qu'on y est, qu'on visite une adresse (sur l'enveloppe où elle figure)!
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
1 sept. 2013 à 11:02
Le souci pour les "novices" c'est que le terme onglet est utilisé pour désigner une feuille sur les sites microsoft....
Après pour l'analogie on pourrait presque comparer ça a . Je joue du piano... alors qu'en fait..je joue de la musique sur un piano (ou avec)... tout le monde comprend...ce n'est qu'une façon de parler.

quoi qu'il arrive ça ne fait pas avancer le chmilblique.:-)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 1/09/2013 à 11:10
"Le souci pour les "novices" c'est que le terme onglet est utilisé pour désigner une feuille sur les sites microsoft".
Jamais sur les sites anglophones sérieux, où l'on sait utiliser Tab et Sheet distinctement et à bon escient (et cela fait sans doute la différence de niveau constatée).
Et c'est d'autant plus sérieux que l'on peut agir sur certaines propriétés d'un onglet sans agir sur la feuille et vice-versa !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
2 sept. 2013 à 12:00
Bonjour,

Faisons simple.
Tu veux sélectionner une feuille :
Set Sel = Sheets("staff list").Select 

Or tu déclares ta variable Sel comme Range :
Dim Sel As Range 

Commences donc déjà par déclarer correctement tes variables, par exemple :
Dim StrNomFich As String
Dim WshToCopy As Worksheet
Dim RngDest As Range, RngToCopy As Range


Ensuite, tu pourras, au choix :
- sélectionner ta feuille :
Set WshToCopy = Sheets("staff list")
WshToCopy.Select

- l'utiliser dans un bloc With...EndWith (solution préférable)
Set WshToCopy = Sheets("staff list")
With WshToCopy
    'Le code de copie de ton Range
    'exemple :
    Set RngToCopy = .Range(.Range("A1"), .Range("A1").End(xlDown).End(xlToRight))
    RngToCopy.Copy 
End With


Note : ne pas oublier les points devant les objets se référençant à l'objet placé dans le bloc With.
0
Rejoignez-nous