If sous repertoire contient

Résolu
yanndebretagn Messages postés 104 Statut Membre -  
yanndebretagn Messages postés 104 Statut Membre -
re le fofo,

Je cherche à faire :
Savoir si dans le dossier C :\Users\MOI\Documents\ENTREPRISE\devis\XYZ \devis n°19123001 monsieur PATATE PARIS CONTIENT 19123001
True
False

SACHANT QUE XYZ PEU ETRE TOUT ET N’IMPORTE QUOI genre YZX
help me

25 réponses

yanndebretagn Messages postés 104 Statut Membre 2
 
bonjour patrice,
ben non, imaginons que nom_prénom soit en B4
B4 concerne qu'un nouveau client donc
nomPrenom = Worksheets("renseignement client").Range("B4").Value
ce n'est pas bon
imaginons que je fais un devis le 04/01/2020 pour monsieur patate qui habite paris
le devis sera enregistré dans
C :\Users\MOI\Documents\ENTREPRISE\devis\patate jean-luc\devis n°20010401 monsieur PATATE PARIS
si c'est le premier devis de la journée
pour le 2ème pour monsieur tartempion qui habite Marseille
le devis sera enregistré dans
C :\Users\MOI\Documents\ENTREPRISE\devis\tartempion jean-marie\devis n°20010402 monsieur PATATE Marseille

je ne c pas si c très claire...
0
Patrice33740 Messages postés 8930 Statut Membre 1 781
 
Oui, c'est plus clair (avec toujours la même formule en B22) :

Option Explicit
Sub Test()
Dim n°devis As String
  
  n°devis = NumeroDevis
  MsgBox n°devis
  
End Sub

Private Function NumeroDevis() As String
Dim dossier As String
Dim sousDos As String
Dim nomPrenom As String
Dim cherche As String
Dim n°devis As Integer
Dim maximum As Integer
Dim t() As String
Dim i As Long

  Application.Volatile
  dossier = "C :\Users\MOI\Documents\ENTREPRISE\devis\"
  dossier = ThisWorkbook.Path & "\Tmp\"
  sousDos = Dir(dossier, vbDirectory)
  Do While sousDos <> ""
    If sousDos <> "." And sousDos <> ".." Then
      If (GetAttr(dossier & sousDos) And vbDirectory) = vbDirectory Then
        i = i + 1
        ReDim Preserve t(1 To i)
        t(i) = dossier & sousDos & "\"
      End If
    End If
    sousDos = Dir
  Loop
  cherche = Format(Date, "yymmdd")
  For i = LBound(t) To UBound(t)
    sousDos = Dir(t(i), vbDirectory)
    Do While sousDos <> ""
      If sousDos <> "." And sousDos <> ".." Then
        If (GetAttr(t(i) & sousDos) And vbDirectory) = vbDirectory Then
          If sousDos Like "*" & cherche & "??*" Then
            n°devis = Val(Left(Mid(sousDos, InStr(1, sousDos, cherche) + Len(cherche)), 2))
            If n°devis > maximum Then maximum = n°devis
          End If
        End If
      End If
      sousDos = Dir
    Loop
  Next
  NumeroDevis = cherche & Format(maximum + 1, "00")

End Function
0
yanndebretagn Messages postés 104 Statut Membre 2
 
l'indice n’appartient pas a la sélection ligne:
For i = LBound(t) To UBound(t)
0
f894009 Messages postés 17414 Date d'inscription   Statut Membre Dernière intervention   1 715
 
Bonjour a vous deux,

Ben, c'est ok chez moi!!

Z'ete sur d'avoir tout dit???

Pouvez mettre votre fichier a dispo pour voir??
0
Patrice33740 Messages postés 8930 Statut Membre 1 781
 
Bonjour,

Effectivement, c'est quand il n'y a aucun sous dossier enregistré (aucun client).
Ajoutes :
  ReDim t(1 To 1)

Après la ligne 20 :
  Application.Volatile
ReDim t(1 To 1)
0
yanndebretagn Messages postés 104 Statut Membre 2
 
bonjour,
tjrs pas
la textbox ce lance avec 20010501 marqué dedans qu'il est ou pas un dossier, un sous dossier nommé ou qui contient déja 20010501
j'imagine que si C :\Users\MOI\Documents\ENTREPRISE\devis\patate jean-luc\devis n°20010501 monsieur PATATE PARIS existait
la textbox devrait indiqué 20010502
au rage, au désespoir...
0
Patrice33740 Messages postés 8930 Statut Membre 1 781
 
Ce code fonctionne parfaitement chez moi, mais j'ai encore oublié de supprimer la ligne qui sert chez moi et l'espace après le C.
Si tu avais regardés le code de plus près, tu aurais du d'en rendre compte !
Je trouve que tu ne fais pas beaucoup d'effort pour déboguer !
Le code corrigé :
Option Explicit
Sub Test()
Dim n°devis As String
  
  n°devis = NumeroDevis
  MsgBox n°devis
  
End Sub

Private Function NumeroDevis() As String
Dim dossier As String
Dim sousDos As String
Dim nomPrenom As String
Dim cherche As String
Dim n°devis As Integer
Dim maximum As Integer
Dim t() As String
Dim i As Long

  Application.Volatile
  ReDim t(1 To 1)
  dossier = "C:\Users\MOI\Documents\ENTREPRISE\devis\"
  sousDos = Dir(dossier, vbDirectory)
  Do While sousDos <> ""
    If sousDos <> "." And sousDos <> ".." Then
      If (GetAttr(dossier & sousDos) And vbDirectory) = vbDirectory Then
        i = i + 1
        ReDim Preserve t(1 To i)
        t(i) = dossier & sousDos & "\"
      End If
    End If
    sousDos = Dir
  Loop
  cherche = Format(Date, "yymmdd")
  For i = LBound(t) To UBound(t)
    sousDos = Dir(t(i), vbDirectory)
    Do While sousDos <> ""
      If sousDos <> "." And sousDos <> ".." Then
        If (GetAttr(t(i) & sousDos) And vbDirectory) = vbDirectory Then
          If sousDos Like "*" & cherche & "??*" Then
            n°devis = Val(Left(Mid(sousDos, InStr(1, sousDos, cherche) + Len(cherche)), 2))
            If n°devis > maximum Then maximum = n°devis
          End If
        End If
      End If
      sousDos = Dir
    Loop
  Next
  NumeroDevis = cherche & Format(maximum + 1, "00")

End Function
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yanndebretagn Messages postés 104 Statut Membre 2
 
MERCI ça marche
l'espace après le c celui là je l'avais
après c vrai que j'aurai pu virer la ligne
maintenant je vais essayer d'intégrer le numéro de devis dans b22 automatiquement (tout seul comme un grand)
mille merci patrice pour ta patience et heureux d'avoir croisé ton chemin
0