[VBA] Génération d'un fichier en ayant des tableaux variables

Mister.salm

XLDnaute Nouveau
Bonjour,
J'ai un petit souci de création d'une macro.

Mon problème.

J'ai des tables SQL ZZZZ de taille XXX et de longueur YYY

Ce que je ne connais pas à l'avance c'est :
  • Le nom de la table (Record)
  • Le nombre de colonne par ligne
  • Le nombre de ligne.

Mon objectif est de générer automatiquement des scripts.
J'ai un petit table dans ma page de garde ou j'ai mis à "compléter" mes 3 informations.

et je récupère sous cette forme (exemple pour l'INSERT) :
'Tableau des valeurs
p = ActiveSheet.Range("D2").Value (nom du record)
i = ActiveSheet.Range("C2").Value (nb de colonne)
r = ActiveSheet.Range("B2").Value (nb de ligne)

sPhrase = "INSERT INTO" + " " + p + " " + "VALUES"

J'arrive à faire une boucle pour prendre sur une colonne via ça :
Sub GOBRA()
Dim sPhrase As String
Dim i As Integer
sPhrase = "("
For i = 2 To ActiveSheet.Range("F2").Value
sPhrase = sPhrase + "'" + ActiveSheet.Range("A" + CStr(i)).Text + "',"
Next i
sPhrase = sPhrase + "'" + ActiveSheet.Range("A" + CStr(i)).Text + "')"
ActiveSheet.Range("C6") = sPhrase
ActiveSheet.Range("C6").Copy
End Sub

Mais je n'y arrive pas pour prendre en compte les colonnes (qui est variable)

Un exemple :
Données :
Robert MARCEL H CDI
Marc PIGEON H CDD
Table : PASSE

J'aimerai en cliquant sur mon bouton, retrouver sur une page annexe
INSERT INTO PASSE VALUES ('Robert','MARCEL','H','CDI');
INSERT INTO PASSE VALUES ('Marc','PIGEON','H','CDD');

voir même la génération directement de mon fichier SQL ^^

Par avance merci de votre aide.
 

MichD

XLDnaute Impliqué
Re : [VBA] Génération d'un fichier en ayant des tableaux variables

Bonjour,


Les expressions "Feuil2" et "Feuil3" représentent la propriété "Name" des objets feuille
visible seulement dans la fenêtre de l'éditeur de code et non le nom des onglets des
feuilles.

J'ai supposé que tes données débutaient en Feuil2 ligne 1 et qu'il fallait copier la
chaîne de caractères en Feuil3 sur la ligne équivalente.


VB:
Sub test()
Dim Rg As Range, C As Range, DerLig As Long, DerCol As Integer
Dim R As Range, Cel As Range, A As Long, X As String

With Feuil2
    DerLig = .Cells.Find(What:="*", _
                LookIn:=xlValues, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious).Row
    DerCol = .Cells.Find(What:="*", _
                LookIn:=xlFormulas, _
                SearchOrder:=xlByColumns, _
                SearchDirection:=xlPrevious).Column
    Set Rg = Range("A1", .Cells(DerLig, DerCol))
End With
For Each R In Rg.Rows
    For Each Cel In R.Cells
        If Cel <> "" Then
            X = X & "'" & Cel.Value & "',"
        End If
    Next
    If X <> "" Then
        X = Left(X, Len(X) - 1)
        A = A + 1
        Feuil3.Range("A" & A) = "INSERT INTO PASSE VALUES (" & X & ");"
    End If
Next
End Sub
 

Mister.salm

XLDnaute Nouveau
Re : [VBA] Génération d'un fichier en ayant des tableaux variables

Bonjour,

Merci pour cette réponse. Je suis passé par du VBScript la même logique de boucle:

~~~~~~
colonne = 1
Do Until objExcel.Cells(1,colonne).Value = ""
format.Add colonne, xlSht.Cells(1, colonne).value
colonne = colonne + 1
Loop

' Lire la première ligne pour connaitre le format des données
colonne = 1
Do Until objExcel.Cells(1,colonne).Value = ""
nom_colonne.Add colonne, xlSht.Cells(2, colonne).value
colonne = colonne + 1
Loop


' Lire les lignes et dumper dans un fichier sql
Set fso = CreateObject("Scripting.FileSystemObject")
Set fsql = fso.CreateTextFile(nomFichierSQL, True)


' Boucle de création
ligne = 3
Do Until objExcel.Cells(ligne,1).Value = ""
nom_colonne_ref = nom_colonne.Item(1)
val_colonne_ref = Replace(xlSht.Cells(ligne, 1).value,"'","''")
if format.Item(1)="s" and val_colonne_ref <> "NULL" then val_colonne_ref = "'" & val_colonne_ref & "'"

nom_colonne_achanger = nom_colonne.Item(2)
val_colonne_achanger = Replace(xlSht.Cells(ligne, 2).value,"'","''")
if format.Item(2)="s" and val_colonne_achanger <> "NULL" then val_colonne_achanger = "'" & val_colonne_achanger & "'"

fsql.WriteLine "UPDATE " & nomTable & " SET " & nom_colonne_achanger & "=" & val_colonne_achanger &" WHERE " & nom_colonne_ref & "=" & val_colonne_ref & ";"
ligne = ligne + 1
Loop

~~~~
 

Statistiques des forums

Discussions
312 493
Messages
2 088 955
Membres
103 989
dernier inscrit
jralonso