Windows(Variable).Activate comment ça marche

Bonjour;

Je souhaiterais utiliser l'instruction Windows(variable).Activate pour récupérer des informations sur différents classeur.

J'utilise une variable contenant le nom du classeur plutôt que de l'inscrire directement car il change toutes les semaines.

Je récupéré le nom du fichier lorsque l'utilisateur l'ouvre voir code*. L'ouverture du fichier ne pose aucun problème je récupéré bien son nom dans ma variable "Nom3" l'instruction VarType me confirme que la variable est bien de Type de String et pourtant rien à faire le programme bloque toujours sur la ligne Windows(variable).Activate.

Savez quel peut-être le problème ? Voici le code pour éclairer mon problème:

' ouverture du Troisième fichier

Set wbFichierUsager = ThisWorkbook

Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False

intChoice = Application.FileDialog(msoFileDialogOpen).Show

If intChoice <> 0 Then

strFileName = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)

Dim Name3 As String
Name3 = Dir(strFileName)

MsgBox VarType(Name3)

Workbooks.Open strFileName

Set wbSource = ActiveWorkbook

Else

MsgBox " La procédure est annulée car aucun fichier n’a été entré. "

Exit Sub

End If

    Windows(Name3).Activate
    Sheets("Liste TT  DO-NORD").Select
    Sheets("Liste TT  DO-NORD").Copy After:=Workbooks("Classeur1").Sheets(1)

merci d'avance et Bonne journée

Bonjour,

as tu vérifié avec les points d'arrêt le contenu de ta variable Name3 au fil de la procédure ?

Réinsère la ligne proposée et re-testes

Workbooks.Open strFileName

==>Name3 = activeworkbook.name

Set wbSource = ActiveWorkbook

Sinon sans fichier difficile de te répondre

Cordialement

FINDRH

Bonjour,

Si tu pouvais produire un code lisible, ce serait bien !

L'utilisation de Windows est encore un héritage de l'enregistreur ! Quand donc codera-t-on en oubliant définitivement l'enregistreur !! )

Mais le problème est de toute façon que Name3 n'est pas un nom de classeur...

(VBA offre une propriété qui partout dans le code identifie le classeur dans leque se trouve ledit code : ThisWorkbook ! C'est vraiment du vice que s'en servir pour réaffecter l'objet à une autre variable !)

Cordialement.

Après revérification la variable contient bien le nom du fichier rechercher, et pourtant ça bloque toujours.

Ci-joint les 2 fichiers utilisés.


Désolés pour la mauvaise clarté du code, je débute et j'avoue avoir piqué le code permettant l'ouverture d'un fichier depuis l'interface excel sur internet.

Si Name3 n'est pas un nom de classeur, comment faire pour récupérer dans une variable le nom du classeur que l'on vient d'ouvrir ?

Cordialement

36classeur1.xlsm (27.17 Ko)

Tu peux récupérer un nom de classeur à l'ouverture avec ActiveWorkbook.Name !

[Quand on écrit du code, on ne saute pas des ligne à tout bout de champ (mieux vaut n'en pas sauter du tout !), on indente le code (très important pour la lisibilité), on déclare toutes ses variables en début de procédure (important pour vérifier rapidement), on bannit les opérations Select ou Activate parasites (justifiées uniquement pour action d'affichage, sinon perte de temps). On évite aussi l'utilisation de Windows (objet d'affichage) au profit de Worksbooks (objet qui normalement contient les données sur lesquelles on intervient). Bref, plus on va droit au but, mieux VBA s'en porte !]

Je n'avais juste pas pris le temps d'agencer le code ce qui est fait:

Sub Ouverture_fichier()

' ouverture du Troisième fichier

Dim Name3 As String
Dim wbSource, wbFichierUsager As Workbook
Dim strFileName As String
Dim intChoice As Integer

Set wbFichierUsager = ThisWorkbook
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
intChoice = Application.FileDialog(msoFileDialogOpen).Show

     If intChoice <> 0 Then

           strFileName = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
           Workbooks.Open strFileName
           Name3 = ActiveWorbook.Name
           Set wbSource = ActiveWorkbook

     Else

          MsgBox " La procédure est annulée car aucun fichier n’a été entré. "
          Exit Sub

     End If

 Workbooks(Name3).Activate
 Sheets("Liste TT  DO-NORD").Select
 Sheets("Liste TT  DO-NORD").Copy After:=Workbooks("Classeur1").Sheets(1)

End Sub

le problème persiste, l'erreur objet requis apparaît.

Sur quelle ligne ?

Est-ce que le classeur a été ouvert ?

Sur la ligne Workbooks(Name3).Activate

oui le classeur s'ouvre sans problème

Curieux mais tu as des redondances !

Le classeur s'ouvre, il devient actif : inutile de récupérer son nom d'une part et d'affecter ensuite le même classeur à une autre variable.

NB- Ta variable wbSource n'est pas typée, donc de type Variant (toutes les variables doivent être typées individuellement, tu dois répéter As Workbook pour la typer.

Ensuite, comme rien d'autre ne se passe, le classeur est toujours actif.

Activer un classeur actif ne déclenche pas d'erreur à ma connaissance !?

En tout état de cause cependant, tu n'as nul besoin de l'activer pour copier une feuille !

WbSource.Sheets("Liste TT  DO-NORD").Copy After:=Workbooks("Classeur1").Sheets(1)

suffit à le faire !

J'ai voulu simplifié le problème. Je veux récupérer le nom du dossier que j'ouvre, car le but est d'ouvrir trois dossier et de récupérer des info ou agir dans chacun ( colonnes, feuilles , recherchev , concatener etc .. .)

En tous cas pour rester dans cet exemple en utilisant :

wbSource.Sheets("Liste TT  DO-NORD").Copy After:=Workbooks("Classeur1").Sheets(1)

pour copier la feuille l'erreur "l'indice n’appartient pas à la sélection " apparaît sur cet même feuille.

Teste le nom du classeur wbSource (dans une MsgBox) et vérifie que la feuille existe bien dans le classeur.

NB- Tu as mis 2 espaces entre TT et DO.

Je vais regarder tous ça, en tous cas merci pour vos réponse. Si ça ne marche pas je trouverai une autre solution.

Bonne journée

Rechercher des sujets similaires à "windows variable activate comment marche"