VB excel conversion tableau

Résolu/Fermé
badstef Messages postés 4 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 30 janvier 2008 - 29 janv. 2008 à 02:38
badstef Messages postés 4 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 30 janvier 2008 - 30 janv. 2008 à 06:04
Bonjour,
j'ais un tableau style cédule de production dans excel 2003:

Work order 10-01-2008 11-01-2008 12-01-2008 etc...
L51000 10 null 20 etc..
L52011 null 1000 200 etc ..

Je veut importé le tableau dans sql mais j'aurais besoin avant de le convertir de cette facon:


Work order date quantity
L51000 10-01-2008 10
L51000 12-01-2008 20
etc...
L52011 11-01-2008 1000
L52011 12-01-2008 200
etc...

Je ne suis pas un expert en vb je suis surtout spécialiste en database sql je ne sais pas par ou commencé pour eliminé les null transposé et dupliquété les étiquette de work order enfin un départ serais grandement aprécié.

Merci d'avance,
Badstef.
A voir également:

5 réponses

badstef Messages postés 4 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 30 janvier 2008 1
30 janv. 2008 à 06:04
Bonjour, j'ai recu ce code d'un forum ca fonctionne très bien et c est très simple:

Merci a tout ceux qui m on aidé.
Badstef

ex:
Sub ConvertTable()

Dim C As Long
Dim LastCol As Long
Dim LastRow As Long
Dim N As Long
Dim R As Long
Dim Rng As Range
Dim NewWks As Worksheet

N = 2
Set NewWks = Worksheets("result")
' Set NewWks = Worksheets.Add(After:=Worksheets(Worksheets.Count))
Set Rng = NewWks.Range("A1:C1")

With Rng
.Cells(1, 1) = "Work Order"
.Cells(1, 2) = "Date"
.Cells(1, 3) = "Quantity"
.Font.Bold = True
.Columns.AutoFit
End With
With Worksheets("source")
'With ActiveSheet
LastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
'LastCol = 10
'LastRow = 10
End With
' MsgBox (LastRow)
For R = 2 To LastRow
For C = 2 To LastCol
If Not IsEmpty(ActiveSheet.Cells(R, C)) Then
NewWks.Cells(N, "A") = Worksheets("source").Cells(R, "A") 'Work Order
'NewWks.Cells(N, "A") = ActiveSheet.Cells(R, "A") 'Work Order
NewWks.Cells(N, "B") = Worksheets("source").Cells(1, C) 'Date
NewWks.Cells(N, "C") = Worksheets("source").Cells(R, C) 'Quantity
N = N + 1
End If
Next C
Next R

End Sub
1
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
29 janv. 2008 à 11:47
fais File --> Save As... et choisis le format qui te plait, p.ex. CSV
0
badstef Messages postés 4 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 30 janvier 2008 1
29 janv. 2008 à 14:44
Bonjour, en fait j'aurai du précisez que le but est de faire un DTS pour une importation automatique dans SQL. De faire une importation avec la feuille direct me cause un problème au niveau de la table car a chaque jours s'ajoute une date donc ma table temporaire dois contenir un champ de plus alors que tous ce qui m'interesse est d'avoir une liste de work order avec la date et la quantité c'est pourquoi je dois avoir une conversion du tableau en premier et c'est la mon problème.....

Voici un exemple de la feuille en question:

--------------------------------------------------------------------------

Bon de commande 11-janv 18-janv 25-janv
L51970 18 29 11
L51971 10
L51963 1
L51978 30
L51979 23
C51355 20
C51356 20
C51357 10 20
C5135810 20


--------------------------------------------------

et je doit en arrivé avec une table comme cela:

Bon de Commande date quantité
C51356 XXXX-XX-XX XX
.
.

Merci encore,
BadStef
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
29 janv. 2008 à 15:47
soit on change la façon de travailler soit tu te fais une belle liste de IF..THEN

ceci me semble le plus efficace :

Private Sub DeleteEmptyCell()

If ActiveSheet.Range("A2") = "" Then
Range("A2").Delete (xlShiftToLeft)
End If

End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
badstef Messages postés 4 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 30 janvier 2008 1
29 janv. 2008 à 16:43
Bonjour, merci mais encore une fois ce n'est pas la solution:

Résumé je ne dois pas éffacé les valeur vide car tout la validité de la donné seras perdu un bon de commande doit avoir une quantité a une date donné alors j'ais une cédule avec différent bon de commande a des dates différente pour des quantité différente je doit me faire une table en répétant les bon de commande qui on plusieurs date des quantityé indiqué ex:

bon de commande; date1 ; date2; date3; date4;date5
C5000 ;10;null;20;null;30
.
.

alors je veut:

bon de commande;date;quantité
C5000;date1;10
C5000;date3;20
C5000;date5;30
etc...

Dans le DTS sql je vais juste ajouté un identity a chaque ligne et après mon traitement seras facille . Le but étant un tableau finale avec d'autre table déjà dans une bd sql.

Merci encore pour votre aide.
BadStef.
0