Partager via

VBA : valeur d'une variable par défaut si objet non trouvé

Anonyme
2022-12-18T17:44:01+00:00

Bonjour à tous ;o)

Je veux récupérer le dernier caractère dans le nom du fichier le plus récent ("strFilename2" ayant la même racine que le classeur actif) enregistré dans un dossier [chem]. Ce dernier caractère est une valeur numérique comprise entre 1 et 5. Je dois incrémenter ensuite la valeur trouvée "lastindex" pour la sauvegarde suivante…

Ça marche bien tant que j'ai au moins 1 fichier dans [chem] mais s'il s'agit d'une première sauvegarde le dossier est vide… (pas de "strFilename2" et donc pas de valeur à récupérer). Comment faire dans ce cas pour que ma variable "lastindex" prenne par défaut la valeur 1 ?

Je coince…

Merci pour votre aide

Domi

Extrait de ma macro :

………..

'RECUP NOM DU FICHIER LE PLUS ANCIEN__________________________

    strRoot = nomf 'Début du nom des fichiers à vérifier

    myDir = [chem].Value

    Set FileSys = New FileSystemObject

    Set myFolder = FileSys.GetFolder(myDir)

'vérification chaque fichier pour obtenir la date de la dernière modification. Renvoie le nom du fichier le plus ancien

    dteFile = DateSerial(1900, 1, 1)

    For Each objFile In myFolder.Files

        If Left(objFile.Name, Len(strRoot)) = strRoot Then

            If objFile.DateLastModified > dteFile Then

               dteFile = objFile.DateLastModified

               strFilename2 = objFile.Name

            End If

        End If

    Next objFile

    lastindex = CInt(Right(fso.GetBaseName(strFilename2), 1))

……..

Microsoft 365 et Office | Excel | Autres | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

  1. DanielCo 107.7K Points de réputation
    2022-12-19T08:06:38+00:00

    Bon, ça devrait le faire comme ça, mais effectivement, on doit pouvoir simplifier le code. En attendant, essaie :

    If strFilename2 <> "" Then
    lastindex = CInt(Right(fso.GetBaseName(strFilename2), 1))
    Else
    lastindex = 0
    End If

    Cette réponse a-t-elle été utile ?

    1 personne a trouvé cette réponse utile.
    0 commentaires Aucun commentaire

10 réponses supplémentaires

  1. Anonyme
    2022-12-18T19:22:41+00:00

    Là j'ai un peu de mal à te suivre ! ;o)))

    mydir c'est le le path des fichiers de sauvegarde, mais bon mon niveau VBA "poussin fébrile" ne me permet pas de tout comprendre encore hélas ! ;o)))

    J'ai tout de même essayé ta suggesion et ça plante toujours sur "lastindex = CInt(Right(fso.GetBaseName(strFilename2), 1))" err 13 incompatibilité de type

    If mydir <> "" Then
    lastindex = CInt(Right(fso.GetBaseName(strFilename2), 1))
    Else
    lastindex = 0
    End If

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. DanielCo 107.7K Points de réputation
    2022-12-18T18:51:27+00:00

    Essaie :

    If mydir <> "" Then
    lastindex = CInt(Right(fso.GetBaseName(strFilename2), 1))
    Else
    lastindex = 0
    End If

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2022-12-18T18:39:10+00:00

    J'avais essayé avec cette solution mais ça plante sur cette ligne avec le message "Err 13 , incompatibilité de type"

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. DanielCo 107.7K Points de réputation
    2022-12-18T18:00:01+00:00

    Bonjour,

    Essaie :

    lastindex = appplication.Max(1, CInt(Right(fso.GetBaseName(strFilename2), 1)))

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire