Bonjour, je viens vers vous car je suis une fois de plus dans l'impasse !
Je vais essayer d'être le plus claire car comme vous allez le voir, ma macro commence a être longue ^^
En gros la procédure :
-ouvrir un PDF
-Copier les données
-Revenir sous excel
-Copier les données
-Retirer les espaces
-(revalider les données pour avoir des date avec un nombre valide et pas 01/12/10 valeur renvoyer 0 !)
-Convertir les données (en 10 colonnes)
-Changer de feuille
le problème réside lors du changement de feuille lors-que les données sont copier ! Le logiciel ne switch pas bien de la fenêtre PDF a Excel. (je n'ai pas besoin de conserver le PDF ouvert.)
Précisions : Excel 2007 win XP
Mon code est surement a simplifier le voici :
A votre disposition si vous avez besoin de renseignements !
Gros merci d'avance pour l'investissement de mon problème !
Je vais essayer d'être le plus claire car comme vous allez le voir, ma macro commence a être longue ^^
En gros la procédure :
-ouvrir un PDF
-Copier les données
-Revenir sous excel
-Copier les données
-Retirer les espaces
-(revalider les données pour avoir des date avec un nombre valide et pas 01/12/10 valeur renvoyer 0 !)
-Convertir les données (en 10 colonnes)
-Changer de feuille
le problème réside lors du changement de feuille lors-que les données sont copier ! Le logiciel ne switch pas bien de la fenêtre PDF a Excel. (je n'ai pas besoin de conserver le PDF ouvert.)
Précisions : Excel 2007 win XP
Mon code est surement a simplifier le voici :
Code:
Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub OpenPDF(ByRef vsFilePath As String, Optional ByVal vnPage As Long = 1)
Dim sBuffer As String
Dim nLength As Long
sBuffer = Space$(260)
nLength = FindExecutable(vsFilePath, vbNullString, sBuffer)
If nLength Then
nLength = InStr(sBuffer, vbNullChar)
If nLength Then
sBuffer = Left$(sBuffer, nLength - 1)
ShellExecute 0&, "open", sBuffer, "/A page=" & Trim$(Str$(vnPage)) & " """ & vsFilePath & """", vbNullString, 1
End If
End If
End Sub
Sub convert()
' Ouvre le PDF, copie et inserre les données
OpenPDF "C:\Documents and Settings\Utilisateur\Bureau\SYNel.pdf", 1
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys ("^{a}")
Application.Wait (Now + TimeValue("0:00:01"))
SendKeys ("^{c}")
Application.Wait (Now + TimeValue("0:00:02"))
Windows("Anicompta.xlsm").Activate
Application.Wait (Now + TimeValue("0:00:01"))
' annulation convert
Range("A1").Select
ActiveCell.FormulaR1C1 = "1 2 3"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
Range("A1:C1").ClearContents
Range("A1").Select
Application.Wait (Now + TimeValue("0:00:02"))
ActiveSheet.PasteSpecial Format:="Texte Unicode", Link:=False, _
DisplayAsIcon:=False
Application.Wait (Now + TimeValue("0:00:05"))
MsgBox "Cliquez afin de passer à l'étape 2"
' couper les blanc des noms
Dim mm, Résultat As String, i As Double, K As Double
K = Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To K
If Left(Range("A" & i), 2) = "FR" Then
With CreateObject("vbscript.regexp")
.Global = False: .IgnoreCase = True: .Pattern = " \d{3,4} [-A-Za-z _]* \d\d/\d\d/\d{4} "
Set mm = .Execute(Range("A" & i))
If mm.Count = 0 Then
Range("A" & i) = Left(Range("A" & i), 19) & "_" & Right(Range("A" & i), Len(Range("A" & i)) - 18)
Else
If Len(mm(0)) = 18 Then
Range("A" & i) = Replace(Range("A" & i), " ", " _ ")
Else
Résultat = Mid(mm(0), 7, Len(mm(0)) - 6 - 12)
Range("A" & i) = Replace(Range("A" & i), Résultat, Replace(Résultat, " ", "_"))
End If
End If
End With
End If
Next i
' enregconvertir en colonnes
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Sheets("Données Anicompta").Select
Dim Plage As Range, Cel As Range
Set Plage = Range("E1:K2000")
'tu peux écrire :
'Set Plage = Range("A1:A983") ou tout autre plage que tu veux modifier
For Each Cel In Plage
If IsNumeric(Cel.Value) Then Cel.Value = CDbl(Cel.Value)
Next Cel
' test si des erreures sont présentes
If Range("N1").Value > 0 Then
MsgBox "Une erreure est présente merci de vériffier les données"
Else: Range("N1").Value = 0
MsgBox "Les données sont valides pour Anicompta"
End If
End Sub
A votre disposition si vous avez besoin de renseignements !
Gros merci d'avance pour l'investissement de mon problème !
Dernière édition: