VBA - Passer d'un classeur à l'autre avec windows.activate

Bonjour,

Je suis novice avec le VBA d'excel et j'ai un souci depuis quelques heures qui m'empêche de terminer mon travail. Je souhaite "naviguer" d'un classeur à un autre pour y faire différentes opérations. Je récupère auparavant le nom du fichier dans une variable. En passant par la commande : Windows(variable).Activate, cela fonctionne la première fois mais un peu plus loin dans le code, la même instruction ne fonctionne plus et excel refuse d'activer le classeur. Par contre, je n'ai aucun message d'erreur et j'ai l'impression que c'est ma variable qui n'est plus reconnue...

Merci pour votre aide...

Salut,

essaies comme ceci:

    Windows("nom_fichier.xls").Activate

J'attends ta réponse,

Souri84

Salut souri84,

J'ai déjà essayé avec le nom du fichier.xls et cela fonctionne. Mon souci est que je ne connais pas d'avance le nom du fichier à ouvrir et c'est pour cela qu'il est en variable. Le nom est fonction d'une date que l'utilisateur tape dans un Inputbox... Voici une partie du code VBA :

Sub essai1()

Dim DateJour As String

Dim calcul_jour As String

Dim fic

DateJour = InputBox("Saisir la DATE à traiter au format jjmmaa (Ex: 251007)", "DATE")

With Application.FileSearch

.NewSearch

.LookIn = "S:\RESSOURCES\DSB BDD\2_DIRECT ASSISTANCE\0_REPORTING\Tests"

.Filename = "suiviDA_???" & DateJour & ".xls"

.Execute

On Error Resume Next

For Each fic In .FoundFiles

MsgBox (fic)

Workbooks.Open Filename:=fic

Windows(fic).Activate

Sheets("Récap").Select

Range("A5").Select

Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select

Application.CutCopyMode = False

Selection.Copy

Windows("Conso_suivi_s19_test.xls").Activate

Sheets("Conso").Select

Range("A30").Select

ActiveCell.FormulaR1C1 = DateJour

calcul_jour = Sheets("Conso").Range("A32")

Sheets(calcul_jour).Select

Range("A2").Select

w = ActiveCell.SpecialCells(xlLastCell).End(xlToLeft).Row + 1

Cells(w, 1).Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Windows(fic).Activate

Range("B2:P4").Select

Selection.Copy

C'est le 2ème "Windows().Activate" (en rouge) qui ne marche pas...

Merci de ton aide,

Bonjour,

il n'est habituellement pas nécessaire de "naviguer" d'un classeur à l'autre, d'une feuille à l'autre ou d'une cellule à l'autre.

Les Select sont rarement indispensables

sans voir le reste du code, tu peux essayer avec cette idée :

Sub essai1()
Dim DateJour As String
Dim calcul_jour As String
Dim fic
DateJour = InputBox("Saisir la DATE à traiter au format jjmmaa (Ex: 251007)", "DATE")
With Application.FileSearch
.NewSearch
.LookIn = "S:\RESSOURCES\DSB BDD\2_DIRECT ASSISTANCE\0_REPORTING\Tests"
.Filename = "suiviDA_???" & DateJour & ".xls"
.Execute
On Error Resume Next
For Each fic In .FoundFiles
With Workbooks("Conso_suivi_s19_test.xls")
    Workbooks.Open Filename:=fic
    With .Sheets("Conso")
        .Range("A30") = DateJour
        calcul_jour = .Range("A32")
    End With
    With .Sheets(calcul_jour)
        w = .[A65000].End(xlUp).Row + 1
        Sheets("Récap").[A5].CurrentRegion.Copy
        .Cells(w, 1).PasteSpecial Paste:=xlPasteValues
    End With
End With
'Windows(fic).Activate
'Range("B2:P4").Select
'Selection.Copy
ActiveWorkbook.Close False
Next fic
End With
End Sub

Bonjour Félix,

Merci pour ta réponse que je ne pourrai tester que demain matin au boulot... Je te tiens au courant.

Merci encore,

Bonjour,

Désolé Félix, j'ai tenté d'appliquer ta solution et cela ne fonctionne pas mieux. J'ai bien essayé de "triturer" les "With - End With" dans tous les sens et ça ne marche toujours pas...

Je ne pensais pas que mon problème était si compliqué. En fait, tous les jours, je récupère plusieurs dizaines de fichiers quotidiens de collaborateurs que je dois totaliser dans une feuille hebdomadaire...

Je ne vois pas d'autres moyens que d'ouvrir le fichier quotidien, récupérer les données par copy et de passer dans le fichier hebdomadaire pour les coller. La difficulté, c'est que le nom du fichier quotidien n'est évidemment jamais le même et c'est pourquoi je fais saisir la date dans une variable pour, ensuite, la concaténer avec le nom du fichier quotodien qui contient les initiales des collaborateurs.

Je débute réellement sur VBA et je n'ai pas encore saisi toutes les subtilités... Merci pour votre aide.

Bonjour,

Dans ton code, lors de mes essais, j'avais supprimé les points d'interrogation, dans le :

.Filename = "suiviDA_???" & DateJour & ".xls" 

Si tu pouvais joindre ton fichier de récapitulation, exempt de toutes données confidentielles, mais avec exactement la même structure, ainsi qu'un fichier de collaborateur, avec la structure propre, je pense que cela sera plus facile pour t'aider....

Bonjour Félix,

Les point d'interrogation sont là car les fichiers quotidiens que je récupère porte un nom identique sauf 3 lettres (en fait, le trigramme de mes collègues...)

Exemple : suiviDA_BGI250408.xls ou suiviDA_DME250408.xls ou encore suiviDA_FMI250408.xls.

J'en ai quelques dizaines par jour à récupérer et à totaliser dans un fichier hebdo : conso_suivi_s19.xls (s19 pour semaine 19...). Je mets à la suite des lignes contenant des "O" (Organisationnel) ou des "T" (Technique). Bref, je joins 3 ou quatre fichiers pour que tu puisses comprendre.

https://www.excel-pratique.com/~files/doc/Conso_suivi_s19_test.xls

https://www.excel-pratique.com/~files/doc/suiviDA_BMA060508.xls

https://www.excel-pratique.com/~files/doc/suiviDA_FMI060508.xls

Merci d'avance,

Bonjour

Dans ton code ta variable "fic" contient le nom complet du fichier, c'est à dire chemin + nom, soit :

S:\RESSOURCES\DSB BDD\2_DIRECT ASSISTANCE\0_REPORTING\Tests\suiviDa......xls

pour pouvoir voyager entre les classeurs Excel, il faut que tu ne laisses dans ta variable que le nom du fichier: :

suiviDA....xls

tu peux le faire de la façon suivante, après l'instruction d'ouverture du fichier :

Workbooks.Open Filename:=fic

fic = Right(fic, Len(fic) - Len(ActiveWorkbook.Path) - 1)

MsgBox fic

A partir de là, cela devrait fonctionner correctement

Cordialement

Bonjour,

Demeb, j'essaye ta solution dès demain matin et je te tiens, bien évidemment, au courant. Merci, en tous les cas, d'avoir pris un moment pour m'aider.

30classement.xlsx (10.59 Ko)

Bonjour,

toujours dans l'idée de ne pas naviguer entre les classeurs

Regarde le code, je l'ai un peu commenté, notamment pour trouver le numéro de la ligne concernée par le collage, dans la feuille "Consos"

Je l'ai testé, chez moi, avec tes deux fichiers des collaborateurs, et cela fonctionne

Sub essai2()
Dim DateJour As String
Dim calcul_jour As String
Dim fic
Application.ScreenUpdating = False  'éviter le raffraichissement de l'écran
DateJour = InputBox("Saisir la DATE à traiter au format jjmmaa (Ex: 251007)", "DATE")
z = Weekday(CDate(Left(DateJour, 2) & "/" & Mid(DateJour, 3, 2) & "/" & Right(DateJour, 2)), 2) - 1
        'on traduit la DateJour en Date, et on calcule le numéro du jour, moins 1
        'pour le calcul ultérieur de la ligne concernée par le collage spécial
        'dans la feuille Conso
With Application.FileSearch
    .NewSearch
    .LookIn = "S:\RESSOURCES\DSB BDD\2_DIRECT ASSISTANCE\0_REPORTING\Tests"
    .Filename = "suiviDA_???" & DateJour & ".xls"
    .Execute
On Error Resume Next
For Each fic In .FoundFiles
With Workbooks("Conso_suivi_s19_test.xls")
    Workbooks.Open Filename:=fic
    With .Sheets("Conso")
        .Range("A30") = DateJour
        calcul_jour = .Range("A32")
        Sheets("Récap").Range("B2:P4").Copy
        .Cells(3 + (z * 4), 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd
            'c'est ici qu'on calcule le numéro de ligne. Comme c'est toutes les 4 lignes
            'on rajoute z*4 à 3. Si c'est un lundi, z=0
    End With
    With .Sheets(calcul_jour)
        w = .[A65000].End(xlUp).Row + 1
        x = Sheets("Récap").[A65000].End(xlUp).Row
        Sheets("Récap").Range(Cells(5, 1), Cells(x, 16)).Copy
        .Cells(w, 1).PasteSpecial Paste:=xlPasteValues
    End With
End With
Application.DisplayAlerts = False
ActiveWorkbook.Close False
Next fic
End With
End Sub

Bonjour Félix,

C'est super !!! Ca fonctionne très bien... J'avoue sincèrement que je n'ai pas tout compris mais l'essentiel est que je peux continuer à travailler... Merci pour ton aide précieuse et merci aussi à Demeb qui s'est penché sur mon problème.

Je vais recommander ce forum aux collègues qui ont des difficultés avec excel... Merci pour vos compétences et votre sérieux et c'est très sympa de ne pas vous "moquer" des débutants en VBA...

A bientôt,

Bonjour,

Comment fait-on pour passer cette question en résolue ? Et qui le fait ?

Merci de votre réponse.

bonjour,

C'est toi qui le fait,

en bas, à gauche, dans la petite liste "valider" (il faut être connecté)

Claude.

Merci beaucoup...

Rechercher des sujets similaires à "vba passer classeur windows activate"