begin process at 2013 05 24 16:45:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

[Catégorie modifiée .Net -> VBA] Génération d'un fichier SQL sous EXCEL 2010 en VB


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[Catégorie modifiée .Net -> VBA] Génération d'un fichier SQL sous EXCEL 2010 en VB

vendredi 6 juillet 2012 à 10:25:56 | [Catégorie modifiée .Net -> VBA] Génération d'un fichier SQL sous EXCEL 2010 en VB

MisterSalm

Bonjour,
J'ai un petit souci de création d'une macro.
Mon problème.
J'ai des tables SQL de taille XXX et de longueur YYY
Ce que je ne connais pas 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 (mon nom de 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.
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');


Par avance merci de votre aide.
vendredi 6 juillet 2012 à 16:00:38 | Re : Génération d'un fichier SQL sous EXCEL 2010 en VB

jack

Administrateur CodeS-SourceS
Réponse acceptée !
Salut

Première chose : Le VB de Excel est du VBA, pas du VB.Net (catégorie)

Ensuite, quand tu colles du code, merci d'utiliser la coloration syntaxique = 3ème icone à droite = plus facile à relire et conserve les indentations en tête de ligne

Enfin, prends 5 minutes pour te relire. Tes explications ne sont pas très compréhensibles.
De même, le code utilise des noms de cellules, mais on ne sais pas où sont tes données.

Ton code :
Code Visual Basic :
'Tableau des valeurs
p = ActiveSheet.Range("D2").Value (mon nom de Record)
i = ActiveSheet.Range("C2").Value (Nb de colonne)
r = ActiveSheet.Range("B2").Value ( Nb de ligne)
- Ce que tu appelles 'Record' est un nom de table, c'est important d'appeler correctement les objets (Record est une ligne de données).
- Tu ranges des valeurs dans des variables, mais que deviennent ces variables ?
D'autant que tu redimensionnes un 'i' dans la Sub qui suit ...

Code Visual Basic :
Range("A" + CStr(i)).Text
Pas beau.
Mieux vaudrait utiliser les syntaxes propres comme :
Code Visual Basic :
Range("A1").Offset(0, i - 1).Text
Je te laisse regarder dans l'aide l'intérêt de Offset

Code Visual Basic :
For i = 2 To ActiveSheet.Range("F2").Value
- Pourquoi commences-tu à 2 ?
- Qu'y a t-il dans F2 ?
Je suppose le nombre de colonnes.
Si tu as 10 dans F2, tu vas donc utiliser les colonnes 2 à 10.
Exact ?
- Sais-tu que, à la sortie d'un For-Next, la variable est égale au maxi de la boucle + 1 ?
Dans ce cas, la ligne qui suit le Next va utiliser la colonne 11 (dans mon hypothèse de 10 dans F2)
Correct ?

Code Visual Basic :
ActiveSheet.Range("C6") = sPhrase
ActiveSheet.Range("C6").Copy
Quel est l'intérêt du "Copy" ?

"Mais je n'y arrive pas pour prendre en compte les colonnes."
Si, tu listes les colonnes, là.
Ce sont les lignes que tu ne scannes pas.

Tout ceci nécessite des éclaircissements.
Rappelle toi qu'on n'a pas ta feuille sous les yeux et qu'il faut décrire le plus simplement ce dont tu disposes.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
lundi 9 juillet 2012 à 10:04:33 | Re : [Catégorie modifiée .Net -> VBA] Génération d'un fichier SQL sous EXCEL 2010 en VB

MisterSalm

Bonjour,

Il n'est jamais facile de faire un premier thread sans oublier les regles de base. Comme les explications même annexes ont leur importance...

Quoiqu'il en soit, j'ai réussi à faire ce que je voulais via du VBScript.

Code VBScript :
' Information sur l'emplacement du fichier EXCEL
nomFichierExcel = InputBox("Entrer le nom du fichier Excel ","Nom du fichier Excel & Emplacement","C:\SCRIPTS\MATRICE.xlsx")

nomFichierSQL = InputBox("ATTENTION, le nom du fichier SQL (sera écrasé si existant) ","Emplacement du fichier SQL","C:\SCRIPTS\INSERT.sql")

nomTable = InputBox("Veuillez indiquer le nom de la Table ","Nom de la Table (Record)","XXXXX")

' Ouverture du fichier Excel pour la création du fichier SQL
Set objExcel = CreateObject("Excel.Application")
Set xlBook = objExcel.Workbooks.Open(nomFichierExcel)
Set xlSht = xlBook.Worksheets("INSERT")
Set format = CreateObject("Scripting.Dictionary")

' Lire la première ligne pour connaitre le format des données (n = Numérique / s = Autre)
colonne = 1
Do Until objExcel.Cells(1,colonne).Value = ""
	format.Add colonne, xlSht.Cells(1, 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)

ligne = 2
Do Until objExcel.Cells(ligne,1).Value = ""
	colonne = 1
	valueString = ""
	Do Until objExcel.Cells(ligne,colonne).Value = ""
		If colonne > 1 Then
			valueString = valueString & ","
		End If
		' Echaper les simples cotes dans les chaînes de caractères
		myValue = Replace(xlSht.Cells(ligne, colonne).value,"'","''")
		
		If format.Item(colonne) = "s" and myValue <> "NULL" Then
			valueString = valueString & "'" & myValue & "'"
		Else
			valueString = valueString & xlSht.Cells(ligne, colonne).value
		End If
		colonne = colonne + 1
	Loop
	fsql.WriteLine "INSERT INTO " & nomTable & " VALUES (" & valueString & ");"
	ligne = ligne + 1
Loop

fsql.Close
objExcel.Quit

WScript.Echo "Le Traitement terminé"

' Fin du Script 


Désolé pour la gène et merci d'avoir répondu à mon message.

Mister Salm


Cette discussion est classée dans : insert, value, activesheet, range, sphrase


Répondre à ce message

Sujets en rapport avec ce message

Importer données dans document Excel [ par djkevin47 ] Bonjour, Je souhaite importer les données dans le fichier Excel qui exécute la macro. Hors la macro actuelle insère les données dans un fichier extern editer automatiquement des commentaires de cellules sous excel [ par Pastador ] Bonjour à tous, j' espère être au bon endroit dans ce forum pour présenter mon petit problème. Je n' y connais pas grand chose en visual basic, je f [Catégorie modifiée VB6 --> VBA] Remplir une feuil Excel a partir d'une BD [ par devilmks ] Bonjour ! je suis entrain de faire une ptite application , et j'ai une bouton qui permet d'afficher un classeur excel ... la feuil(excel) sera rempli Userform bloqué pendant tempo [ par Artisous43 ] Bonjour à tous, Ci joint une petite macro qui me pose probleme. Sur un Userform j' ai un TextBox qui est incrémenté de 1 à 30 par l'utilisation de App Problème affectation variable dans une cellule. [ par poipoi83 ] Bonjour, j'ai écrit un code censé écrire dans une cellule la donnée d'une variable. cette variable est une formule contenant elle même des variables. erreur 424 [ par masmas222 ] Bonjour, y a t'il une ame charitable pour m'aider a regarder ou son mes erreur sur mon fichier de formulaire en vba je suis débutant et connait rien envie de manger mon clavier... macro VB [ par kikooall ] Sub moyennearithmétiquesansvaleurvide() ' ' moyennearithmétiquesansvaleurvide Macro ' ' fait la moyenne des cases non vides Dim z As variant Dim y A Affectation de valeur à des textbox en fonction d'une combobox [ par iallex ] Bonjour ayant réalisé mon premier fichier contenant des userforms, j'aurais une petite question. Dans un userform j'ai une combobox ou l'utilisateur c Envoi mail [ par sambabouyon ] Bonjour, Je viens vers la communauté car j'ai besoin de votre lumière au sujet d'un problème qui me tracasse depuis deux jours. En fait, j'ai ce mac [Catégorie modifiée VB6 --> VBA] Erreur d'exécution n° 5 [ par jpb974 ] Bonjour à tous, Grand débutant en VBA, j'apprécie votre forum où j'apprends beaucoup de choses. Mais là, je bloque totalement sur quelques lignes qui


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,883 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales