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