Problème MultiColonne

R

Riri

Guest
Bonsoir le Forum,

Avec l'aide de Michel_M qui ma énormement aidé sur cette appli et je l'en remerci encore j'ai encore un petit problème . Au départ ma ListBox n'avait qu'une colonne je voudrais la transformer en 3 colonnes ( ou + ci cela est nécéssaire ). j'ai redéfini la plage mais ça ne fonctionne toujour pas .
En modifiant un peu le code les 3 colonnes de la feuille étaient réunis en une dans la ListBox donc ça ne fonctionne pas comme je le souhaiterais .

Un grand MERCI à tous ceux ou celles qui pourront me donner un petit coup de main .

Riri
 

Pièces jointes

  • Essais.zip
    29.3 KB · Affichages: 115
  • Essais.zip
    29.3 KB · Affichages: 113
  • Essais.zip
    29.3 KB · Affichages: 112
J

Jean-Jacques

Guest
Bonsoir Riri,

J'ai été voir sur le site de F.sigonneau et il précise :

'nécessite une référence aux librairies :
'- Microsoft ActiveX Data Objects 2.x Library
'- Microsoft ADO Ext.2.x for DDL and Security Library

Qui ne figurent aparemment pas dans ton projet.
Ceci vient peut être de cela.
Cordialement.
JJ
 
R

Riri

Guest
Bonsoir Jean-Jacques,

Ils n'apparaisse pas dans le projet , les références sont cocher dans :

(Outils | Réferences de l'éditeur VBE. x = dépend des versions d'Office)

- Microsoft ActiveX Data Objects 2.x Library
- Microsoft ADO Ext.2.x for DDL and Security Library
Sur les conseils de Michel_M

Donc j'ai cocher les deux références , mais je pense que cela doit venir du côde car pour une colonne ça fonctionne très bien je récupère bien la colonne dans la Listbox , mais pour 3 colonnes dans la feuille je ne récupère qu'une colonne dans la ListBox et moi je voudrais récupére les 3 .

Encore Merci pour ton aide

@ + Riri
 
M

michel

Guest
bonsoir Riri bonsoir Jean-Jacques

si j'ai bien compris ta demande pour obtenir une ListBox multicolonnes , tu peux tester l'adaptation ci dessous dans la procedure "Private Sub CbxFeuille_Change" :


Private Sub CbxFeuille_Change()
Dim source As ADODB.Connection
Dim requete As ADODB.Recordset
Dim onglet, zone As String
Dim X As Long
Dim Tableau()

LbxDonnees.Clear
ReDim Preserve Tableau(2, X)

onglet = Me.CbxFeuille.Value
zone = "A1:C30000"

Set source = New ADODB.Connection
source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & fichier & ";" & _
"extended properties=""Excel 8.0;"""
Set requete = New ADODB.Recordset
Set requete = source.Execute("SELECT * FROM `" & onglet & zone & "` WHERE nom <>"""";")
If requete.EOF Then ' astuce d'après @+Thierry xld
MsgBox "Plage vide..."
Exit Sub
End If

With requete
.MoveFirst
Do While Not .EOF

Tableau(0, X) = .Fields(0)
Tableau(1, X) = .Fields(1)
Tableau(2, X) = .Fields(2)

X = X + 1
ReDim Preserve Tableau(2, X)

.MoveNext
Loop
End With
requete.Close
source.Close

LbxDonnees.Column() = Tableau

End Sub


bonne soirée
MichelXld
 
M

Michel_M

Guest
Bonjour Riri, Jean Jacques, Michel et le forum

Un Michel relaie l'autre, c'est ce qui il y a de bien sympa sur ce forum; les Michel(s), bien sûr (lol), mais surtout le suivi des pb et l'apport de chacun; chacun amène sa petite pierre à l'édifice....

D'ailleurs, je vais essayer le truc des multicolonnes que je ne connaissais pas: heureusement, Riri, que tu l'avais oublié sur l'autre post !

Amicalement à tous les 3 et aussi au forum

Michel
 
R

Riri

Guest
Bonjour Michel , Michel_M , Jean Jacques , et le Forum

Tout d'abord merci Michel pour la modif qui fonctionne très bien .

Malheureusement j'ai constaté quelques erreurs en voulant changer le nom des feuilles par exemple . Exemple la feuille ( Classeur1 les autres aussi ) fonctionne mais si je la renome Classeur devis1 ça ne fonctionne plus le code ne reconnait pas les espace dans les feuilles . De plus en voulant changer les données dans les feuilles la aussi des erreurs surviennent tout en gardant la même zone de travail et pourtant je n'ai fait que changer les données ! Bizarre !!!

Ce qui m'étonne , l'appli t'elle qu'elle est fonctionne , mais dès que l'on modifie une donnée ou le nom d'une feuille là j'ai une erreur .

Ci vous pouviez me renseigner ça serai sympa

Encore MERCI pour votre aide

@ bientôt sur le Forum Riri
 
M

Michel_M

Guest
Re Riri, Jean jacques, Michel et le forum

En ce qui concerne les espaces dans les noms d'onglets, j'ai trouvé cette solution sur une demo de Robert Dezean sur Excelabo : "RD lecture données fichier fermé" à télécharger d'urgence pour ce genre de problème . Merci à lui.

For Each xlSheet In cat.Tables

nombrut = xlSheet.Name
'élimination des "$" d'après Robert Dezean/ Excelabo (merci)
If Right(nombrut, 1) = "$" Then
''' Les noms de feuille se terminent toujours par un "$"
nomcorrige = Left(nombrut, Len(nombrut) - 1)
ElseIf Right(nombrut, 2) = "$'" Then
''' sauf les noms de feuille avec des espaces (renvoyés entre apostrophes) -fs
nomcorrige = Mid(nombrut, 2, Len(nombrut) - 3)

' on remplit la liste déroulante des feuilles
Me.CbxFeuille.AddItem (nomcorrige)
End If
Next

Dans la macro cbxfeuillechange

La ligne devient
Set requete = source.Execute("SELECT * FROM `" & onglet & "$" & zone & "` WHERE nom <>"""";")

En ajoutant le dollar entre onglet et zone

Et d'un…

En ce qui concerne les noms de champs dans les feuilles, SQL a horreur des espaces comme par exemple: "date de naissance" il faut alors mettre ce champ entre guillemets du style
["date de naissance"]
si ton nom de champ comporte des apostrophes comme "d'icioulà"
il faut alors utiliser la fonction "replace"
noble="d'icioula"
replace(noble,"'","''")
2) param lire guillemet, apostrophe,guillemet
3° param lire guillemet, apostrophe, apostrophe, guillemet


Un autre truc que j'ai vu il faudrait réduire le nombre de listrow des combobox au nombre de classeurs: j'ai planté en cliquant sur une ligne vide du cbxclasseur.

N'hésites pas à redemander, Ce pb m'intéresse car j'y cherche, cogite et découvre…

Michel
 
M

Michel_M

Guest
Re

Petite étourderie, au lieu de:

' on remplit la liste déroulante des feuilles
Me.CbxFeuille.AddItem (nomcorrige)
End If

écrire:

End If
' on remplit la liste déroulante des feuilles
Me.CbxFeuille.AddItem (nomcorrige)


Michel
 
R

Riri

Guest
Bonsoir Michel_M ,

Je vois que tu est intérressé par se petit problème , moi aussi . Merci pour ton aide , c'est vraiment sympa de ta part , je vais tester les modifs et je te tiens au courrant du résultat .

Encore merci pour ton aide est ta recherche .

@ + sur le Forum Riri
 
J

Jean-Jacques

Guest
Bonsoir Riri, Michel, Michel et le forum,

J'arrive après la bagarre et je constate que vous avez super avancé.

Par contre moi j'en étais resté, juste avant de quitter mon PC, en rade au niveau de l'instruction :

source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & fichier & ";" & _
"extended properties=""Excel 8.0;"""

ou j'ai un message : "ADO n'a pu trouver le fournisseur spécifié"

d'ou l'objet de mon post .....d'hier à l'heure de l'apéro.

J'ai repris la main il y a deux heures et fais mes courses à droite et à gauche y compris sur la gestion d'erreur ADO chez microsoft et n'ai pas trouvé la réponse ( j'ai toujours droit au même message et n'ai pas la traduction).
J'ai enfin découvert le travail de michel_M sur le sujet ainsi que celui des ténors du forrum , c'était il y a peu de temps... mais n'ai pas détecté un début de piste.
Ma version d'excel est la 8.0a , ce qui m'a conduit à tester "source.Open.....Excel 8.0a;", mais sans plus de résultat.
Quelqu'un de vous a-t-il une explication ou une piste pour que je puisse voir ce que vous voyez tous...
Merci d'avance et bien cordialement.
JJ
 
M

Michel_M

Guest
Bonsoir Jean-Jacques, Riri, Michel

quelle version d'Excel possède tu ? les connections ADO n'ont jamais été testé avec XL2003 sur ce forum

j'ai coché
Microsoft ActiveX Data Objects 2.0 Library (et non 2.1)

mais je n'ai pas coché
Microsoft ADO Ext.2.x for DDL and Security Library

qui me parait inutile en mono-utilisateur (je dis bien qui me parait...)

J'en profite pour joindre mon boulot sur les noms d' onglets avec espace: j'ai changé interface en home-riri pour éviter les confusions de fichiers et il n'y a plus qu'un seul classeur le pb de la liste des classeurs étant résolu.

Enfin, petit rappel:La démo de Robert Dézean citée précédemment est très intéressante car pédagogique

A demain pour de nouvelles aventures

Michel
 

Pièces jointes

  • riri_v13nov.zip
    26.6 KB · Affichages: 83
J

Jean-Jacques

Guest
Bonjour Michel, Riri, Michel, et les Forumeurs dominicaux,

Je te remercie de tes explications Michel, toutefois la solution est ailleurs si elle n'est pas tout simplement dans une réinstal d’excel d’une version qui à fait ses preuves avec l’appel à ADO.
Aussitôt réveillé j'ai testé ton fichier et j'ai droit au sempiternel "ADO n'a pu trouver le fournisseur spécifié".
J'avais déjà essayé toutes les combinaisons de références incluant "Microsoft ADO Ext.2.x for DDL and Security Library" et n'avait pas obtenu de résultat.
La version d’excel est « 97 » - s’affiche à l’ouverture - et lorsque je fais MsgBox Application.Version, il me répond : « 8.0a » pour une réponse précise à ta question concernant la version.
Comme je l’explique dans mon précédent post j’ai fait une recherche sur « Microsoft.Jet.OLEDB.4.0 » qui m’a conduite dans différents forums très techniques et enfin sur celui de Microsoft…et n’ai rien trouvé de réellement explicite sur ce cas de figure...y compris des codes Microsoft de gestion d’erreur qui ne mènent nulle part….j’ai enfin fini sur excel download par ou je commence habituellement ou je suis tombé sur différents échanges (ou tu était déjà omniprésent) sur ce sujet.
J’ai aujourd’hui des appli qui fonctionnent très bien en ouverture / fermeture de fichiers y compris en réseau mais j’aimerai muter vers de l’échange fichiers fermés…et cela passe aussi par la réponse à ce blocage.
Sur ce un petit tour au marché avant de retrouver mon clavier pour peut être un nouvel épisode de "ADO et les versions rebelles"…..
Je vous souhaite à tous un bon dimanche .
JJ
 
M

michel

Guest
bonjour Riri , Jean-Jacques et Michel


Michel , merci pour toutes ces infos complémentaires

lors de mes tests , je n'avais modifié qu'une ligne dans le fichier d'origine de Riri , pour travailler sur des onglets contenant des espaces

onglet = Application.WorksheetFunction.Substitute(CbxFeuille.Value, "'", "")

sans toucher au reste de la procédure ( mais je n'ai peut etre pas testé tous les cas de figure )


Jean-Jacques , je viens de tester les classeurs avec Excel97 ( version 8.0a ) & Win98
et tout fonctionne bien , sans message d'erreur


bon dimanche
MichelXld
 
R

Riri

Guest
Bonjour Michel_M , Michel , Jean Jacques et le Forum ,

Merci à vous , vous avez fait un remarquable boulot et je tiens à vous féliciter .
Je viens de tester la dernière version de Michel_M , tous fonctionne très bien , l'alimentation des comboBox se déroulent sans problème , plus d'erreur de ce coté là , le problème des espace est résolu.

Par contre en ajoutant un classeur supplémentaire il apparait bien dans la liste ainsi que ses feuilles , mais lorsque je sélectionne une feuille de ce classeur voici le message d'erreur que j'obtient .
-Aucune valeur donnée pour un ou plusieurs paramètres requis.
-Erreur d'execution '-2147217904 ( 80040 e 10 ) ' :

Fichier joint avec le classeur supplémentaire.

Bon Dimanche à vous , je reste à l'écoute de ce post qui m'intérresse beaucoup .

Riri
 

Pièces jointes

  • home_riri.zip
    31.7 KB · Affichages: 100

Discussions similaires

Réponses
24
Affichages
2 K

Statistiques des forums

Discussions
312 166
Messages
2 085 885
Membres
103 018
dernier inscrit
mohcen23