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.
 

Pièces jointes

  • Prog Devis V01.11 _ USF.zip
    946.8 KB · Affichages: 147

Regueiro

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

Bonjour le Forum, BrunoM45 et ChTi160
Je vous remercie pour le code.
Le code de ChTi160
If Col = 5 Then
' Inscrire les Quantité et le P.U.
.ListItems(.ListItems.Count).ListSubItems.Add , , IIf(IsNull(Rs.Fields(7)), "-", Rs.Fields(7))

Set LstSItem = .ListItems(.ListItems.Count).ListSubItems.Add(, , IIf(IsNull(Rs.Fields(8)), 0,Rs.Fields(8)))

With LstSItem 'avec ce ListSubitem ajouté
.ForeColor = vbRed 'je colore son texte en rouge
End With
Enf If
.MoveNext
Loop
.Close
End With

il mets un message erreur " Boucle sans Do "
Alors que j'ai Bien Do While Not . Eof
Je vois pas ou est l'erreur.
Merci de votre Aide.
A+
 
C

Compte Supprimé 979

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Salut Regueiro

Je ne comprends pas que tu n'arrives pas à analyser le code que l'on te donne :confused: :rolleyes:

Voici la sub en entier
VB:
Sub Liste(Col As Integer)
  Dim X As String, I As Long
  Dim sSQL As String, sField As Variant, sLVprev As String
  Dim LstSItem As ListSubItem
  ' Effacer la Listview concernée avant
  Me("Listview" & CStr(Col)).ListItems.Clear
  ' Ouverture de la BdD via ADO
  Call OuvertureBdD
  '
  ' Valeur sélectionnée de la ListView précédente
  sLVprev = Me("ListView" & Col - 1).SelectedItem
  sLVprev = Left(sLVprev, InStr(1, sLVprev, " -") - 1)
  ' Préparer la requête
  sSQL = "SELECT * FROM BD" & Me.ComboBox1
  Set Rs = New ADODB.Recordset
  With Rs
    .Open sSQL, Cnn, adOpenStatic
    Do While Not .EOF
      ' Mémoriser le contenu du champ n° col-1
      sField = Rs.Fields(Col - 1).Value
      ' Si le champ n'est pas vide
      If sField <> "" Then
        ' Si le début de la partie numérique du champ = la partie numérique de la ListView précédente
        If Left(sField, Len(sLVprev)) = sLVprev Then
          ' Inscrire les valeurs dans la nouvelle ListView
          With Me("ListView" & Col)
            .ListItems.Add , , Rs.Fields(Col - 1) & " - " & Rs.Fields(6)
            ' S'il s'agit de la 5ème ListView
            If Col = 5 Then
              ' Inscrire les Quantité et le P.U.
              .ListItems(.ListItems.Count).ListSubItems.Add , , IIf(IsNull(Rs.Fields(7)), "-", Rs.Fields(7))
              Set LstSItem = .ListItems(.ListItems.Count).ListSubItems.Add(, , IIf(IsNull(Rs.Fields(8)), 0, Rs.Fields(8)))
              LstSItem.ForeColor = vbRed 'je colore son texte en rouge
            End If
          End With
        End If
      End If
      .MoveNext
    Loop
    .Close
  End With
  ' Fermeture de la Bdd
  Cnn.Close
  Set Rs = Nothing
  Set Cnn = Nothing


  If Me("Listview" & CStr(Col)).ListItems.Count > 0 Then
    Me.Label1.Visible = False
    Me("Listview" & CStr(Col)).ListItems(1).Selected = False
    Set Me("Listview" & CStr(Col)).SelectedItem = Nothing
    For I = 1 To Me("Listview" & CStr(Col)).ListItems.Count
      If I Mod 2 = 0 Then
        Me("Listview" & CStr(Col)).ListItems(I).ForeColor = &H8000&   ' &HFF0000  'bleu &H8000&    'vert
        Me("Listview" & CStr(Col)).ListItems(I).Bold = True
      End If
    Next
  Else
    Me.Label1.Visible = True
    Me.Label1.Caption = "Pas de données"
  End If
End Sub

A+
 

ChTi160

XLDnaute Barbatruc
Re : ADOX CATALOG lister noms feuilles sans $

Bonsoir le Fil
Bruno
peux tu me dire comment on fait pour mettre en couleur les commentaires par exemple dans le code avec quelles balises (mode avancé etc )Lol
Merci par avance
Amicalement
Jean Marie
 

Regueiro

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

Bonjour le Forum - Bruno et ChTi160
Je vous remercie pour vos Infos
Voici le code exact qui marche

Code:
Sub Liste(Col As Integer)
  Dim X As String, I As Long
  Dim sSQL As String, sField As Variant, sLVprev As String
  Dim LstSItem As ListSubItem
  ' Effacer la Listview concernée avant
  Me("Listview" & CStr(Col)).ListItems.Clear
  ' Ouverture de la BdD via ADO
  Call OuvertureBdD
  '
  ' Valeur sélectionnée de la ListView précédente
  sLVprev = Me("ListView" & Col - 1).SelectedItem
  sLVprev = Left(sLVprev, InStr(1, sLVprev, " -") - 1)
  ' Préparer la requête
  sSQL = "SELECT * FROM BD" & Me.ComboBox1
  Set Rs = New ADODB.Recordset
  With Rs
    .Open sSQL, Cnn, adOpenStatic
    Do While Not .EOF
      ' Mémoriser le contenu du champ n° col-1
      sField = Rs.Fields(Col - 1).Value
      ' Si le champ n'est pas vide
      If sField <> "" Then
        ' Si le début de la partie numérique du champ = la partie numérique de la ListView précédente
            If Left(sField, Len(sLVprev)) = sLVprev Then
            ' Inscrire les valeurs dans la nouvelle ListView
                With Me("ListView" & Col)
                .ListItems.Add , , Rs.Fields(Col - 1) & " - " & Rs.Fields(6)
                ' S'il s'agit de la 5ème ListView
                    If Col = 5 Then
                        ' Inscrire les Quantité et le P.U.
                        .ListItems(.ListItems.Count).ListSubItems.Add , , IIf(IsNull(Rs.Fields(7)), "-", Rs.Fields(7))
                        Set LstSItem = .ListItems(.ListItems.Count).ListSubItems.Add(, , IIf(IsNull(Rs.Fields(8)), 0, Rs.Fields(8)))
                        With LstSItem   'avec ce ListSubItem ajouté
                        .ForeColor = vbRed  'on colorie le texte en rouge
                        .Bold = True
                        End With
                    End If
                End With
            End If
        End If
    .MoveNext
  Loop
    .Close
  End With
  ' Fermeture de la Bdd
  Cnn.Close
  Set Rs = Nothing
  Set Cnn = Nothing

  If Me("Listview" & CStr(Col)).ListItems.Count > 0 Then
    Me.Label1.Visible = False
    Me("Listview" & CStr(Col)).ListItems(1).Selected = False
    Set Me("Listview" & CStr(Col)).SelectedItem = Nothing
    For I = 1 To Me("Listview" & CStr(Col)).ListItems.Count
      If I Mod 2 = 0 Then
        Me("Listview" & CStr(Col)).ListItems(I).ForeColor = &H8000&   ' &HFF0000  'bleu &H8000&    'vert
        Me("Listview" & CStr(Col)).ListItems(I).Bold = True
      End If
    Next
  Else
    Me.Label1.Visible = True
    Me.Label1.Caption = "Pas de données"
  End If
End Sub
Pour info BrunoM45
Ton code colorie 1 ligne sur 2 en rouge.
Le code de ChTi160 est correct mais j'avais oublié un End If
 

Regueiro

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

Bonsoir Le Forum - BrunoM45 et ChTi160
Après quelques jours d'absence je reprends la main sur mon programme.
J'aurais encore besoin de votre aide pour le finaliser.

1. A l'ouverture du fichier, j'ai un USFACCUEIL qui s'ouvre en plein écran.
Il masque excel, normalement ?
Avec ce code ci-dessous à chaque ouverture je vois apparaitre excel et après
quelques secondes USFACCUEIL en plein, écran.
Quel est le code exact pour ne pas voir apparaître Excel.
Pour info toutes les feuilles du classeur sont masquées.
Fichier - Options Excel - Options avancées - Décocher Afficher les onglets de classeur ( Excel 2010 )

2. Dans le USFACCUEIL j'ai un navigateur de programme.
Dans l'onglet " Soumission" je crée mes noms d'onglets d'après les élements en colonne " E "
Ensuite je click sur le bouton Création d'onglets et les nouveaux onglets sont crés d'après
Il copie le fichier " ART.0_Base " qui est le modèle.
J'ai quelques problèmes avec mon code.
Il modifie l'onglet "ART.0_Base " en celluel E8 ?
Le code contrôle s'il existe déjà un onglet avec le même nom et il bug toujours ave les doublons
sur l'onglet "Soumission"

Je vous mais mon fichier en PJ.
PS. j'ai fait quelques améliorations dans avec mon USERFORM1 qui se trouve sur l'onglet "ART.0_Base "
Pour info à Bruno le fichier "BDD MSIT 2012.xlsx" est toujours le fichier source.
Merci de votre aide
A+
 

Pièces jointes

  • Prog Devis V09 _ USF.zip
    960.3 KB · Affichages: 106
C

Compte Supprimé 979

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Bonjour Regueiro,

J'aurais encore besoin de votre aide pour le finaliser.
1. A l'ouverture du fichier, j'ai un USFACCUEIL qui s'ouvre en plein écran.
Il masque excel, normalement ?
Avec ce code ci-dessous à chaque ouverture je vois apparaitre excel et après
quelques secondes USFACCUEIL en plein, écran.
Quel est le code exact pour ne pas voir apparaître Excel.
Pour info toutes les feuilles du classeur sont masquées.
Fichier - Options Excel - Options avancées - Décocher Afficher les onglets de classeur ( Excel 2010 )
Désolé, pour toi mais tu n'as pas de code pour ne pas voir Excel au démarrage
A part si tu lances l'ouverture du fichier d'une autre macro, avec une instance d'Excel masquée

2. Dans le USFACCUEIL j'ai un navigateur de programme.
Dans l'onglet " Soumission" je crée mes noms d'onglets d'après les élements en colonne " E "
Ensuite je click sur le bouton Création d'onglets et les nouveaux onglets sont crés d'après
Il copie le fichier " ART.0_Base " qui est le modèle.
J'ai quelques problèmes avec mon code.
Il modifie l'onglet "ART.0_Base " en celluel E8 ?
Normal, c'est codé comme ça !?
Si tu ne veux plus avoir ce problème il va falloir modifier ton code comme suit

VB:
Sub Création_Automatique_des_Onglets()
  ' Adaptée d'une macro de Charlize
  ' Modifée par BrunoM45
  Dim Modele As Worksheet, NewSheet As Worksheet
  Dim base_maquette As Worksheet
  Dim newSheetName As String
  Dim myRng As Range
  Dim myCell As Range
  Dim iCtr As Long
  Dim Ref_CELLULES As Variant
  Dim Test As String
  ' Définir les variables objet
  Set Modele = Worksheets("ART.0_BASE")
  Set base_maquette = Worksheets("Soumission")


  Ref_CELLULES = Array("E8", "F8", "G8", "H8")
  'Application.ScreenUpdating = False
  With base_maquette
    Set myRng = .Range("E8", .Cells(.Rows.Count, "E").End(xlUp))
  End With
  For Each myCell In myRng.Cells
    'With myCell
    'newSheetName = Modele.Range("A1")
    ' Définir le nom
    newSheetName = "ART." & Format(CInt(myCell.Value), "000")
    ' Tester si le classeur existe en récuperant la valeur d'une cellule
    On Error Resume Next
    Test = Sheets(newSheetName).Range("E8")
    ' Si le numéro d'erreur est différend de 0, c'est que la feuille n'existe pas
    If Err.Number <> 0 Then
      ' On fait une copie du modèle
      Modele.Copy After:=Worksheets(Worksheets.Count)
      ' On renomme la copie
      ActiveSheet.Name = newSheetName
      ' On attibue les valeurs dans cette feuille
      For iCtr = LBound(Ref_CELLULES) To UBound(Ref_CELLULES)
        ActiveSheet.Range(Ref_CELLULES(iCtr)).Value = newSheetName
      Next iCtr
    End If
  Next myCell
  Application.ScreenUpdating = True
  ' Il faut peut-être penser à effacer les variables objet
  Set Modele = Nothing
  Set base_maquette = Nothing
  Set myRng = Nothing
End Sub

A+
 

Regueiro

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

Bonjour le Forum et BrunoM45
Je vois que tu travaille très tard ?
Merci pour ta réponse.
J'ai modifier quelques lignes.

Ton code
' Définir le nom
newSheetName = "ART." & Format(CInt(myCell.Value), "000")
Nouveau code
' Définir le nom, Copie la valeur texte de la cellule
newSheetName = "ART." & (myCell.Value)
Ainsi si je mets des formats quelconque cela marche.
Exemple : 001.002 = ART.001.002
Exemple : 00a.A13 = ART.00a.A13
Pour l'instant cela à l'air de marcher et également pour les doublons.

2. Il y une erreur dans ton code
' On attibue les valeurs dans cette feuille
For iCtr = LBound(Ref_CELLULES) To UBound(Ref_CELLULES)
ActiveSheet.Range(Ref_CELLULES(iCtr)).Value = newSheetName
Next iCtr
Avec ton code il inscrit à chaque fois le nom de la feuille sur les cellules "E8", "F8", "G8", "H8"

Nouveau Code
' On attribue les valeurs dans cette feuille
For iCtr = LBound(Ref_CELLULES) To UBound(Ref_CELLULES)
ActiveSheet.Range(Ref_CELLULES(iCtr)).Value = myCell.Offset(0, iCtr).Value
Next iCtr

Concernant
BrunoM45
Re : ADOX CATALOG lister noms feuilles sans $

Bonjour Regueiro,


Envoyé par Regueiro
J'aurais encore besoin de votre aide pour le finaliser.
1. A l'ouverture du fichier, j'ai un USFACCUEIL qui s'ouvre en plein écran.
Il masque excel, normalement ?
Avec ce code ci-dessous à chaque ouverture je vois apparaitre excel et après
quelques secondes USFACCUEIL en plein, écran.
Quel est le code exact pour ne pas voir apparaître Excel.
Pour info toutes les feuilles du classeur sont masquées.
Fichier - Options Excel - Options avancées - Décocher Afficher les onglets de classeur ( Excel 2010 )


Désolé, pour toi mais tu n'as pas de code pour ne pas voir Excel au démarrage
A part si tu lances l'ouverture du fichier d'une autre macro, avec une instance d'Excel masquée

Désolé pour moi :mad: quel code dois-je mettre pour que cela fonctionne.
Merci encore de ta précieuse aide.
Au plaisir de te relire.
A+
 

Regueiro

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

Bonsoir le Forum
Je voudrais remercier BrunoM45 - Hasco - Forum
Merci beaucoup encore pour votre aide.
Je vous rejoint après quelques jours de vacances.
Mon programme a un peu évoluer et j'aurais besoin de votre aide.

1. Problème de trie dans l'onglet 0.Récap
J'introduis les prix unitaires en Colonne I
Mais lorsque je saisis un nouvel article
Le prix unitaire ne reste pas avec l'article ???

2. Problème lors de la saisie dans Userform
Si je saisie à l'intérieur des ListView à côté des données
il mets un message erreur
Comment interdire cette selection.

3. Après la validation dans UserForm
La cellule reste bloquée ??


Je vous joint mon fichier.
Le fichier BDD MSIT 2012 est toujours le même.
Je peux vous le transmettre si vous ne l'avez plus

Free - Envoyez vos documents

PS : Dois-je fermer cette discussion et reprendre une nouvelle

Merci A+
 
C

Compte Supprimé 979

Guest
Re : ADOX CATALOG lister noms feuilles sans $

Bonsoir Regueiro (ou peut-être bonjour, quand tu liras ce fil)

Problème 1, réponse : du code du bouton valider, tu as mis en commentaire la ligne
Code:
Range("H" & Lig) = Me.ListView5.ListItems(Ind).ListSubItems(2).Text
Pourquoi !? il ne faut pas :rolleyes:

Problème 2, réponse : il faut interdire l'édition de la ListView, pour ça j'ai ajouté dans
Code:
Private Sub UserForm_Initialize()
....
.LabelEdit = lvwManual
.LabelWrap = False

Problème 3, réponse : normal tu laisse le formulaire actif, donc quand tu cliques sur le bouton "Valider"
le focus reste sur l'Userform, j'ai réactivé le
Code:
Unload Me

J'ai également définit les variables Répertoire et Fichier en tant que constante, plus facile à modifier par la suite ;)

Le lien vers le fichier : Ce lien n'existe plus

Voili, voilà
 
Dernière modification par un modérateur:

Regueiro

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

Salut Bruno
Pour la question N°1
En effet je l'ai mis en commentaire.
Car je fais des essais
Admettons que je prenne les prix unitaires de ma BDD ok
Mais si ce prix n'est plus d'actualité par exemple, j'aimerais pouvoir le modifier.
C'est pour cela que je veux gérer mes prix unitaires sur mon onglet 0.Récap
Ou bien si tu as une idée je suis preneur.
Par exemple pouvoir choisir le prix selon la BDD ou sur une colonne supplémentaire rajouter le prix actuel
et dire si nouveau prix en colonne x prendre ce prix unitaire.

Pour info ton lien ne marche chez moi.

Merci
A+
 

Regueiro

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

Bonjour le Forum
Salut BrunoM45
Merci pour tes réponses et le nouveau Lien est Ok
J'aimerais gérer les Prix Unitaires dans ce programme, pas dans la BDD.
Car dans notre métier les prix sont très fluctuant ( prix de l'acier )
Je vais si j'arrive trouver une solution.
En fait dans mon fichier cela marche par contre c'est le problème du tri ?
Je ne sais pas si tu aurrais une idée ?
Merci
A+
 

Discussions similaires

Statistiques des forums

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