IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

demande de conseil : projet de manipulation de fichier excel


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut [VB.NET]demande de conseil : projet de manipulation de fichier excel
    Bonjour tout le monde,

    Je commence un nouveau projet consistant à manipuler un fichier excel.

    En gros j'ai un fichier excel en entrée, je dois l'ouvrir effectuer des traitements dessus et généré un nouveau fichier excel en sortie avec des onglets.

    Je voulais avoir le retour de personne ayant déjà eut ce genre de traitement à géré.

    Les problèmes rencontrer les erreurs à eviter, la méthodologie à utiliser pour gérer le problème.

    Pour l'instant je suis en train de rechercher de l'information sur le traitement de fichier excel depuis vb.net

    Merci d'avance pour vos remarques et vos retour d'expérience.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 174
    Points : 25 115
    Points
    25 115
    Par défaut
    il faut ajouter en référence à ton projet la dll d'excel (microsoft excel object librairy ou un truc dans le genre, trouvable dans l'onglet COM de l'ajout de référence)

    ensuite ca permet de faire un new excelapplication, puis des tas d'instructions genre ouvrir un fichier, lire ce qu'il y a dedans, en créer un autre, le remplir, l'enregistrer et fermer excel (il est possible de rendre excel invisible pendant le traitement aussi)

    pour trouver comment manipuler le modèle objet d'excel, une chose simple c'est de faire des macros dans excel
    tu lances l'enregistrement d'une macro, tu fais ce qu'il y a à faire (genre fichier/ouvrir) puis tu arretes l'enregistrement de la macro
    la macro un fois généré est accessible dans l'éditeur vba d'excel
    le code vba (visual basic pour applications) ressemble fortement à ce qu'il faut mettre dans vb.net, juste quelques modifs à faire pour l'adapter

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    bonjour

    et merci pour ta réponse.

    Pouah je trouvais pas la référence excel. Forcément je cherchais comme un boulet dans l'onglet .net et pas dans l'onglet COM.

    et il ne le précise pas dans ce document :
    http://support.microsoft.com/kb/219151/fr-fr

    Par contre j'ai remarquer lors de l'ajout qu'il rajoute 3 références :
    - Microsoft Excel 10.0 Object Library
    - Microsoft Office 10.0 Object Library
    - Microsoft Visual Basic for Applications Extensibility 5.3

    Je voulais savoir si j'avais pas fait de boulette.

    encore merci

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 174
    Points : 25 115
    Points
    25 115
    Par défaut
    ca doit etre normal ...

    de toute facon d'avoir trop de références ne nuit pas

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Hello,
    je travail couramment avec le model excel et je te conseil de lire ces quelque lien :
    http://msdn.microsoft.com/fr-fr/libr...8VS.80%29.aspx
    http://msdn.microsoft.com/fr-fr/libr...8VS.80%29.aspx

    Ils sont très complet et intéressant...
    Une fois lut ont peut tout faire...

    Bien à toi, bonne journée.

    P.S. : Petit piège, si ton application doit tourné autant sur des postes équipé d'Excel 2007 que du 2003, utilise les DLL du 2003 (compatible avec le 2007), si tu ne le fais pas tu auras un beau plantage dans le sens inverse...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    bonjour bonjour,

    Merci pour c deux liens,

    Je vais aller jeter un ptit coup d'oeil dessus.

    Par contre j'ai lu pas mal de chose sur "Microsoft Visual Studio 2005 Tools". Je voulais savoir si il s'agissait d'un outil indispensable, ou si on pouvait s'en passer.

    Existe-t-il une version express (gratuite) de cette outil?

    Merci pour votre aide.

    ++

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    rebonjour,

    rien que la déjà pour cette exemple :

    http://msdn.microsoft.com/fr-fr/libr...5x(VS.80).aspx

    apparemment il faut le "Microsoft Visual Studio 2005 Tools" semble-t-il?

    Il n'y a pas d'autre solution ?

    merci de votre aide.

  8. #8
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Non il ne te faut pas spécialement cette outil, pour preuve je code sous le 2003. Tout ce qu'il faut retenir dès lors, c'est que les exemples qui sont fait avec cette outil ont simplement d'origine quelque objet comme Me.Application.
    Vu que nous n'utilisons pas l'outil, nous devons le déclarer nous même...
    Donc pour faire cette exemple tu dois simplement déclarer l'application et l'instanciée.

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 174
    Points : 25 115
    Points
    25 115
    Par défaut
    vsto (visual studio tools for office) permet de faire des projet qui ne sont pas des .exe mais des fichier office contenant du code .net permettant de travailler directement dans l'appli

    par contre il n'est pas gratuit

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    bonjour,

    ouaip je viens d'essayer en instanciant l'application et ça semble marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Public Class Form1
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim chemin As String
     
            Dim oXL As Excel.Application = New Excel.Application
            'Dim oWB As Excel.Workbook
            'Dim oSheet As Excel.Worksheet
            'Dim oRng As Excel.Range
     
            OpenFile.Title = "récupération du chemin du fichier excel"
            OpenFile.Filter = "*.xls  | *.xls"
            OpenFile.ShowDialog()
            chemin = OpenFile.FileName
     
            Me.txtAdresse.Text = chemin
     
            oXL.Workbooks.Open(chemin)
            'oXL.Visible = True
     
            'MsgBox("le chemin du fichier est : "+chemin)
     
        End Sub
     
    End Class
    bon j'avance doucement mais surement

    ++

  11. #11
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut ouvrir un fichier commençant par
    Bonjour,

    je travaille sur un fichier excel qui se met à jour avec les données de plusieurs autres doc excel (en appuyant sur un bouton).
    cette mise à jour se fait donc après l'ouverture puis fermeture des doc.
    cette ouverture est géré par Workbooks.open
    Et cela marche sans problème.


    mon problème c'est que : pour que ça marche je dois renommer tous mes fichiers pour qu'ils aient tous un nom du style:

    "parametres.listeAppli(appli)-doc-dateIndic.xls"
    (avec parametres.listeAppli(appli)= appli1, appli2...ou appli25
    et dateIndic=le mois et l'année )

    le problème c'est que ces documents sont gérés par Doc Manager, et lorsqu'on les enregistre ils ont le nom voulu suivi de la version :

    "parametres.listeAppli(appli)-doc-dateIndic-w2.xls"
    (on a pas que des w2, c'est un exemple)

    comment faire pour ne pas prendre en compte ce "-w2"???

    j'ai essayé avec :
    fichier = "parametres.listeAppli(appli)-doc-dateIndic" & "*.xls"

    mais excel recherche alors les doc portant le nom "parametres.listeAppli(appli)-doc-dateIndic*.xls"!!
    c'est énervant, pourtant ça n'a pas l'air dur

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    bonjour,

    La je patauge un peu dans la manière de parcourir mon premier fichier excel pour alimenter le fichier excel que je dois créer.

    Comment parcourt-on un fichier excel?

    est-il nécessaire de stocké dans une TAD les données pour les traitement?

    Comment définir le nombre de ligne | colonne max pour avoir les bornes du fichiers excel.

    Voilà mes axes de recherche actuel.

    si qqn a des réponses je suis preneur

    merci d'avance

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    bonjour,

    bon au cours de mes recherches je suis tombé sur cette page avec un exemple de code interessant :

    http://vb.net-informations.com/excel..._worksheet.htm

    Il présente le parcourt d'un fichier et la façon d'extraire le nombre de ligne et de colonne max d'une feuille excel.

    Par contre j'ai fait le test et j'ai l'impression qu'il me retourne un nombre de colonne supérieur au nombre de colonne. J'ai en effet une différence de 1.

    Je reverrai cela demain.

    ++ all

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Points : 18
    Points
    18
    Par défaut
    slt

    moi je développe un application de gestion qui permet à partir d'excel j'imprime mes différents états et de faire des extraits sur l'emplacement souhaité afin de les utiliser ultérieurement.
    la sauvegarde de l'extrait peut se faire avec un nom souhaité.
    mais pour y arriver il faut tout d'abord ajouter la référence d'excel à votre projet.
    voici le code que j'utilise
    excel est manipulé en mode invisible
    j'utilise un fichier pré créer avec pour nom BDR.xls dont j'ai configuré selon l'état souhaité avec des noms de feuille précis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    #Region "Ouverture et fermeture du classeur"
        Public appExcel As Excel.Application
        Public Classeur As Excel.Workbook
     
        Public Feuil0, Feuil1, Feuil2, Feuil3, Feuil4, Feuil5, Feuil6, Feuil14 As Excel.Worksheet
        Public Feuil7, Feuil8, Feuil9, Feuil10, Feuil11, Feuil12, Feuil13 As Excel.Worksheet
        Public Feuil15, Feuil16, Feuil17, Feuil18, Feuil19, Feuil20, Feuil21, Feuil22, Feuil23 As Excel.Worksheet
     
        Public myIDExcel As Int16
     
        Public Sub OuvrirClasseur()
            Dim intFirstExcelIDs() As Int16 = ListID()
            Try
                appExcel = CType(CreateObject("Excel.Application"), Excel.Application)
                'Ouverture d'un fichier Excel
                Classeur = appExcel.Workbooks.Open(Filename:=My.Application.Info.DirectoryPath & "\Resources\BDR.xls", UpdateLinks:=0, ReadOnly:=False, Format:=5, Password:="diampa")
                Feuil1 = CType(Classeur.Worksheets("MotdePass"), Excel.Worksheet)
                Feuil2 = CType(Classeur.Worksheets("Bon"), Excel.Worksheet)
                Feuil3 = CType(Classeur.Worksheets("EtatBudget"), Excel.Worksheet)
                Feuil4 = CType(Classeur.Worksheets("EtatEngag"), Excel.Worksheet)
                Feuil5 = CType(Classeur.Worksheets("SituaGle"), Excel.Worksheet)
                Feuil6 = CType(Classeur.Worksheets("ImpriRea"), Excel.Worksheet)
                Feuil7 = CType(Classeur.Worksheets("FicheControle"), Excel.Worksheet)
                Feuil8 = CType(Classeur.Worksheets("ImpriEng"), Excel.Worksheet)
                Feuil9 = CType(Classeur.Worksheets("ImpriLiq"), Excel.Worksheet)
     
                Feuil10 = CType(Classeur.Worksheets("BorderauPerso"), Excel.Worksheet)
                Feuil11 = CType(Classeur.Worksheets("BorderauAutre"), Excel.Worksheet)
                Feuil12 = CType(Classeur.Worksheets("BorderauInvest"), Excel.Worksheet)
     
     
                Feuil13 = CType(Classeur.Worksheets("Borderau"), Excel.Worksheet)
                Feuil14 = CType(Classeur.Worksheets("Budget"), Excel.Worksheet)
                Feuil15 = CType(Classeur.Worksheets("Budget1"), Excel.Worksheet)
     
                Feuil16 = CType(Classeur.Worksheets("BudgetProjR"), Excel.Worksheet)
                Feuil17 = CType(Classeur.Worksheets("BudgetProjD"), Excel.Worksheet)
                Feuil18 = CType(Classeur.Worksheets("BudgetProgRecap"), Excel.Worksheet)
                Feuil19 = CType(Classeur.Worksheets("BordEmisMandat"), Excel.Worksheet)
                Feuil20 = CType(Classeur.Worksheets("GrandLivre"), Excel.Worksheet)
                Feuil21 = CType(Classeur.Worksheets("Fiches"), Excel.Worksheet)
                Feuil22 = CType(Classeur.Worksheets("BudgetR"), Excel.Worksheet)
                Feuil23 = CType(Classeur.Worksheets("BudgetD"), Excel.Worksheet)
                'BordEmisMandat  cheminPrincipal = Feuil1.Range("B77").Value.ToString
                '**** User 1
                Feuil0 = CType(Classeur.Worksheets("SituaGle1"), Excel.Worksheet)
     
                Dim intLastExcelIDs() As Int16 = ListID()
                'Différence des 2 listes et récupération de notre ID
                myIDExcel = ExtractID(intFirstExcelIDs, intLastExcelIDs)
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
     
     
        End Sub
     
        Public Function ListID() As Int16()
            Dim Processes As Process() = Nothing
            Processes = Process.GetProcessesByName("EXCEL")
            ' Load ID Processes in Array
            Dim intProcesses(Processes.GetUpperBound(0)) As Int16
            Dim i As Int16
            For i = 0 To CShort(Processes.GetUpperBound(0))
                intProcesses(i) = CShort(Processes(i).Id.ToString)
            Next
            Return intProcesses
        End Function
     
        Public Function ExtractID(ByVal intFirstIDs As Int16(), ByVal intLastIDs As Int16()) As Int16
            Dim intID As Int16 = Nothing
            Dim intID_FirsList As Int16 = Nothing
            Dim intID_LastList As Int16 = Nothing
            Dim i As Int16 = Nothing
            For i = 0 To CShort(intLastIDs.GetUpperBound(0))
                intID_LastList = intLastIDs(i)
                If Array.IndexOf(intFirstIDs, intID_LastList) = -1 Then
                    intID = intID_LastList
                    Exit For
                End If
            Next
            Return intID
        End Function
     
        Public Sub FermerClasseur(ByVal intIDExcel As Int16)
            ' appExcel.SaveWorkspace()
            If intIDExcel <> 0 Then
                If Process.GetProcessById(intIDExcel).HasExited = False Then
                    Try
                        Process.GetProcessById(intIDExcel).Kill()
                        intIDExcel = 0
                    Catch ex As Exception
                        MessageBox.Show(ex.Message & ex.StackTrace, "Error while closing Excel integration.", _
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
                    End Try
                End If
            End If
        End Sub
    #End Region

  15. #15
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Citation Envoyé par narutobaka Voir le message
    bonjour,

    La je patauge un peu dans la manière de parcourir mon premier fichier excel pour alimenter le fichier excel que je dois créer.

    Comment parcourt-on un fichier excel?

    est-il nécessaire de stocké dans une TAD les données pour les traitement?

    Comment définir le nombre de ligne | colonne max pour avoir les bornes du fichiers excel.

    Voilà mes axes de recherche actuel.

    si qqn a des réponses je suis preneur

    merci d'avance
    Hello,
    si tu dois uniquement lire le fichier, y'a une méthode très simple qui permet de mettre ton Excel directement dans un dataTable qui est très facile à manipuler...
    (c'est la méthode que j'utilise)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Dim connIn As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Mes documents\MonFichierExcel.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'")
                connIn.Open()
                Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("Select * from feuil1$", connIn)
     
                da.Fill(ds, "TableExcel")
    Tu peux aller voir le site http://www.connectionstrings.com/ pour voir tout les types de connexions possible
    Excel2003 : http://www.connectionstrings.com/excel
    Excel2007 : http://www.connectionstrings.com/excel-2007

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    Bonjour

    Pour mon projet je dois :

    1 - ouvrir le fichier
    2 - effectuer des traitements sur les données pour générer un nouveau fichier excel
    2-1 : effectuer des sommes horaires par semaine
    2-2 : effectuer des sommes horaires par mois
    2-3 : nombre de CDI hebdomadaire
    2-4 : nombre d'intérimaire hebdomadaire
    2-5 : éclater les salariés par maitrise et refaire les calcules par maitrise
    2-5-1 : effectuer des sommes horaires par semaine
    2-5-2 : effectuer des sommes horaires par mois
    2-5-3 : nombre de CDI hebdomadaire
    2-5-4 : nombre d'intérimaire hebdomadaire
    2-6 : éclater les salariés par secteur et refaire les calcules par secteur
    2-6-1 : effectuer des sommes horaires par semaine
    2-6-2 : effectuer des sommes horaires par mois
    2-6-3 : nombre de CDI hebdomadaire
    2-6-4 : nombre d'intérimaire hebdomadaire
    3 - effectuer un traitement sur certaines données ne devant pas être imprimé pour une version imprimable

    Hello,
    si tu dois uniquement lire le fichier, y'a une méthode très simple qui permet de mettre ton Excel directement dans un dataTable qui est très facile à manipuler...
    (c'est la méthode que j'utilise)
    Pourquoi précises-tu uniquement si il y a besoin de lire le fichier?

    Est-ce que cette méthode permet de faire la manipulation inverse et de créé le nouveau document excel après modification des données dans le OleDdbadapter?

    La je suis en train de travailler "sur un moyen de découper", mon document excel par mois puis par semaine pour pouvoir faire les calcules mensuels.

    J'ai déjà trouvé une astuce pour gérer les mois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    Private Sub btnTestGestionMois_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTestGestionMois.Click
            Dim range As Excel.Range
            Dim colMax As Integer
            Dim ligneMax As Integer
            Dim compteurCol As Integer
            Dim compteurMois As Integer
            Dim compteurCase As Integer 'compte le nombre de case que couvre le mois pour 
            Dim infoExcel As String
            Dim sousChaineTmp() As String
            Dim valeur_mois_precedent As String
            Dim valeur_mois_en_cours As String
     
            range = edSheet.UsedRange
            colMax = range.Columns.Count
            ligneMax = range.Rows.Count
            compteurMois = 0
     
            For compteurCol = 2 To colMax
     
                infoExcel = CType(range.Cells(5, compteurCol), Excel.Range).Value
                sousChaineTmp = infoExcel.Split("/")
     
                'MsgBox(sousChaineTmp(1))
     
                If (compteurCol = 2) Then
                    If (sousChaineTmp(1).Length <> 0) Then
                        compteurMois += 1
                    End If
                    valeur_mois_precedent = sousChaineTmp(1)
                    valeur_mois_en_cours = valeur_mois_precedent
                Else
                    valeur_mois_precedent = valeur_mois_en_cours
                    valeur_mois_en_cours = sousChaineTmp(1)
                End If
     
                If (valeur_mois_precedent <> valeur_mois_en_cours) Then
                    compteurMois += 1
                End If
     
            Next
     
            MsgBox(compteurMois)
     
        End Sub
    Pour l'instant ce code ne fait que donner le nombre de mois à gérer.

    Mais je vais m'en servir pour compter le nombre de colonnes concernées par ce mois pour gérer l'affichage et la fusion de la cellule qui contiendra les données mensuels.

    Je sais pas si il y a un autre moyen de repérer les "délimitations", qui sont en faites des fusions de colonne par exemple pour les mois ou les semaines.

    Actuellement je suis partie sur un pseudo code de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    Tant que le mois ne change pas
    {
    	Tant que la semaine ne change pas
    	{
    		Lecture des données de la case
    		Si la Case est vide Alors
    			CompteurHeureHebdo += CompteurHeuresJourna 
    		Sinon
    			Id=Identification (donnée de la case du jour)
    			CompteurHeureHebdo+=renvoitduresteHebdo(Id)
     
    }
    }
    Il me reste à définir la structure de donnée qui va stocké les informations hebdomadaires et celle qui va stockée les informations mensuelles.

    pour l'instant j'avance par petit bout.

    Mais je sais pas si il y a d'autre méthode plus intéressante.

    Je suis preneur de toute idée.

    Je vais regarder pour l'utilisation des datatable mais je sais pas si ils m'apporteront les outils de contrôle sur les mois et les semaines, ce sur quoi je travaille actuellement.

    Encore merci

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Juste pour savoir, comment sont organisés tes fichiers excels ? A savoir si tes mois sont écris dans une colonne à chaque fois ? As-tu plusieurs sheets dans chaque fichier ? Y a-t-il des moments ou des colonnes/lignes/ou cellules sont fusionnées ?
    Est-ce que tes fichiers excels sont tous identiques aussi ?

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    Bonjour

    Juste pour savoir, comment sont organisés tes fichiers excels ? A savoir si tes mois sont écris dans une colonne à chaque fois ?
    Voici une capture d'écran de la représentation des mois et des jours dans les fichiers excel que je devrais traiter ( en pièce jointe ).

    As-tu plusieurs sheets dans chaque fichier ?
    Il n'y a dans le fichier que je devrais traiter qu'une seule feuille, que je devrais éclater par maitrise et par secteur sur plusieurs feuilles dans le fichier résultat.

    Il n'y a qu'un et un seul fichier à traiter.

    Y a-t-il des moments ou des colonnes/lignes/ou cellules sont fusionnées ?
    Il y a des cellules pour lesquel il y a des fusions de colonne, par exemple pour identifier les mois et les semaines, et je m'étais d'ailleur demandé si il y avait possibilité d'utiliser ces zones de fusion pour l'affichage des résultats horaires mensuels et hebdomadaire. Pour l'instant je n'ai rien trouvé de ce coté là.

    Cependant dans mes listes de données il n'y a que des cellules unique, sans fusion de cellule. Il n'y a des fusions de cellules que dans les entêtes de données.

    Par contre moi je devrais créer des cellules fusionner pour réafficher par exemple la présence hebdomadaire ou mensuelle et ces zones de fusion devront correspondre au zone de fusion des entêtes.

    Est-ce que tes fichiers excels sont tous identiques aussi ?
    Tous les fichiers auront le même format, même si le format définitif n'a pas encore été définit, il risque dons encore de bouger, mais ça ne m'empêche pas de développer à partir de ce modèle .

    Je te remercie pour ces questions ca permet de bien dégager la problèmatique .

    encore merci
    Images attachées Images attachées  

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Si jamais tu n'as qu'un fichier excel d'où tu extrais les données, déjà tu n'as pas besoin de te prendre la tête à compter le nombre de lignes et de colonnes (ou dans le cas où tous les fichiers excel sont basés sur le même model), puisque ces nolbres sont fixes.

    Après tu peux te faire une table à 2 dimensions (MaTable(i,j)) en la remplissant avec toutes les valeurs de tes données en partant du principe que MaTable(0,0) contient la première donnée du jour 1 de la semaine 1 du mois 1. Je ne sais pas comment sont organisées tes données mais pour te déplacer dans ta table pour les colonnes ça sera simple puisque tu peux te faire une variable jour, une variable semaine et plusieurs variables mois pour te déplacer, le jour correspondant à mois + semaine(1 à 5) + jour(1 à 7) le tout - 1. Tu peux aussi te déplacer juste en fonction des semaines voir même que des jours.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    Si jamais tu n'as qu'un fichier excel d'où tu extrais les données, déjà tu n'as pas besoin de te prendre la tête à compter le nombre de lignes et de colonnes (ou dans le cas où tous les fichiers excel sont basés sur le même model), puisque ces nolbres sont fixes.
    Non ces nombres ne sont pas fixes tout au moins pour le nombre de ligne qui variera, car elle est lié au nombre de salarié sur chaîne.

    Concernant le nombre de colonne elle par contre le seront car l'export sur lequel je devrait travailler couvrira normalement une période de 14 semaines.

    Cependant il m'est nécessaire de compter les colonnes par mois et par semaine pour pouvoir construire la case de résultat par mois et par semaine fusion du de ce nombre de colonne.

    Concernant la struture de donnée je suis en train de regarder si j'ai besoin de tout stocker.

    Pour l'instant les seuls éléments que j'ai trouvé nécessaire de stocker et le nombre de jour des mois et de semaines ainsi que le totale de présence pour ces mois et semaines, les reste étant des données copiées directement, je ne pense pas avoir besoin de les stocker.

    Mais je n'ai pas encore finit mon analyse.

    Merci pour tes observations

    Je suis toujours preneur de remarque.

Discussions similaires

  1. Comment manipuler plusieurs fichiers Excel
    Par Olivier0 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 16/08/2007, 08h38
  2. [c#][.net 1.1] - Manipuler des fichiers Excel en c#
    Par skystef dans le forum ASP.NET
    Réponses: 4
    Dernier message: 13/08/2007, 13h10
  3. probleme de manipulation de fichier excell
    Par obydissonn dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/03/2007, 13h21
  4. Manipuler un fichier excel avec python
    Par dipajero dans le forum Général Python
    Réponses: 4
    Dernier message: 09/02/2006, 23h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo