MartiFab
XLDnaute Nouveau
Bonjour a tous !
Cela fait déjà un petit moment que j’apprécie la qualité de ce forum et la précieuse quantité d’informations qui s’y trouve. Jusqu'à aujourd’hui j’avais réussi a résoudre mes problèmes en consultant les discussions disponibles. Voici donc ma première question :
Tout d’abord exposons le problème.
Dans le cadre de mon travail je reçois un « Classeur Source » ne contenant qu’une feuille de calcul. Je place ce fichier Excel dans un Dossier qui se situe sur mon bureau. Mon objectif est de pouvoir sélectionner une plage de cellules dans « Classeur Source » et la coller dans un « Classeur Cible » (placé dans le même dossier).
Mes difficultés pro viennent du fait que je voudrais lancer la macro effectuant cette opération depuis un troisième fichier Excel « Tableau de contrôle » lui-même situe dans le Dossier. Pour mieux comprendre :
Contenu du dossier avant exécution de la macro : Classeur Source.xlsx, Tableau de contrôle.xlsx
Ouverture de « Tableau de contrôle », exécution de la macro, nouveau contenu du dossier : Classeur Source.xlsx, Tableau de Contrôle.xlsx, Classeur Cible.xlsx (avec les données importées depuis « Classeur Source »)
Mon Code
Comme je le souligne dans le code, mon instruction pour copier les cellules du Classeur Source et les coller vers mon Classeur Cible fait bugger la macro. Je crois comprendre que mon problème vient de la déclaration de mes objets. Il y a probablement besoin de pouvoir ouvrir le Classeur Source et le Classeur Cible simultanément. J’ai trouvé sur internet beaucoup de solutions, notamment l’utilisation de ThisWorkBook, cependant dans mon cas cela n’est pas possible étant donné que la macro est lancée depuis un fichier indépendant des deux qui nous intéressent. Du moins c’est ce que j’ai compris.
Ma question est donc la suivante :
Tout d’abord est-il possible de faire ce que je souhaite, a savoir lancer la macro depuis un classeur et faire agir la macro sur deux autres classeurs ? Dans mon code qu’est ce qui semble loucher ?
Je joins un exemple de awFile.xlsx a ce message.
Je vous remercie si vous passez par là et avez une réponse à m’apporter. J’espère que cette discussion servira à d’autres dans le même cas.
Merci a tous ! A bientôt
Cela fait déjà un petit moment que j’apprécie la qualité de ce forum et la précieuse quantité d’informations qui s’y trouve. Jusqu'à aujourd’hui j’avais réussi a résoudre mes problèmes en consultant les discussions disponibles. Voici donc ma première question :
Tout d’abord exposons le problème.
Dans le cadre de mon travail je reçois un « Classeur Source » ne contenant qu’une feuille de calcul. Je place ce fichier Excel dans un Dossier qui se situe sur mon bureau. Mon objectif est de pouvoir sélectionner une plage de cellules dans « Classeur Source » et la coller dans un « Classeur Cible » (placé dans le même dossier).
Mes difficultés pro viennent du fait que je voudrais lancer la macro effectuant cette opération depuis un troisième fichier Excel « Tableau de contrôle » lui-même situe dans le Dossier. Pour mieux comprendre :
Contenu du dossier avant exécution de la macro : Classeur Source.xlsx, Tableau de contrôle.xlsx
Ouverture de « Tableau de contrôle », exécution de la macro, nouveau contenu du dossier : Classeur Source.xlsx, Tableau de Contrôle.xlsx, Classeur Cible.xlsx (avec les données importées depuis « Classeur Source »)
Mon Code
Code:
Sub preparation()
'Declaration des objets
Dim awBook As Workbook
Dim tempBook As Workbook
Dim currentCell As Range
'Declaration des variables numeriques
Dim lRow, lCol, count, curRow, curCol As Integer
'Declaration des variables chaines de caracteres
Dim awBookPath, tempBookPath As String
'indication du nom complet des fichiers utilises. « Classeur Source » est awFile.xlsx
'"Classeur Cible" est tempFile
awBookPath = "C:\Users\industrialstemp\Desktop\SaReDEX\awFile.xlsx"
tempBookPath = "C:\Users\industrialstemp\Desktop\SaReDEX\tempFile.xlsx"
'Creation du nouveau fichier excel
Set tempBook = Workbooks.Add
tempBook.SaveAs (tempBookPath)
Set awBook = Workbooks.Open(awBookPath)
‘On donne un nom aux colonnes du tableau original
awBook.Worksheets(1).Cells(1, 1) = "Sample Code"
awBook.Worksheets(1).Cells(1, 2) = "Site Code"
awBook.Worksheets(1).Cells(1, 3) = "Sample Date"
awBook.Worksheets(1).Cells(1, 4) = "Sample Analysis"
awBook.Worksheets(1).Cells(1, 5) = "Sample Delivery"
awBook.Worksheets(1).Cells(1, 6) = "OB"
awBook.Worksheets(1).Cells(1, 7) = "Sample Point"
'Copier/Coller des headers de colonnes du tableau original pour les decaler vers le
'haut
awBook.Worksheets(1).Range(Cells(2, 8), Cells(2, 8).End(xlToRight)).Copy Destination:=awBook.Worksheets(1).Cells(1, 8)
awBook.Worksheets(1).Rows(2).Delete
'Donne les dimensions du tableau original modifie (nombre de lignes et colonnes)
lRow = awBook.Worksheets(1).Cells(Rows.count, 1).End(xlUp).Offset(1, 0).Row - 1
lCol = awBook.Worksheets(1).Cells(1, Columns.count).End(xlToLeft).Offset(1, 0).Column
count = 2
For Each currentCell In awBook.Worksheets(1).Range(Cells(2, 8), Cells(lRow, lCol))
If Not IsEmpty(currentCell) Then
curRow = currentCell.Row
curCol = currentCell.Column
'Copie une plage dans le tableau de la feuille 1 du Classeur Source et la
'colle dans le Classeur Cible
'PROBLEME SURVIENT A LA LIGNE SUIVANTE *!*!*!*!*!*!*!*!*!*!*!*!
awBook.Worksheets(1).Range(Cells(curRow, 1), Cells(currRow, 7)).Copy Destination:=tempBook.Worksheets(1).Cells(count, 1)
'import in the temporary file the determinant and its value and add it following previous copied data
tempBook.Worksheets(1).Cells(count, 8) = awBook.Worksheets(1).Cells(1, curCol)
tempBook.Worksheets(1).Cells(count, 9) = currentCell
'incrementation of the row counter in table in temporary file
count = count + 1
End If
Next currentCell
'We give a name to the headers of the temporary file
tempBook.Worksheets(1).Cells(1, 1) = "Sample Code"
tempBook.Worksheets(1).Cells(1, 2) = "Site Code"
tempBook.Worksheets(1).Cells(1, 3) = "Sample Date"
tempBook.Worksheets(1).Cells(1, 4) = "Sample Analysis"
tempBook.Worksheets(1).Cells(1, 5) = "Sample Delivery"
tempBook.Worksheets(1).Cells(1, 6) = "OB"
tempBook.Worksheets(1).Cells(1, 7) = "Sampling Point"
tempBook.Worksheets(1).Cells(1, 8) = "Determinant"
tempBook.Worksheets(1).Cells(1, 9) = "Result"
End Sub
Comme je le souligne dans le code, mon instruction pour copier les cellules du Classeur Source et les coller vers mon Classeur Cible fait bugger la macro. Je crois comprendre que mon problème vient de la déclaration de mes objets. Il y a probablement besoin de pouvoir ouvrir le Classeur Source et le Classeur Cible simultanément. J’ai trouvé sur internet beaucoup de solutions, notamment l’utilisation de ThisWorkBook, cependant dans mon cas cela n’est pas possible étant donné que la macro est lancée depuis un fichier indépendant des deux qui nous intéressent. Du moins c’est ce que j’ai compris.
Ma question est donc la suivante :
Tout d’abord est-il possible de faire ce que je souhaite, a savoir lancer la macro depuis un classeur et faire agir la macro sur deux autres classeurs ? Dans mon code qu’est ce qui semble loucher ?
Je joins un exemple de awFile.xlsx a ce message.
Je vous remercie si vous passez par là et avez une réponse à m’apporter. J’espère que cette discussion servira à d’autres dans le même cas.
Merci a tous ! A bientôt