ADOX CATALOG lister noms feuilles sans $

Regueiro

XLDnaute Impliqué
Bonjour à tous
j'aimerais lister les noms de feuilles d'un classeur xlsm masquée.
Mais sans les $ uniquement les noms de feuilles.
je vous joint mes fichiers.

Aller dans le fichier Prog Devis, dans la feuille ART.001 double click en E19
et l'userfom s'ouvre.
Il liste bien les feuilles du fichier fermé mais
Comment supprimer ces $
Merci de votre Aide.
 

Fichiers joints

G

Guest

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Bonjour,

Je n'ai pas pu faire tourner ton application à cause d'un manque de bibliothèque. Mais

Code:
Me.ComboBox1.AddItem replace(xlSheet.Name,"$","")
devrait le faire.


A+
 

Regueiro

XLDnaute Impliqué
Re : ADOX CATALOG lister noms feuilles sans $

Bonjour Hasco
ton Code enlève bien les $.
Mais je crois que c'est un autre problème.
Avec mon code il trouve également les plages nommées, les noms des feuilles ainsi que des fichiers
de type *_xlnm#Print.
Je regarde encore sur le net si je trouve une explication.
Merci
a+
 
G

Guest

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Re,

Normalement, chaque table à une propriété "Table_Type" qui te dira si c'est une table système ou non.

Ajoute un espion sur ta variable xlSheet et tu verras les propriétés que tu peux distinguer, tu verras que les plages nommées n'ont pas de $ et les feuille si.

A+
 
Dernière édition par un modérateur:

Regueiro

XLDnaute Impliqué
Re : ADOX CATALOG lister noms feuilles sans $

Bonjour Hasco
Merci de ta réponse mais je ne comprends pas ce que tu veux dire.
Par contre si je mais ce code :
Code:
Private Sub UserForm_Initialize()
  'Microsoft ActiveX Data Object 2.8 doit être activé
  Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  Set cat = CreateObject("ADOX.Catalog")
  répertoire = "C:\0. PROGRAMME JRE\BDD DIVERS 2012\"
  'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  'répertoire = ThisWorkbook.Path & "\"
  'formule valable si dans le même répertoire
  'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  fichier = "BDD MSIT 2012.xlsm"
  cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & répertoire & fichier & ";Extended Properties='Excel 12.0;HDR=Yes'"
  Set cat.ActiveConnection = cnn
    '11111
    'For Each xlSheet In cat.Tables
    'Me.ComboBox1.AddItem Replace(xlSheet.Name, "$", "")
    '1111
    
    '22222
    'For Each xlSheet In cat.Tables
    'Me.ComboBox1.AddItem xlSheet.Name
    '22222
    
    'xxxx
   [COLOR="#FF0000"] Dim ws As Worksheet[/COLOR]
    'Dim Worksheets As fichier
   [COLOR="#FF0000"] For Each ws In Worksheets
    Me.ComboBox1.AddItem ws.Name[/COLOR]
    'xxx
    Next
    For i = 1 To 5
        If i = 1 Then largeur = 120 Else largeur = 200
        Me("ListView" & i).ColumnHeaders.Add , , "niveau" & i, largeur
        Me("ListView" & i).Gridlines = True
        Me("ListView" & i).View = lvwReport
    Next
    Me.Label1.Visible = False
    'cnn.Close
    'cat.Close
    Set cnn = Nothing
    Set cat = Nothing
    SendKeys "(F4)"
End Sub
Avec ce code il liste que les feuilles mais de mon classeur Prog Devis.
Quel code je pourrais mettre pour lui dire que Worksheets = fichier = "BDD MSIT 2012.xlsm"
MErci de ton aide
A+
 

Regueiro

XLDnaute Impliqué
Re : ADOX CATALOG lister noms feuilles sans $

Bonsoir à Tous
Quelqu'un pourrait me donner un coupe de main pour ce problème.
j'ai parcouru le web mais je n'ai rien trouver
Merci.
A+
 
G

Guest

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Bonjour,

Je t'ai répondu, mais tu n'as pas appliqué visiblement ce que je t'avais donné.

Dernière intervention:
voici une boucle qui liste les feuilles dans une combobox
Je l'ai testé dans un nouvel exemple que j'ai du refaire un exemple car le tient plante ma machine.

Code:
 Private Sub UserForm_Initialize()
    Dim cnx As New ADODB.Connection, cat As New ADOX.Catalog
    Dim xlsheet As Variant
    Dim fichier As String
    fichier = ThisWorkbook.Path & "\Prog Devis V01.11 _ USF.xlsm"
    cnx.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fichier & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";")
    cat.ActiveConnection = cnx
    For Each xlsheet In cat.Tables
        If Right(xlsheet.Name, 1) = "$" Then ComboBox1.AddItem Replace(Replace(xlsheet.Name, "$", ""), "#", ".")
    Next
    Set cat = Nothing
    cnx.Close
    Set cnx = Nothing
End Sub
A+
 

Regueiro

XLDnaute Impliqué
Re : ADOX CATALOG lister noms feuilles sans $

Bonsoir à tous + Hasco
Merci pour ton code.
J'ai essayé, il met un message "Erreur d'exécution '424': objet requis
il bloque avant
Cat.ActiveConnection = cnx

Message : Variable objet ou variable de block With non définie.
Merci.
A+
 
G

Guest

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Re,

Je viens de réessayer et je ne vois pas ce qui cloche. Je ne peux pas le faire directement sur ton fichier d'origine, je t'ai dit qu'il plantait ma machine.

A toi de voir quelle variable objet est = nothing. Affichage Fenêtre variable locales

A+
 
Dernière édition par un modérateur:

Regueiro

XLDnaute Impliqué
Re : ADOX CATALOG lister noms feuilles sans $

Re Bonsoir à tous
HASCO j'ai adapter mon code avec tes précieuses explications.
HTML:
Dim L As Long
Dim NomF As String
Private Sub UserForm_Initialize()
  'XXXXXXX IMPORTANT POUR QUE LE PROGRAMME FONCTIONNE XXXXXXXXXXX
  'Outils - Référence - Activé
  'Microsoft ActiveX Data Object 2.8 Library
  'Microsoft ADO Ext 6.0 for DDL and Security
  'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Dim cnn
Dim cat
Dim xlSheet As Variant
Dim répertoire
Dim fichier As String
'Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  Set cat = CreateObject("ADOX.Catalog")
  répertoire = "C:\0. PROGRAMME JRE\BDD DIVERS 2012\"
  fichier = "BDD MSIT 2012.xlsm"
  cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & répertoire & fichier & ";Extended Properties='Excel 12.0;HDR=Yes'"
  Set cat.ActiveConnection = cnn

    For Each xlSheet In cat.Tables
    If Right(xlSheet.Name, 1) = "$" Then ComboBox1.AddItem Replace(Replace(xlSheet.Name, "$", ""), "#", ".")
    Next
    
    For i = 1 To 5
        If i = 1 Then largeur = 120 Else largeur = 200
        Me("ListView" & i).ColumnHeaders.Add , , "niveau" & i, largeur
        Me("ListView" & i).Gridlines = True
        Me("ListView" & i).View = lvwReport
    Next
    Me.Label1.Visible = False
    Set cnn = Nothing
    Set cat = Nothing
    SendKeys "(F4)"
End Sub

Private Sub ComboBox1_Change()
    If Me.ComboBox1 <> "" Then
        NomF = Me.ComboBox1.Value
        For i = 1 To 5
            Me("ListView" & i).ListItems.Clear
        Next
       [COLOR="#FF0000"] Worksheets(NomF).Range("D6:Q77").Name = "BD"[/COLOR]        For Each C In Application.Index([bd], , 1)
            If C <> "" Then
                Me.ListView1.ListItems.Add , , C & " - " & C.Offset(, 6)
            End If
        Next
        Me.ListView1.ListItems(1).Selected = False
        Set Me.ListView1.SelectedItem = Nothing
        For i = 1 To Me.ListView1.ListItems.Count
            If i Mod 2 = 0 Then
                Me.ListView1.ListItems(i).ForeColor = &H8000&   ' &HFF0000   'bleu &H8000&    'vert
                Me.ListView1.ListItems(i).Bold = True
            End If
        Next
    End If
End Sub
Et le code marche. Merci
Par contre j'ai un bug un peu plus loin. En rouge
dois-je remmettre toute la procédure c'est-à-dire :

HTML:
  Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & répertoire & fichier & ";Extended Properties='Excel 12.0;HDR=Yes'"
Merci de votre Aide
 

Regueiro

XLDnaute Impliqué
Re : ADOX CATALOG lister noms feuilles sans $

Bojour à Tous
J'aurais besoin de votre aide pour la suite de mon code.
Je dois alimenter ma Listview1 d'après le contenu de ma combobox1.
Attention avec ADO et ADOX Catalogue.
J'ai vus quelque chose sur le site de Boisgontier mais je n'arrive pas à l'applique à mon code.
MErci
 
G

Guest

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Bonjour,

Je ne peux pas t'aider d'avantage, n'ayant pas accès à ton fichier.

A+
 

Regueiro

XLDnaute Impliqué
Re : ADOX CATALOG lister noms feuilles sans $

Bonjour HASCO
Comment ? je peux te le transmettre en Fichiers attachés ou ta ta boîte perso.
Je suis sur Excel 2010
'XXXXXXX IMPORTANT POUR QUE LE PROGRAMME FONCTIONNE XXXXXXXXXXX
'Outils - Référence - Activé
'Microsoft ActiveX Data Object 2.8 Library
'Microsoft ADO Ext 6.0 for DDL and Security
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Autrement dommage
J'aurais aimé continuer ce projet avec vous.
Merci.
A+
 
G

Guest

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Re,

Même en ayant les bonnes références cochées, il plante ma machine.

A+
 

Fo_rum

XLDnaute Accro
Re : ADOX CATALOG lister noms feuilles sans $

Bonjour,

le problème de l'erreur vient de ce que tu initialises la liste déroulante avec des noms de feuilles d'un autre classeur (BDD MSIT 2012.xlsm). donc tu ne peux pas les ouvrir dans celui de la macro.

Sinon je serais plutôt passé par
Code:
...
fichier = "BDD MSIT 2012.xlsm"
  cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & répertoire & fichier & ";Extended Properties='Excel 12.0;HDR=Yes'"
  Set cat.ActiveConnection = cnn
  For Each xlSheet In cat.Tables
    Dim nom As String
    If InStr(xlSheet.Name, "$") = 0 Then
      nom = xlSheet.Name
    Else
      nom = Left(xlSheet.Name, InStr(xlSheet.Name, "$") - 1)
    End If
    ComboBox1 = nom
    If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem nom
   Next
pour Hasco : j'ai eu accès au code en décochant la référence manquante dans Outils --> Référence
 
Dernière édition:
G

Guest

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Re,

Bonjour Fo_rum,:D

s'il passe par là:
If InStr(xlSheet.Name, "$") = 0 Then
nom = xlSheet.Name
Else
nom = Left(xlSheet.Name, InStr(xlSheet.Name, "$") - 1)
End If
Il aura aussi les plage nommées et plage système comme les plage d'impression dans ces listes, et je crois (voir posts précédents) qu'il n'en veut pas.

A+
 

Fo_rum

XLDnaute Accro
Re : ADOX CATALOG lister noms feuilles sans $

Re:)


Re,
...s'il passe par là:...

Il aura aussi les plage nommées et plage système comme les plage d'impression dans ces listes...

A+
je ne retiens que la partie avant le $ donc cela devrait exclure les plages dont tu parles non ?
 
G

Guest

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Re,

Dans
Code:
 For Each xlSheet In cat.Tables
Dim nom As String
If InStr(xlSheet.Name, "$") = 0 Then
nom = xlSheet.Name
Else
nom = Left(xlSheet.Name, InStr(xlSheet.Name, "$") - 1)
End If
ComboBox1 = nom
If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem nom
Next
Tu prends tout. Que le nom contienne $ ou pas. tu enlèves juste le $ des tables Feuilles mais les autres tu les acceptes.

D'ailleurs pour les tables Feuilles (avec $ final) un simple:
If right(xlSheet.Name,1)="$" then Nom = Left(Right(xlSheet.Name),Len(xlSheet.Name)-1) suffirait.

Si j'avais mis des "Replace" c'est qu'il nomme parfois ces feuilles avec des points au milieu des noms. Ces points sont remplacer par des dièses( '#' )par le moteur ADO donc pour restituer le nom d'origine, il faut remplacer les dièses par des points et les $ par des "".

A+
 

Regueiro

XLDnaute Impliqué
Re : ADOX CATALOG lister noms feuilles sans $

Bonjour à tous + HASCO + Fo_rum
Je vais revenir par là.
Mais je suis actuellement au Boulot ( travail en français )
Je regarde ça ce soir.
Merci d'avance
 

Regueiro

XLDnaute Impliqué
Re : ADOX CATALOG lister noms feuilles sans $

Re
J'ai mis le code de HASCO dans mon fichier.
Mais il plante toujours sur ComboBox1_Change
Je n'arrive pas alimenter mon Listview1 d'après le choix dans ComboBox1.
J'ai vraiment besoin de votre aide.
MErci
 

Discussions similaires


Haut Bas