par pascal29 » 07 Juil 2014 à 07:45
Salut,
Pour la recherche de doublons, il faudrait modifier le code dans ce style là : (je ne sais pas sur quoi serai basée une clé unique pour identifier tes doublons)
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
Dim nomlogiciel As String
' Demande de sélection du fichier Excel à traité
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
Dim keyTab() as String ' >> POUR VERIF DOUBLONS
' Compteur de boucle
Dim iCompteur As Integer
Dim iCompteurLigne As Integer
Dim iCompteurColonne As Integer
' Vérification des champs vide
Dim vVF As Variant
' 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 ligne à traiter
Redim keyTab(xlsLigne) as String ' >> init
xlsColonne = xlsApp.ActiveWindow.ActiveCell.Column' Nombre de colonne à traiter
' 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
ForAll val in keyTab
if val=xlsSheet.Cells(iCompteurLigne, 2).Value Then ' >> Imaginons que la clé est basée sur la valeur de la colonne 2
Goto prochaineLigne '>> si on retrouve une clé identique on passe à la ligne suivante ...
End
Next
keyTab(iCompteurLigne) = xlsSheet.Cells(iCompteurLigne, 2).Value
For iCompteurColonne = 1 To xlsColonne
If iCompteurColonne = 1 Then
Redim sLig(iCompteurColonne) As String
sLig(iCompteurColonne) = xlsSheet.Cells(iCompteurLigne, iCompteurColonne).Value
Else
Redim Preserve sLig(iCompteurColonne) As String
sLig(iCompteurColonne) = xlsSheet.Cells(iCompteurLigne, iCompteurColonne).Value
End If
Next
' Vérifit 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
prochaineLigne :
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
Pour les agents / actions simples, tu crées un agent >> au lieu de Type = "LotusScript", tu sélectionnes "actions simples".
Ensuite ça t'ouvre une fenêtre vide avec "Sélection de document", tu verras en bas tu pourras cliquer sur "Ajouter critère" >> Ici , tu dois sélectionner le masque concerné par les modifs. Puis dans la partie "Action", pareil, tu cliques sur "Ajouter action" >> ici, tu choisis ton action et le champs visé, tu verras c'est assez simple.
Quand ton agent sera créé tu pourras normalement l’appeler depuis ta base (menu Actions).
Voilà en espérant que ça t'aidera. A+