Bonjour voila mon petit pb,

PB : j'ai actuellement une BASE de données sous SQL server, avec 2 requetes je crée 2 dataset différents (l'un contenant des ID de personne + des roles associées, l'autre contenant l'ID de personnes + toutes leurs données relatives)

Le but est de maxer le tout pour associer les roles avec ces personnes (certaines personnes peuvent avoir plusieurs roles)

L'idée de depart etait d'ecrire le resultat dans un fichier excel (qui marche impecc )

je vous link le code etape par etape :

Connection a la base

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
Sub ChargeTable(ByVal RqtCtc As String, ByVal TableName As String, ByVal DatasetCtc As System.Data.DataSet)
        Dim con As New SqlConnection()
        Dim sqlda As SqlDataAdapter
        con = New SqlConnection(con_strg)
        con.Open()
        sqlda = New SqlDataAdapter(RqtCtc, con)
        Try
            ' Récupération des données dans une table nomtable
            sqlda.Fill(DatasetCtc, TableName)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            con.Close()
        End Try
    End Sub

Création des dataset role et contacts


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
   Sub rapport_excel(ByVal requete As String, ByVal requete2 As String)
        Dim d As String = Format(Today, "yyyMMdd")
        Dim d2 As String = Format(Now, "HH-mm")
        'Création du DataSet contact
        Dim data As New Data.DataSet()
        Try
            ChargeTable(requete, "RECHERCHE", data)
        Catch ex As Exception
            MsgBox(ex.ToString)
            Exit Sub
        End Try
        'Ici on compte le nombre de lignes et de colonnes du datatable
        Dim NbRow As Integer = 0
        Try
            NbRow = data.Tables("RECHERCHE").Rows.Count
        Catch ex As Exception
        End Try
        Dim nbcol As Integer = data.Tables("RECHERCHE").Columns.Count
 
 
 
 
        'Création du DataSet role
        Dim data2 As New Data.DataSet()
        Try
            ChargeTable(requete2, "RECHERCHE", data2)
        Catch ex As Exception
            MsgBox(ex.ToString)
            Exit Sub
        End Try
        'Ici on compte le nombre de lignes et de colonnes du datatable
        Dim NbRow2 As Integer = 0
        Try
            NbRow2 = data2.Tables("RECHERCHE").Rows.Count
        Catch ex As Exception
        End Try
        Dim nbcol2 As Integer = data2.Tables("RECHERCHE").Columns.Count

Ecriture de mes resultat dans un fichier excel :


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
      Dim x As Integer
        Dim y As Integer
        Dim xlSheet As New Excel.Worksheet
        xlSheet = xlApp.Workbooks.Add.ActiveSheet
        xlSheet.Name = "Feuil1"
 
 
        For y = 0 To nbcol - 1
            For x = 0 To NbRow - 1
                'En tête
                xlSheet.Cells(1, y + 1) = data.Tables("RECHERCHE").Columns(y).ColumnName
                'On rempli la case
 
 
                xlSheet.Cells(x + 2, y + 1) = data.Tables("RECHERCHE").Rows(x).Item(y).ToString
 
            Next
            For x = 0 To NbRow - 1
 
                xlSheet.Cells(x + 2, y + 16) = Rolexist(data.Tables("RECHERCHE").Rows(x).Item(y).ToString, data2)
 
            Next
        Next
 
        xlSheet.SaveAs("C:\" + d.ToString + " " + d2.ToString + ".xml")
        xlSheet = Nothing
        'On quitte l'application et on détruit les objets
        xlApp.Quit()
 
        xlApp = Nothing

La fonctione "roleexist" qui permet de macther les deux dataset en utilisant les ID des personne et qui permet de rajouter une colonne "role" au dataset contact




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
 Function Rolexist(ByVal Code As String, ByVal role As DataSet) As String
 
        Dim x As Integer
        Rolexist = ""
        Try
 
            For x = 0 To role.Tables("RECHERCHE").Rows.Count - 1
                If Code = role.Tables("RECHERCHE").Rows(x).Item(0).ToString() Then
                    Rolexist += role.Tables("RECHERCHE").Rows(x).Item(1).ToString() + Chr(13)
                End If
            Next
 
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        Return Rolexist
    End Function

j'aimerais au lieu d'ecrire dans mes cellules excel ecrire dans un fichier XML,
j'ai deja essayé la methode WriteXML pour les dataset mais elle ne me satisfait pas.
J'aimerais le créer a la main avec des print#1 "[[CDATA etc...."

si quelqu'un m'a compris je sollicite son aide