bonjour 🙂
J'ai crée un fichier Excel pour consolider et comparer les données de deux autres classeurs (générés par deux logiciels autres).
Mes deux autres classeurs sont ouverts en même temps que mon classeur.
J'ai crée une macro qui :
- Copie/colle les données de chaque classeur dans les onglets de mon fichier de réconciliation correspondant
- Traite et modifie les données récupérées (avec une fonction de sous-total).
Mon problème est le suivant :
Ma macro fonctionne avec deux classeur xls mais une des deux classeurs est un .csv, et du coup ma macro bug.
Je ne sais pas comment m'y prendre étant débutant en VBA, si je crée le même fichier en xls la macro fonctionne, mais avec le fichier original en .csv ma macro ne fonctionne pas.
Voici mon code :
Merci d'avanceà tous ceux qui me liront 🙂
J'ai crée un fichier Excel pour consolider et comparer les données de deux autres classeurs (générés par deux logiciels autres).
Mes deux autres classeurs sont ouverts en même temps que mon classeur.
J'ai crée une macro qui :
- Copie/colle les données de chaque classeur dans les onglets de mon fichier de réconciliation correspondant
- Traite et modifie les données récupérées (avec une fonction de sous-total).
Mon problème est le suivant :
Ma macro fonctionne avec deux classeur xls mais une des deux classeurs est un .csv, et du coup ma macro bug.
Je ne sais pas comment m'y prendre étant débutant en VBA, si je crée le même fichier en xls la macro fonctionne, mais avec le fichier original en .csv ma macro ne fonctionne pas.
Voici mon code :
Code:
Sub Copiedesdonnees()
Application.ScreenUpdating = False
'Dénomination des classeurs
Dim Wbk As Workbook
Dim ClasseurSource As Workbook
Dim ClasseurDest As Workbook
Dim Classeur2 As Workbook
Dim Wsname As String
Set ClasseurSource = ThisWorkbook
For Each Wbk In Application.Workbooks
If Left(Wbk.Name, 8) = "ISS_File" Then
Set ClasseurDest = Wbk
Exit For
End If
Next Wbk
For Each Wbk In Application.Workbooks
If Left(Wbk.Name, 8) = "LIST111_" Then
Set Classeur2 = Wbk
Exit For
End If
Next Wbk
'Copie des données ISS dans feuille temporaire
ClasseurSource.Activate
Sheets.Add.Name = "ISStemp"
ClasseurSource.Sheets("ISStemp").Range("A1:I10000") = _
ClasseurDest.Sheets("Comparison details").Range("A1:I10000").Value
'Définition des sous-totaux
Sheets("ISStemp").Range("A1").Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(4), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
ActiveSheet.Outline.ShowLevels RowLevels:=2 'on masque les autres lignes
'Copie des lignes de sous total
Sheets("ISStemp").Range("A1:AZ1000").SpecialCells(xlVisible).Copy _
Destination:=Sheets("ISS").Range("A1:AZ1000")
'supression des colonnes inutiles et attribution du nom "quantité"
Columns("B:B").Select
selection.Delete Shift:=xlToLeft
selection.Delete Shift:=xlToLeft
Columns("C:C").Select
selection.Delete Shift:=xlToLeft
selection.Delete Shift:=xlToLeft
selection.Delete Shift:=xlToLeft
Range("B1").Value = "Quantité"
Sheets("ISS").Activate
Rows("1").Select
selection.Delete Shift:=xlUp
'supression des colonnes inutiles et attribution des noms
Columns("B:B").Select
selection.Delete Shift:=xlToLeft
selection.Delete Shift:=xlToLeft
Columns("C:C").Select
selection.Delete Shift:=xlToLeft
selection.Delete Shift:=xlToLeft
selection.Delete Shift:=xlToLeft
Range("A1").Value = "Référence"
Range("B1").Value = "Quantité"
'supression de la ligne "total général"
Dim I As Integer
For I = [A65000].End(xlUp).Row To 1 Step -1
If Not Cells(I, 1).Find("Total général") Is Nothing Then Rows(I).Delete
Next I
'efface les 6 premiers caracteres ("Total ") dans chaque cellule
Dim Nc, Cel As Range
For Each Cel In Range("A2", [A65000].End(xlUp))
Nc = Len(Cel) 'compte les caractères
Cel.Value = Right(Cel, Nc - 6)
Next Cel
'Supression de la feuille ISS et activation de la feuille principale
Application.DisplayAlerts = False
Sheets("ISStemp").Delete
Application.DisplayAlerts = True
'Copie des données NesSoft dans l'onglet NesSoft
ClasseurSource.Activate
ClasseurSource.Sheets("Tentative").Range("A1:I10000") = _
Classeur2.Sheets(1).Range("A1:I10000").Value
ClasseurDest.Activate
'ClasseurSource.Activate
'Sheets("Pif").Activate
Application.ScreenUpdating = True
End Sub
Merci d'avanceà tous ceux qui me liront 🙂