daboos | Salut,
Je n'ai toujours pas trouvé ce qui faisait bugger ma macro. Voila les 2 versions, celle avec la syntaxe moche mais qui marche, et l'autre avec la syntaxe la plus directe, mais que j'arrive pas à faire tourner
Sub ExtractionDonnees4() Dim SearchString As String Dim SearchChar As String Dim MyPos As Integer j = 2
NomFichierOrigine = "Opt_Stand_Tertiaire_CEE" Workbooks.Open FileName:="C:\Documents and Settings\ba\Bureau\laboratoire excel\" & NomFichierOrigine & ".xls" Windows(NomFichierOrigine & ".xls" ).Activate
For l = 3 To 29 Sheets(l).Select Rows("7:20" ).Select With Selection Set C = .Find("Cumul", LookIn:=xlValues, MatchCase:=False) Columns(C.Column).Select NumCol = C.Column
For i = 14 To 260 If Cells(i, C.Column) > 0 Then
' copie de la case contenant le numéro du département Cells(i, 3).Select Selection.Copy Windows("essai.xls" ).Activate Sheets(2).Select Cells(j, 1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows(NomFichierOrigine & ".xls" ).Activate Sheets(l).Select
' copie de la case correspondant au nombre d'opération ou unité utilisée (m2, m, logements,...) Cells(i, NumCol).Select Selection.Copy Windows("essai.xls" ).Activate Sheets(2).Select Cells(j, 2).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows(NomFichierOrigine & ".xls" ).Activate Sheets(l).Select
' copie de la case correspondant au nombre de kWh Cells(i + 1, NumCol).Select Selection.Copy Windows("essai.xls" ).Activate Sheets(2).Select Cells(j, 3).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows(NomFichierOrigine & ".xls" ).Activate Sheets(l).Select
' copie du nom de la fiche Cells(4, 4).Select Selection.Copy Windows("essai.xls" ).Activate Sheets(2).Select Cells(j, 4).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows(NomFichierOrigine & ".xls" ).Activate Sheets(l).Select
i = i + 1 j = j + 1
End If Next i End With
Next l
Windows("essai.xls" ).Activate Sheets(2).Select
For K = 2 To j - 1 SearchString = Cells(K, 1).Text SearchChar = "(" MyPos = InStr(1, SearchString, SearchChar, 0)
'si la case est vide on est à la fin des données extraites donc fin de boucle If Cells(K, 1).Text = "" Then K = j - 1
'si la case ne commence pas par une parenthèse alors la ligne ne nous intéresse pas, on la supprime ElseIf MyPos <> 1 Then Rows(K).Select Selection.Delete Shift:=xlUp K = K - 1
'si la 4eme case est vide, les données viennent d'un onglet de synthèse qui ne nous intéresse pas, on supprime la ligne ElseIf Cells(K, 4).Text = "" Then Rows(K).Select Selection.Delete Shift:=xlUp K = K - 1
' si ca commence par une parenthèse, ca nous intéresse, on prends le numéro du département dans la parenthèse Else: Cells(K, 1) = Mid(Cells(K, 1).Text, 3, 3)
End If
Next K
Sheets(2).Select Cells(1, 1).Select Windows(NomFichierOrigine).Visible = False
End Sub
|
et voila celui avec les liens copies directes :
Sub ExtractionDonnees3() Dim SearchString As String Dim SearchChar As String Dim MyPos As Integer j = 2 NomFichierOrigine = "Opt_Stand_Tertiaire_CEE" Windows(NomFichierOrigine & ".xls" ).Activate Dim Wbk1 As Workbook, Wbk2 As Workbook Set Wbk1 = ThisWorkbook Set Wbk2 = Workbooks.Open(FileName:="C:\Documents and Settings\ba\Bureau\laboratoire excel\" & NomFichierOrigine & ".xls" )
For l = 3 To 29 Windows(NomFichierOrigine & ".xls" ).Activate Wbk2.Sheets(l).Select Rows("7:20" ).Select With Selection Set C = .Find("Cumul", LookIn:=xlValues, MatchCase:=False) Columns(C.Column).Select NumCol = C.Column
For i = 14 To 260 If Cells(i, C.Column) > 0 Then ' copie de la case contenant le numéro du département Wbk1.Worksheets(2).Cells(j, 1) = Wbk2.Worksheets(l).Cells(i, 3)
' copie de la case correspondant au nombre d'opération ou unité utilisée (m2, m, logements,...) Wbk1.Worksheets(2).Cells(j, 2) = Wbk2.Worksheets(l).Cells(i, NumCol)
' copie de la case correspondant au nombre de kWh Wbk1.Worksheets(2).Cells(j, 3) = Wbk2.Worksheets(l).Cells(i + 1, NumCol)
' copie du nom de la fiche Wbk1.Worksheets(2).Cells(j, 4) = Wbk2.Worksheets(l).Cells(4, 4)
i = i + 1 j = j + 1
End If Next i End With
Next l
Windows("essai.xls" ).Activate Sheets(2).Select
For K = 2 To j - 1
SearchString = Cells(K, 1).Text SearchChar = "(" MyPos = InStr(1, SearchString, SearchChar, 0)
'si la case est vide on est à la fin des données extraites donc fin de boucle If Cells(K, 1).Text = "" Then K = j - 1
'si la case ne commence pas par une parenthèse alors la ligne ne nous intéresse pas, on la supprime ElseIf MyPos <> 1 Then Rows(K).Select Selection.Delete Shift:=xlUp K = K - 1
'si la 4eme case est vide, les données viennent d'un onglet de synthèse qui ne nous intéresse pas, on supprime la ligne ElseIf Cells(K, 4).Text = "" Then Rows(K).Select Selection.Delete Shift:=xlUp K = K - 1
' si ca commence par une parenthèse, ca nous intéresse, on prends le numéro du département dans la parenthèse Else: Cells(K, 1) = Mid(Cells(K, 1).Text, 3, 3)
End If Next K
Sheets(2).Select Cells(1, 1).Select Windows(NomFichierOrigine).Visible = False
End Sub
|
Please help... je comprends pas du tout pourquoi ca ne marche plus Message édité par daboos le 27-11-2006 à 14:15:13
|