interpreter le résultat d'une requête SQL dans excel

maccprod

XLDnaute Junior
Bonjour à tous,
après avoir fait pas mal de recherches sur le net, j'ai une question qui reste sans réponse pour l'instant, c'est pour cela que je viens la posée ici, je vais essayer d'être clair:confused:!
Dans mon travail, j'ai besoin de transformer le résultat d'une requête SQL qui est en fichier texte, en quelque chose de structuré sous Excel. Je m'explique:
le fichier texte est composé de lignes, qui représentent les étages d'un immeuble (1ligne=1etage), ces lignes sont composées de renseignements du type Nom, Prénom, numéro d'appartement etc...
Il faut que ces données qui sont en "vrac" soient organisées dans un tableau excel avec une première ligne qui correspond au premier étage, une seconde par dessus qui corresponde au second étage et ainsi de suite jusqu'au sommet de cet immeuble.
Mon problème est donc qu'il faut que cela se fasse automatiquement quand on a le résultat de la requête SQL, et je ne sais pas du tout quelle méthode je peux employer pour arriver à mes fins.
J'en appel donc à tous ceux qui éventuellement pourraient me donner des pistes de travail.
J'espère avoir été clair, c'est pas sur!!!!
Par avance merci, cordialement,
 

maccprod

XLDnaute Junior
Re : interpreter le résultat d'une requête SQL dans excel

Excuses moi, j'ai répondu trop vite, j'ai trouvé les explications de commande mais je ne pensais pas que l'on pouvait consacrer des lignes à l'explication comme tu l'as fait en vert! encore merci, je vais essayer moi même d'affiner mon tableau et te demanderais à nouveau si je coince!!
 

maccprod

XLDnaute Junior
Re : interpreter le résultat d'une requête SQL dans excel

oui, je me suis précipité:(
peux tu me dire si on peut par exemple mettre la colonne des étages au milieu des deux colonnes pour des appartements, ça nécessite de tout recommencer le code ou simplement de rajouter des lignes? également si je souhaite à partir du fichier texte rajouter la dernière colonne de celui-ci qui renseigne le module, en dessous du nom et prenom de la personne concernée, ça complique beaucoup?
Et dernière question si le résultat de ma requête SQL apporte d'autres données supplémentaires du style date de naissance de la personne, nombre d'enfants, ça necessite de refaire le code à chaque fois ou quelques renseignents supplémentaires sur ce que tu as fait à l'origine suffisent?
par avance merci Minick.
Cordialement,
 

Minick

XLDnaute Impliqué
Re : interpreter le résultat d'une requête SQL dans excel

Non quelques petites modifs.

Code:
Sub ImportAppart()
    Dim Ligne As String, Fichier As String
    Dim NbLigneEntete As Byte, DernierEtageRempli As Byte, NumEtage As Byte[B], ColNumAppart As Byte[/B]
    Dim fs
    
    Application.ScreenUpdating = False
        'Definition du fichier texte a importer
        Fichier = ThisWorkbook.Path & "\Appart.txt"
        'Definition du nombre de ligne d'entete du fichier importé
        NbLigneEntete = 2
        
        Set fs = CreateObject("Scripting.FileSystemObject")
        
        If fs.fileexists(Fichier) Then
            'si le fichier texte existe
            'effacement de la feuille
            Feuil1.UsedRange.Clear
            'ouverture du fichier texteen mode sequentiel
            Open Fichier For Input As #1
                'Tant que la fin du fichier n'est pas atteinte
                'et qu'on a pas lu toutesles lignes d'entete
                Do While Not EOF(1) And NbLigneEntete > 0
                    'Lecture de la ligne suivante
                    Line Input #1, Ligne
                    'decrementation du nombre de ligne d'entete a lire
                    NbLigneEntete = NbLigneEntete - 1
                Loop
                
                'Tant que la fin du fichier n'est pas atteinte
                Do While Not EOF(1)
                    'Lecture de la ligne suivante
                    Line Input #1, Ligne
                    
                    'mémorisation du numéro d'etage (les 2 1er caracteres de la ligne)
                    NumEtage = CByte(Left(Ligne, 2))
                    'copie du numero d'etage dans la ligne correspondante de la colonne 1
                    Feuil1.Range("B" & NumEtage) = NumEtage
                    
                    'Recherche de la 1ere colonne vide sur un etage
[B]                    If Feuil1.Range("A" & NumEtage).Value = "" Then
                        ColNumAppart = 1
                    Else
                        ColNumAppart = 3
                    End If[/B]
                    
                    'Copies des nom et num
                    'pour le nom de la position 4 sur 30 caracteres en supprimant les espaces a droite
                    'pour le numero de la position 36 sur 4 caracteres en supprimant les espaces a gauche
                    Feuil1.Cells(NumEtage, ColNumAppart).Value = RTrim(Mid(Ligne, 4, 30)) & " " & LTrim(Mid(Ligne, 36, 4)) [B]& vbLf & Mid(Ligne, 44, 4)[/B]
                Loop
            'fermeture du fichier texte
            Close #1
            
            'Un peu d'habillage
            'Centrage des numeros d'etage
            Feuil1.Columns("B").HorizontalAlignment = xlCenter
[B]            Feuil1.Columns("B").VerticalAlignment = xlCenter
            Feuil1.Columns("B").ColumnWidth = 10[/B]
            'Ajustement de la largeur des colonne aux données
[B]            Feuil1.Range("A:A,C:C").ColumnWidth = 40[/B]

            'tri par numero d'etage en decroissant
            Feuil1.UsedRange.Sort key1:=Feuil1.Range("[B]B1[/B]"), Order1:=xlDescending, header:=xlNo
        Else
            'si on ne ttrouve pas le fichier, un peu message d'alerte
            MsgBox "Le fichier '" & Fichier & "' n'existe pas.", vbOKOnly
        End If
    Application.ScreenUpdating = True
End Sub
Pour les infos supplementaires, si elles sont a la suite dans la ligne d'un appart rien de particulier, sinon
il faut juste revoir le mappage des zones pour adapter le code.


++
Minick
 

maccprod

XLDnaute Junior
Re : interpreter le résultat d'une requête SQL dans excel

C'est extra, maintenant je n'ai pas bien compris ce que tu as fait pour intégrer la dernière colonne du fichier texte qui renseigne le module avec les noms et prénoms, et en faite, que faut il rajouter comme code dans le cas ou d'autres informations viennent s'ajouter au fichier texte comme date de naissance.
Encore merci pour ta disponibilité.
 

Minick

XLDnaute Impliqué
Re : interpreter le résultat d'une requête SQL dans excel

Pour le module:
on passe a la ligne
Code:
& vbLF

On prend a partir du 44 caracteres sur 4 caracteres.
Code:
 & Mid(Ligne, 44, 4)

Pour les champs suplpementaires, il suffit de t'inspirer des 2 lignes ci dessus.
En changeant le 44 (position de depart) et 4 (taille du champ)

++
Minick
 

maccprod

XLDnaute Junior
Re : interpreter le résultat d'une requête SQL dans excel

merci Minick,
que signifie & vbLF et je ne comprends pas non plus le 44 il correspond a quoi dans excel, et la taille du champ c'est quoi?
A ton avis, j'avais envie de commencer par acheter Programmation VBA pour Excel 2007 pour les Nuls, est ce bien pour commencer?
 

Minick

XLDnaute Impliqué
Re : interpreter le résultat d'une requête SQL dans excel

& c'est pour concatener des données
vbLf correspond au retour a la ligne, pour avoir le module sous le nom prenom Num

44 est le 44eme caracteres d'une ligne de ton fichier texte
et 4 est la longueur du champs de ton fichier texte
ici le champ module est sur 4 caracteres

Pour les livres, je ne peux vraiment pas t'aiguiller, j'en ai jamais acheté.
++
Minick
 

maccprod

XLDnaute Junior
Re : interpreter le résultat d'une requête SQL dans excel

merci pour ces précisions, je commence a me faire une idée de la façon de faire grâce a tes eclaircissements, par contre tu me précise que le champ module est sur 4 caractères, ok, mais pour les noms et prénoms, c'est aléatoire, donc comment est ce que tu définis le nombre de caractères?
Pour parfaire le fichier excel, je souhaiterais que le fichier texte du départ soit enregistré avec le nom du bâtiment en question au lieu de appart, et que ce nom apparaisse en titre sur le fichier excel dans un cadre, et qu'ainsi le tableau démarre en dessous de ce titre, quelle est la manip?
merci beaucoup
 

Minick

XLDnaute Impliqué
Re : interpreter le résultat d'une requête SQL dans excel

C'est aleatoire oui, mais le champ fait toujours 30 caracteres, comblé par des espaces pour atetindre les 30 caracteres.
C'est pour cela que j'ai utiliser la fonction RTrim qui supprime les espaces a droite dans une chaine.

Pour le nom de fichier pas de probleme il faut changer cette ligne
Code:
Fichier = Thisworkbook.Path & "\Appart.txt"

Comme ceci si le nom est en feuil1 cellule A1
Code:
Fichier = Feuil1.Range("A1").Value

Pour mettre sous le titre, il y a un peut plus de changement mais pas beaucoup, Pour prendre en compte le decalage pour la copie des données.

Joint la structure de ce que tu veux faire et j'adapterai.
(Ne t'inquiete pas si la reponse est moins rapide, j'ai des choses a faire ...)

++
Minick
 

maccprod

XLDnaute Junior
Re : interpreter le résultat d'une requête SQL dans excel

Alors là, je ne suis pas inquiet, car en faite je suis même impréssioné par la rapidité de tes réponses! je vais monter un fichier excel avec ce que j'ai imaginé et te le laisserai en post, moi aussi j'ai d'autres choses à faire, mais saches que j'ai fort apprécié cet échange, étant novice sur ce forum, je m'attendais plus ou moins, et je l'aurais fort bien compris a avoir des réponses, mais plus loin de le temps, donc je te remercie encore pour la rapidité de tes interventions,
cordialement,
 

maccprod

XLDnaute Junior
Re : interpreter le résultat d'une requête SQL dans excel

ci-joint le classeur final, une autre précision pour paramétrer tous ce qui est couleur de texte, couleur de fond etc, quels sont les commandes?
 

Pièces jointes

  • classeurfinal.xls
    10.5 KB · Affichages: 93
  • classeurfinal.xls
    10.5 KB · Affichages: 86
  • classeurfinal.xls
    10.5 KB · Affichages: 91

Minick

XLDnaute Impliqué
Re : interpreter le résultat d'une requête SQL dans excel

Re,

Voila le classeur adapté.
J'ai utiliser une variable DebTableau qui nous sert de reference pour la 1er cellule.

Pour la partie des bordures je n'ai pas commenté, fais F1 sur les mots clés
se sera plus simple.

++
Minick
 

Pièces jointes

  • Bâtiment la Belle Provence entrée 1.zip
    13.1 KB · Affichages: 49

Discussions similaires

Statistiques des forums

Discussions
312 194
Messages
2 086 070
Membres
103 110
dernier inscrit
Privé