1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| Option Compare Database
Option Explicit
Function TestSuppressAltEnter()
Dim strPathFileMonFicher As String
strPathFileMonFicher = "C:\Temp\Book1.xlsx"
Debug.Print SuppressAltEnter(strPathFileMonFicher)
End Function
Function SuppressAltEnter(strPathFileMonFicher) As String
'Le fichier Excel que je reçois contient des cellules avec Alt-Enter pour montrer plusieurs valeurs sur plusieurs lignes à l'écran.
'Malheureusement, quand j'importe ce fichier Access me crée une ligne par valeur au lieu de me mettre tout dans une seule ligne de ma table.
'Cette fonction supprime le Alt-Enter de la colonne Excel et replace par un espace.
'late binding (sans reference dans le menu Tools/references/..)
'Plus difficle à programmer pcq quand je tape objWB. il ne me donne pas de petit menu intellisense : il faut connaître la syntaxe.
'par contre, si on installe sur un autre PC qui utilise la reference 'Office Excel 12' ou 16 cela fonctionne toujours.
Dim objXL As Object
Dim objWB As Object
Dim objSht As Object
Dim WK As Object
Dim i As Integer
Dim LastRow As Long
Dim R As Long
Dim strValue As String
Dim sheetExist As Boolean
Dim strSQL As String
Dim strErr As String
Dim strStep As String
On Error GoTo errParagraph
SuppressAltEnter = "Open Excel"
strStep = "Open Excel"
Set objXL = CreateObject("Excel.Application")
'open Excel file :
Set objWB = objXL.workbooks.Open(strPathFileMonFicher)
'Verify the sheet VALUES does exist
strStep = "Verify the sheet VALUES does exist"
sheetExist = False
For i = 1 To objWB.sheets.Count
strStep = "looking for the name of the sheet " & i
If objWB.sheets(i).Name = "VALUES" Then
sheetExist = True
End If
Next i
If Not sheetExist Then
'The sheet VALUES is not present in the Excel spreadsheet
SuppressAltEnter = "The sheet VALUES is not present in the Excel File"
strStep = "The sheet VALUES is not present in the Excel File"
objWB.Close False 'Do not save
Set objWB = Nothing
Set objWB = Nothing
Set objXL = Nothing
Exit Function
End If
'La feuille qui nous intéresse et que l'on doit modifier est la feuille VALUES
objWB.sheets("VALUES").Activate
'Trouver la dernière ligne de la feuille
'LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
strStep = "looking for last row"
objWB.sheets("VALUES").UsedRange 'Refresh UsedRange
LastRow = objWB.sheets("VALUES").UsedRange.Rows(objWB.sheets("VALUES").UsedRange.Rows.Count).Row
strStep = "lastRow = " & LastRow
'Lire la feuille de la dernière ligne à la seconde en remontant. La première ligne contient des titres.
For R = LastRow To 2 Step -1
Debug.Print "R = ", R
'find column M. Je suis sûr et certain que ma valeur à changer est en colonne M parce que les fonctions précédentes de mon process on vérifier le format du fichier et les noms des colonnes.
strValue = objWB.sheets("VALUES").Cells(R, "M")
strStep = "processing Excel row " & R & "for Value " & strValue
'Replace the Alt-Enter by a space.
strValue = Replace(strValue, Chr(10), " ")
objWB.sheets("VALUES").Cells(R, "M") = strValue
Next R
strStep = "fermeture de Excel"
objWB.Close True
DoEvents
objXL.Quit
Set objSht = Nothing
Set objWB = Nothing
Set objXL = Nothing
SuppressAltEnter = "OK"
Exit Function
errParagraph:
'Les messages d'erreur de Microsoft contiennent parfois une apostrophe or l'apostrophe est un charactère réservé de la syntaxe SQL. Je la remplace par un espace.
strErr = Replace(Err.Description, "'", " ")
strSQL = "INSERT INTO [tblLog] (Func, Msg1, Msg2, DateStamp) " & _
"VALUES ('SuppressAltEnter', '" & strErr & "', '" & strStep & "', Now())"
'J'enrégistre le message d'erreur dans une table de Log. Quand l'utilisateur me téléphonera furieux à cause d'une erreur, je pourrai voir les détails.
CurrentDb.Execute strSQL
MsgBox "Error in Suppress AltEnter. I quit.", vbCritical
Application.Quit
End Function |
Partager