Problème de récupération de données(cellules) dans une boucle

zaknaster

XLDnaute Nouveau
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.

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
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.
 

zaknaster

XLDnaute Nouveau
Re : Problème de récupération de données(cellules) dans une boucle

Si je peux me permettre, existe t-il un moyen de récupérer le nom de la feuille que l'on selectionne lorsque celle ci n'existe pas ?
dans les codes ci-dessus (page precedente), lorsqu'une feuille n'existe pas, un prompt apparait et demande le vrai nom de la feuille (car il ne trouve pas Feuil1).

Cependant, si je selectionne la bonne feuille, il n'y a pas de problème, mais lorsque je fais annuler pour ne choisir aucune feuille et finalement arreter le programme, l'outil bug car il essai toujours de récupérer les cellules dans Feuil1.

Est-ce qu'il y a un moyen pour faire en sorte que l'outil se termine (ou ne traite pas la suite) si on fait Annuler lors du choix de la feuille ?

En cas de besoin, je peux uploader a titre d'exemple un cas de figure similaire ...

Merci d'avance
 
G

Guest

Guest
Re : Problème de récupération de données(cellules) dans une boucle

bonjour ZakNaster, le forum,

Je ne vois qu'une solution pour arrêter le programme. Relever l'erreur qui se produit lorsque tu annules la sélection de la feuille et sortir de la boucle.

Pour cela ajoute les lignes en rouge ci-dessous:

Code:
                With ActiveSheet.Cells(Y, 1)
                    .Range("A7").Formula = Tableau(X)
                    
                    [SIZE=3][COLOR=red]On Error Resume Next
[/COLOR][/SIZE]                    .Range("B7").Formula = "='" & Dossier & "[" & Tableau(X) & "]Feuil1" & "'!" & "C6"
                    [SIZE=3][COLOR=red]If Err.Number > 0 Then Exit For[/COLOR][/SIZE]
                        
                     Formule = .Range("B7").Formula
                     
                    .Range("C7").Formula = Replace(Formule, "C6", "C8")
                    
                    .Range("D7").Formula = Replace(Formule, "C6", "D10") & "+" & Replace(Replace(Formule, "C6", "E11"), "=", "")
                                    
                End With

A bientôt
 

Discussions similaires

Statistiques des forums

Discussions
312 320
Messages
2 087 227
Membres
103 497
dernier inscrit
JP9231