Bonjour à tous.
j'ai fait une macro excel 2007 qui vise à récupérer certaines cellules de plusieurs fichiers Excel et les copier dans le fichier Excel où est exécuté ma macro.
Le problème, c'est que parmi tous les fichiers Excel, pour la même feuille, elles ne portent pas toutes le même nom. Dans le premier fichier la feuille qui m'intéresse peut s'appeler Feuil1 mais dans le second Feuil1_V2 par exemple.
Par rapport au code qui est ci dessus. Ca fonctionne si toutes les feuilles des fichiers portent le même nom. Lorsque qu'une feuille se nomme autrement, une sorte de "prompt" s'affiche et demande de sélectionner la bonne feuille à utiliser. Sauf qu'il ne le demande pas qu'une fois, il demande de sélectionner la feuille autant de fois qu'il y a de fichiers Excel x le nombre de colonne (Infos 1 / Infos 2 / Infos 3 ...). Autant dire que c'est pas pratique du tout. Car si on a 50 fichiers sur 100 qui portent pas le nom Feuil1, et qu'on a 30 colonnes, il va poser la question 50x30 fois pour savoir quelle est le nom de la feuille.
Comment faire en sorte qu'Excel ne pose la question que pour chaque fichier sans se préoccuper du nombre de colonne ?
Soit il faut changer le code tout le contenu de la boucle pour faire en sorte qu'il prenne toutes les cellules nécessaires a chaque fois qu'il traite un fichier. C'est à dire: récup H85, H74, H89 du fichier. (et pas fichier_feuille_H85 / fichier_feuille_H74 / fichier_feuille_H89)
Soit il faut faire en sorte d'enregistrer le réponse donnée au prompt pour chaque fichier ...
Désolé si j'ai été long, mais c'est necessaire de comprendre le fond du problème.
Avez vous une idée pour la solution ?
merci d'avance pour vos remarques.
j'ai fait une macro excel 2007 qui vise à récupérer certaines cellules de plusieurs fichiers Excel et les copier dans le fichier Excel où est exécuté ma macro.
Code:
Sub CopyCell()
Range("E1").Select
Selection.Value = "Info 1"
Range("F1").Select
Selection.Value = "Info 2"
Range("G1").Select
Selection.Value = "Info 3"
Dim X As Integer, nbFichiers As Integer, Y As Integer
Dim Tableau() As String
Dim Direction As String
Application.ScreenUpdating = False
Direction = Dir("C:\fichiers excel\*.xls")
Do While Len(Direction) > 0
nbFichiers = nbFichiers + 1
ReDim Preserve Tableau(1 To nbFichiers)
Tableau(nbFichiers) = Direction
Direction = Dir()
Loop
If nbFichiers > 0 Then
For X = 1 To nbFichiers
If Tableau(X) <> ThisWorkbook.Name Then
Y = Y + 1
With ActiveSheet.Cells(Y, 1)
.Range("E2").Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H85"
.Range("F2").Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H74"
.Range("G2").Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H89"
End With
End If
Next X
End If
Application.ScreenUpdating = True
End Sub
Par rapport au code qui est ci dessus. Ca fonctionne si toutes les feuilles des fichiers portent le même nom. Lorsque qu'une feuille se nomme autrement, une sorte de "prompt" s'affiche et demande de sélectionner la bonne feuille à utiliser. Sauf qu'il ne le demande pas qu'une fois, il demande de sélectionner la feuille autant de fois qu'il y a de fichiers Excel x le nombre de colonne (Infos 1 / Infos 2 / Infos 3 ...). Autant dire que c'est pas pratique du tout. Car si on a 50 fichiers sur 100 qui portent pas le nom Feuil1, et qu'on a 30 colonnes, il va poser la question 50x30 fois pour savoir quelle est le nom de la feuille.
Comment faire en sorte qu'Excel ne pose la question que pour chaque fichier sans se préoccuper du nombre de colonne ?
Soit il faut changer le code tout le contenu de la boucle pour faire en sorte qu'il prenne toutes les cellules nécessaires a chaque fois qu'il traite un fichier. C'est à dire: récup H85, H74, H89 du fichier. (et pas fichier_feuille_H85 / fichier_feuille_H74 / fichier_feuille_H89)
Soit il faut faire en sorte d'enregistrer le réponse donnée au prompt pour chaque fichier ...
Désolé si j'ai été long, mais c'est necessaire de comprendre le fond du problème.
Avez vous une idée pour la solution ?
merci d'avance pour vos remarques.