Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

Réponse
 
Outils de la discussion
Vieux 09/10/2008, 16h19   #1 (permalink)
Invité régulier
 
Date d'inscription: octobre 2008
Messages: 11
Par défaut Copier des cellules de plusieurs fichiers et les trier automatiquement

Bonjour tout le monde !

Je suis débutant dans ce domaine, mais j'ai pour projet de faire une macro excel 2007 visant à récupérer certaines cellules de plusieurs fichiers Excel et les copier dans le fichier Excel où est exécuté ma macro.

J'ai récupéré le début d'un code me permettant de bien commencer.
Cependant, je bute sur quelque chose de relativement simple c'est à dire:
Le code récupère les données et les placent sur A1, A2, A3 ... Et du coup je ne parviens pas a les placer automatiquement ou je veux (mettons G5, G6, G7).

Si possible, j'aimerai que les cellules que je récupère des différents fichiers soient placés dans les cellules que je désire et non pas directement sur A1, A2 et A3.

J'ai peur d'être un peu flou, je vous propose donc le code source de la macro. Le module se présente comme ci (il est activé par un bouton placé sur la feuille Excel):

Code :
 
Sub CopierCellule()
    Range("C10").Select
    Selection.Value = "Info 1"
    Range("D10").Select
    Selection.Value = "Info 2"
    Range("E10").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)
                
                   .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H74"
                   .Value = .Value
                   Range("A1:A20").Copy ([C11])
                    
                   .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H85"
                   .Value = .Value
                   Range("A1:A20").Copy ([D11])
                
                   .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H89"
                   .Value = .Value
                   Range("A1:A20").Copy ([E11])
                   
 
                End With
            End If
        Next X
    End If
 
    Application.ScreenUpdating = True
End Sub
 
 
Ici, je prédéfinie certaines cases en leur mettant le nom Info 1, info 2, et Info 3 respectivement C10, D10 et E10. Jusque la OK

- En dessous de C10 (Info 1), il doit y avoir la cellule H74 de tous les fichiers présents dans C:\fichiers excel\. Automatiquement, il va prendre la cellule H74 du fichier 1 dans A1, du fichier 2 dans A2 et du fichier 3 dans A3. Dans le code j'ai fais un Range("A1:A20").Copy ([C11]) pour que ces données soient copiés sur C11, C12 et C13. Je fais le même traitement pour la cellule H85 et H89 mais cela ne fonctionne pas car en effet, les cellules A1, A2 et A3 sont déjà prises (et j'ai aussi un problème si j'essaie d'effacer les cellules A*).

Par conséquent, l'idéal serait que les données récupérés soient directement copiées dans les cellules correspondantes (donc C11, C12, et C13) plutôt qu'A1, A2 et A3...


Est-ce que vous avez une idée pour remédier à mon problème ?
Merci d'avance

Dernière modification par nicethe ; 10/10/2008 à 11h35
nicethe est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 10h51   #2 (permalink)
Invité régulier
 
Date d'inscription: octobre 2008
Messages: 11
Par défaut

Bonjour !

Comme je ne trouve pas de solution à mon problème, j'ai essayé de faire en sorte de copier les cellules A1 (etc.) dans une autre et de la supprimer ensuite.

Le processus est donc:
- Cellule H74 du fichier 1 copié dans A1
- Cellule H74 du fichier 2 copié dans A2
- Cellule H74 du fichier 3 copié dans A3
- Copie de A1,A2 et A3 dans C11, C12 et C13
- Supprimer les cellules A1, A2, A3
- recommencer le processus avec une autre cellule (après H74, H85):
- Cellule H85 du fichier 1 copié dans A1
- Cellule H85 du fichier 2 copié dans A2
- Cellule H85 du fichier 3 copié dans A3
- Copie de A1,A2 et A3 dans D11, D12 et D13
- Supprimer les cellules A1, A2, A3

etc ...

Autant dire que niveau optimisation c'est moyen. Le problème est que après avoir supprimé A1 par exemple, il supprime aussi C11 !
C'est la raison pour laquelle j'aimerai opter pour un trie automatique des cellules de mon fichier lorsque je récupère les cellules demandées des autres fichiers. Plutôt que d'essayer de les copier ...

Et je bloque vraiment à ce stade. Si vous avez quelques idées je suis preneur. Merci
nicethe est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 12h40   #3 (permalink)
Invité régulier
 
Date d'inscription: octobre 2008
Messages: 11
Par défaut

bon j'ai trouvé une solution je la met pour faire profiter tout le monde. C'était vraiment très simple:

Code :
With ActiveSheet.Cells(Y, 1)
                
  .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H74"
  .Range("C11").Value = .Range("A1").Value
                    
  .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H85"
  .Range("D11").Value = .Range("A1").Value
                
  .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H89"
  .Range("E11").Value = .Range("A1").Value
                   
 
End With
Ensuite il faut juste clear de A1 a A infini. C'est pas très propre mais ça fonctionne.

Dernière modification par AlainTech ; 10/10/2008 à 13h03
nicethe est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide