Pb de date après import Excel

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Pb de date après import Excel

Messagepar Thelonious » 07 Sep 2012 à 18:16

Bonjour à tous,

J'ai un petit souci lors d'un import d'un fichier Excel dans une base Notes.
Mon fichier Excel contient des colonnes contenant des dates ( ces colonnes sont bien en format date au départ ).
Mais lorsque j'importe mon fichier et que je visualise les enregistrements dans une vue Notes ( en catégorisant les dates ), j'ai le message suivant :
ERROR : Incorrect data type for operator or @Function: Time/Date expected

En gros, les dates sont importées mais en format texte.
Dès que je fais un refresh des données de ma vue ( grâce à un @Command([ToolsRefreshSelectedDocs]), tout redevient dans l'ordre : tous les champs date redeviennent Data Type: Time/Date ...
Comment faire en sorte que le fichier Excel puisse être importé sans passer par cette étape de refresh ?

Merci d'avance pour vos lumières !
Avatar de l’utilisateur
Thelonious
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 106
Inscrit(e) le : 16 Déc 2004 à 11:58
Localisation : Région Parisienne

Re: Pb de date après import Excel

Messagepar roubech » 07 Sep 2012 à 19:00

Comment fais tu ton import ? Tu as bout de code à nous montrer ?
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Pb de date après import Excel

Messagepar Thelonious » 12 Sep 2012 à 09:36

Bonjour,
Désolé pour le délai de ma réponse ...
Le code utilisé est le suivant ( c'est un code que j'avais trouvé dans ce forum et que j'ai utilisé de nombreuses fois auparavant ... )

Il implique d'avoir un fichier Excel en entrée dont toutes les colonnes doivent avoir en entête le nom du champ technique Lotus
pour laquelle se rapporte les données à importer.

Code : Tout sélectionner
Option Public
Option Explicit


Dim Session As NotesSession
Dim Db As NotesDatabase
Sub Initialize
   On Error Goto err_ImportExcel
   
   ' Variable de sélection de fichier
   Dim tmpFic As Variant
   Dim sFic As String
   
   ' Variable de traitement de fichier Excel
   Dim xlsApp As Variant            ' Application Excel
   Dim xlsWorkBook As Variant   ' Classeur
   Dim xlsSheet As Variant         ' Feuille de calcul
   Dim xlsLigne As Integer         ' Ligne
   Dim xlsColonne As Integer      ' Colonne
   
   ' Demande de sélection du fichier Excel à traiter
   tmpFic = OuvreXLS()
   sFic = tmpFic(0)
   
   ' Tableau de données
   Dim sLig() As String      ' Met dans un tableau les données de la ligne
   Dim sCol() As String      ' Met dans un tableau les entêtes de colonne
   
   ' Compteur de boucle
   Dim iCompteur As Integer
   Dim iCompteurLigne As Integer
   Dim iCompteurColonne As Integer
   
   
   
   ' Traitement sur le fichier Excel
   Print "Connexion à Excel..."
   Set xlsApp = CreateObject("Excel.Application")              ' Création de l'instance
   Print "Ouverture du fichier : " & sFic
   xlsApp.Workbooks.Open sFic                   ' Ouverture du fichier
   Set xlsWorkBook = xlsApp.ActiveWorkbook                  ' Récupère le classeur actuel
   Set xlsSheet = xlsWorkBook.ActiveSheet                    ' Récupère la feuille active
   xlsApp.Visible = False                                  ' Affiche Excel
   xlsSheet.Cells.SpecialCells(11).Activate
   xlsLigne = xlsApp.ActiveWindow.ActiveCell.Row            ' Nombre de lignes à traiter
   Print "Nombre de lignes à traiter = "xlsLigne
   xlsColonne = xlsApp.ActiveWindow.ActiveCell.Column         ' Nombre de colonnes à traiter
   Print "Nombre de colonnes à traiter = "xlsColonne
   
   ' Récupère les entêtes de colonne
   xlsSheet.Cells(1, 1).Select
   For iCompteurColonne = 1 To xlsColonne
      If iCompteurColonne = 1 Then
         Redim sCol(iCompteurColonne) As String
         sCol(iCompteurColonne) = xlsSheet.Cells(1, iCompteurColonne).Value
      Else
         Redim Preserve sCol(iCompteurColonne) As String
         sCol(iCompteurColonne) = xlsSheet.Cells(1, iCompteurColonne).Value
      End If
   Next
   
   ' Récupère les valeurs des cellules d'une ligne
   For iCompteurLigne = 2 To xlsLigne
      xlsSheet.Cells(iCompteurLigne, 1).select
      For iCompteurColonne = 1 To xlsColonne
         If iCompteurColonne = 1 Then
            Redim sLig(iCompteurColonne) As String
            sLig(iCompteurColonne) = xlsSheet.Cells(iCompteurLigne, iCompteurColonne).Value
            'Print "Valeur : " xlsSheet.Cells(iCompteurLigne, iCompteurColonne).Value
         Else
            Redim Preserve sLig(iCompteurColonne) As String
            sLig(iCompteurColonne) = xlsSheet.Cells(iCompteurLigne, iCompteurColonne).Value
            'Print "Valeur : " xlsSheet.Cells(iCompteurLigne, iCompteurColonne).Value
         'Else
         End If
      Next
      ' Vérifie que le tableau n'est pas vide.
      vVF = False
      For iCompteur = 1 To Ubound(sLig)
         If sLig(iCompteur) <> "" Then
            vVF = True
            Exit For
         Else
            vVF = False
         End If
      Next
      Print "Traitement de la ligne " & iCompteurLigne & " sur " & xlsLigne
      If vVF = True Then
         Call CreationDocument(sLig, xlsColonne, sCol())
      End If
   Next
   
   Print "Déconnexion d'Excel..."
   xlsWorkBook.Close False         ' Ferme le classeur
   xlsApp.Quit            ' Quitte Excel
   Set xlsApp = Nothing         ' Ferme l'instance
   Print "Fin de l'importation du fichier Excel"
   Exit Sub
   
err_ImportExcel:
   Resume Next
End Sub
Sub Terminate
   Print " Refresh de la vue après import"
   Dim workspace As New NotesUIWorkspace
   Call workspace.ViewRefresh
   Print " Fin du refresh après import"
   Print "< Fin procédure Import fichier >"
   Print "-------------------------------------------------"
End Sub
Sub CreationDocument(aLigneATraiter() As String, NbColonne As Integer, sCol() As String)
   Dim Session As NotesSession
   Dim Db As NotesDatabase
   Dim doc As NotesDocument
   
   Dim iCompteur As Integer
   
   On Error Goto err_CreationDocument
   
   Set Session = New NotesSession
   Set Db = Session.CurrentDatabase
   Set doc = Db.CreateDocument
   ' Nom du masque à utiliser A MODIFIER SELON LE MASQUE
   doc.Form = "sfTestCase"
   For iCompteur = 1 To NbColonne
      ' Insère les valeurs dans les champs MonChampsX
      Call doc.ReplaceItemValue(sCol(iCompteur), aLigneATraiter(iCompteur))
      'Print " valeur avant sauvegarde : " aLigneATraiter(iCompteur)
   Next
   ' Sauvegarde le masque
   Dim Success As String
   Success=doc.ComputeWithForm( True, False )
   If Success Then
   doc.Save True, True   
   'Print " Sauvegarde ... "
   End If
   
   Exit Sub
   
err_CreationDocument:
   Exit Sub
End Sub

Function OuvreXLS() As Variant
   Dim ws As New NotesUIWorkspace
 ' Affiche la fenêtre de sélection
 ' Le False correspond à une sélection simple
   OuvreXLS = ws.OpenFileDialog(False, "Ouverture d'un fichier Excel", "Fichiers Excel | *.xls", "C:\")
End Function


Merci !
Avatar de l’utilisateur
Thelonious
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 106
Inscrit(e) le : 16 Déc 2004 à 11:58
Localisation : Région Parisienne

Re: Pb de date après import Excel

Messagepar Michael DELIQUE » 12 Sep 2012 à 10:35

salut

la réponse simple, tu insert un texte, en back-ed la conversion en date/time n'est pas automatique comme un front-end.

quand tu fais un refresh le contenu du champ est converti.

donc plusieurs possibilités :

- computewithform en fin de traitement (mais ça bouffe un max de ressource et peu considérablement allongé le temps de traitement)
- passé par un object notesdatetime
- convertir avec un cdat
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Re: Pb de date après import Excel

Messagepar Thelonious » 12 Sep 2012 à 10:53

Merci Michael !
Je vais tester de mon coté ...
Avatar de l’utilisateur
Thelonious
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 106
Inscrit(e) le : 16 Déc 2004 à 11:58
Localisation : Région Parisienne


Retour vers Développement

cron