If sous repertoire contient - Page 2

Résolu
Précédent
  • 1
  • 2
  1. 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
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
  3. 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
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      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
  4. 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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
Précédent
  • 1
  • 2