Travailler sur deux classeurs dont on ne connait pas le nom

lucsky

XLDnaute Nouveau
Bonjour à tous,

Après avoir beaucoup appris en parcourant ce forum, je me jette à l'eau aujourd'hui pour mon premier message.
Je travaille sous Mac et sous Mac office 2011.

Pour vous situer je suis actuellement en train de réaliser une macro pour faciliter l'export de données depuis XL vers un logiciel de CRM (salesforce).
Le but de cette macro est tout simple, copier des colonnes d'un classeur vers un autre classeur en fonction d'un critère.
Le problème c'est que je ne connais pas le nom du fichier source et je veux permettre à l'utilisateur d'ouvrir le fichier qui l'intéresse.

Voici le code VBA que j'ai fait et qui ne fonctionne pas :
VB:
Sub ouverture_classeur()
'
Dim Classeur1 As Workbook
Dim Classeur2 As Workbook
    Set Classeur1 = Workbooks.Open(Application.GetOpenFilename)
    Set Classeur2 = Workbooks.Add()


        Classeur1.Worksheet("INFOS CONGRES").Range("$A$4:$O$302").AutoFilter Field:=3, Criteria1:="Piste"
        Range("E4:E300").Select
        Selection.Copy
    
            Classeur2.Worksheet("Feuil1").Range("A1").Select
            ActiveSheet.Paste

La macro me demande quel classeur je veux ouvrir et crée automatiquement un nouveau classeur mais par contre
Elle reste sur ce nouveau classeur et forcément elle ne trouve pas la page INFOS CONGRES.

Un grand merci pour votre aide, ça fait deux jours que j'essaie plein de choses et je ne trouve pas la solution :(

PS: Si je ne suis pas clair dites le moi
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Travailler sur deux classeurs dont on ne connait pas le nom

Bonjour lucsky et bienvenu sur le forum

Si tu utilise
VB:
Range("E4:E300").Select
VBA n'ayant pas d'indication quant au classeur, il utilise le classeur "visible" donc le dernier ouvert.
Précise le classeur
VB:
Classeur1.Worksheet("INFOS CONGRES").Range("E4:E300").Select
Ou mieux utilise With / End With
VB:
Sub coo()
Dim Classeur1 As Workbook
Dim Classeur2 As Workbook
Set Classeur1 = Workbooks.Open(Application.GetOpenFilename)
Set Classeur2 = Workbooks.Add()
With Classeur1.Sheets("INFOS CONGRES")
    .Range("$A$4:$O$302").AutoFilter Field:=3, Criteria1:="Piste"
    .Range("E4:E300").Copy
 End With
Classeur2.Worksheet("Feuil1").Range("A1").Select
ActiveSheet.Paste
End Sub
Cordialement
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Travailler sur deux classeurs dont on ne connait pas le nom

Bonjour,

peut être placer un "activate" :
Code:
Dim Classeur1 As Workbook
Dim Classeur2 As Workbook
    Set Classeur1 = Workbooks.Open(Application.GetOpenFilename)
    Set Classeur2 = Workbooks.Add()
Classeur1.Activate

bon après midi
@+

Ediion : bonjour fg:)
 
Dernière édition:

lucsky

XLDnaute Nouveau
Re : Travailler sur deux classeurs dont on ne connait pas le nom

Merci tous les deux pour votre réponse super rapide mais malheureusement, cela ne marche pas:(
Le débogueur s'arrête sur cette ligne

[highlight]
Classeur1.Sheets("INFOS CONGRES").Range("$A$4:$O$302").AutoFilter Field:=3, Criteria1:="Piste"
[/code]
 

lucsky

XLDnaute Nouveau
Re : Travailler sur deux classeurs dont on ne connait pas le nom

Bon ben voila un template de doc qui correspond au classeur que l'utilisateur pourrait ouvrir .
J'ai mis dedans la macro mais normalement elle est dans un autre classeur.

Merci pour votre aide
 

Pièces jointes

  • Template Congrès partnering2.xls
    121 KB · Affichages: 45

Pierrot93

XLDnaute Barbatruc
Re : Travailler sur deux classeurs dont on ne connait pas le nom

Re,

si le classeur que tu viens de joindre est actif, cette instruction fonctionne chez moi :
Code:
Sheets("INFOS CONGRES").Range("$A$4:$O$4").AutoFilter Field:=3, Criteria1:="Piste"
 

lucsky

XLDnaute Nouveau
Re : Travailler sur deux classeurs dont on ne connait pas le nom

Oui je sais que ça marche,
le problème vient des variables Classeur1 et Classeur2.
Je suis obligé de passer par des variables car suivant le congrès, le classeur aura un nom différent et il faut que cette macro soit effective. Quelque soit le nom du classeur qui est ouvert par la requête :

Code :
Set Classeur1 = Workbooks.Open(Application.GetOpenFilename)
 

Pierrot93

XLDnaute Barbatruc
Re : Travailler sur deux classeurs dont on ne connait pas le nom

Re,

A noter, tester sous 2003... mais àpriori je viens de vois que tu es sous MAC excel 2011 bien que tu ais mis toutes versions.... mais les objets filtres me smble t il sont différents....
 

Efgé

XLDnaute Barbatruc
Re : Travailler sur deux classeurs dont on ne connait pas le nom

Re lucsky, Bonjour Pierrot :)
Sous 2003 Ceci devrait aller, sous mac aucune idée.....:
VB:
Sub ouverture_classeur2()
'
Dim Classeur1 As Workbook, Classeur2 As Workbook
Dim Fdepart As Worksheet, Farrive As Worksheet

Set Classeur1 = Workbooks.Open(Application.GetOpenFilename)
Set Classeur2 = Workbooks.Add()
Set Fdepart = Classeur1.Sheets("INFOS CONGRES")
Set Farrive = Classeur2.Sheets("Feuil1")

Classeur1.Activate

Fdepart.Range("$A$4:$O$4").AutoFilter Field:=3, Criteria1:="Piste"

    Fdepart.Range("E4:E300").Copy Farrive.Range("A1")
    
    Fdepart.Range("G4:H300").Copy Farrive.Range("B1")
    
    Fdepart.Range("K4:N300").Copy Farrive.Range("D1")
    
    Fdepart.Range("A4:A300").Copy Farrive.Range("H1")
    
    Fdepart.Range("B1").Copy Farrive.Range("J1")
    Classeur2.SaveAs Filename:= _
    "GEN:BD et MARKETING:CRM:Campagne Salesforce:Import campagne Congrès partnering:import" & Range("J1").Value & ".csv" _
    , FileFormat:=xlCSV, CreateBackup:=False
End Sub
Cordialement
 

lucsky

XLDnaute Nouveau
Re : Travailler sur deux classeurs dont on ne connait pas le nom

Le code du filtre marche aussi sous mac...

Merci pour ta remarque j'ai changé la version sur le premier message.
Je me rends fou depuis un moment avec ces variables de Workbook parceque quand je met un nom de classeur fixe, cette macro marche bien...
 

lucsky

XLDnaute Nouveau
Re : Travailler sur deux classeurs dont on ne connait pas le nom

Merci FG,
Ta solution marche nickel :)
En revanche, j'ai des problèmes de références dans les cellules copiées peut on faire un collage de valeur uniquement ?
 

Discussions similaires

Statistiques des forums

Discussions
312 389
Messages
2 087 933
Membres
103 677
dernier inscrit
Amrani