Dire var1 = var2 + 2 caracteres

Résolu/Fermé
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 - 17 déc. 2015 à 10:50
 siamens_duj - 18 déc. 2015 à 13:25
Bonjour,

Je suis en train de coder une petite condition mais me voilà face à un problème.

J'ai une variable Name qui récupère ce que j'ai entré dans une inputbox et j ai une variable file qui est égale à Dir (Chemin & "\*" & ".docx")

Je voudrais dire
Si file commence comme name + 2 caractères alors msgbox "trouvé" sinon msgbox "pas trouvé"

J ai donc codé

If file like Name & "*" & "*" then
Msgbox "trouvé"
Else
Msgbox "pas trouvé"

Je suis sur du nom du fichier que je rentre dans mon inputbox et pourtant j ai à chaque fois "pas trouvé"

Si quelqu'un pouvait m'aider svp.
A voir également:

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
17 déc. 2015 à 11:06
Bonjour,

If Len(file) = Len(Name) + 2 Then 'si la longueur à deux caractères de +
    If Left(file, Len(file) - 2) = Name Then 'test l'équivalence
        MsgBox "trouvé"
    Else
        MsgBox " pas trouvé"
    End If
Else
    MsgBox " pas trouvé"
End If


Que tu peux résumer en :
If Len(file) = Len(Name) + 2 And Left(file, Len(file) - 2) = Name Then 
    MsgBox "trouvé"
Else
    MsgBox " pas trouvé"
End If 

2
sipherion Messages postés 1798 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
Modifié par sipherion le 17/12/2015 à 11:14
J'ai pensé à cette solution de longueur, mais si ça se trouve il veut tester l'existence de la valeur de Name dans le nom du fichier
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > sipherion Messages postés 1798 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016
17 déc. 2015 à 11:19
Salut,
si ça se trouve il veut tester l'existence de la valeur de Name dans le nom du fichier
Oui, d'ou le :
And Left(file, Len(file) - 2) = Name 
0
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
17 déc. 2015 à 15:36
Bonjour et merci pour votre reponse mais cela ne fonctionne toujours pas. Je pense louper quelque chose. .
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019
17 déc. 2015 à 15:52
Donnez- nous tout votre code, à défaut d'un fichier exemple.
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
17 déc. 2015 à 16:00
Il faut faire du débogage sur file et Name, soit classiquement, soit avec
MsgBox file
MsgBox Name

Utiliser Dir (avec ??) ne me semble pas aberrant.

Dir("C:\SomeFil?.txt") would return SomeFile.txt est un exemple mentionné sur https://www.exceltrick.com/formulas_macros/vba-dir-function/
0
Bonjour,

Une façon de résoudre ton problème:

Sub test()
Dim file As String
Dim Name As String

'par exemple si
file = "toto" 'entrée inputbox
Name = "TOTOA1.DOCX" 'resultat de Dir *.docx

'comparaison
If InStr(UCase(Name), UCase(file)) = 1 Then
MsgBox "trouvé"
Else
MsgBox "pas trouvé"
End If

End Sub
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 déc. 2015 à 07:21
Bonjour Mosca,

Très bonne idée le UCase.

Par contre, dans ton exemple, cela fonctionne avec :
file = "toto" 'entrée inputbox
Name = "TOTOA11245AZERTY.DOCX" 'resultat de Dir *.docx

C'est pour cela qu'il faut ajouter un test sur la longueur de chaîne.
0
J'ai laissé le :
Name = Left(NomDuFichier, 11)
Pour dire que Name c'est les 11 premiers caractères de NomDuFichier.
Mais cela ne marche toujours pas :(
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > siamens_duj
Modifié par pijaku le 18/12/2015 à 08:23
Il te faut vérifier le contenu de tes variables file et name avant les tests.
Une fois que ces deux variables sont remplies, place un MsgBox dans le code pour les vérifier :

file = InputBox(blabla)
Name = Dir machin

MsgBox("file = " & file & VbCrlf & "Name = " & Name)


Donne nous le contenu exact de cette MsgBox.
0
J'ai fais ce que vous m'avez conseillé (Vous avez inversé file et Name)
J'ai fais : MsgBox("Name = " & Name & VbCrlf & "file = " & file)

Donc dans Name (ce que je rentre) j'ai bien le nom du fichier que j'ai tapé moins les deux derniers caractères et pour file il me met le nom d' un autre fichier .docx !
Quand je rentre blabla01 dans mon inputbox j'ai donc dans ma Msgbox :
Name : blabla
fiel : toto01.docx
Savez vous comment ça se fait ?
0
Et je remarque que toto01.docx est le premier fichier de mon dossier
0
sipherion Messages postés 1798 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
17 déc. 2015 à 11:03
Salut,

If file like Name & "??" Then

Mais je doute sur le test de la concaténation de la variable et des caractères joker.
0
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
17 déc. 2015 à 15:28
En effet je commence à douter aussi. .
Merci tour de même pour votre réponse
0
Sub Confirmation()

Dim res, res2 As String

Dim NomDuFichier As String 'NomDuFichier est ce qui est entré

'Test si on n'a pas renseigné "fin"
If Num_conf <> "fin" Then

'il faut maintenant trouver le numero de confirmation dans la feuille Confirmation

Sheets("Confirmation").Select
Range("A1").Select 'Se positionne sur la cellule A1

res2 = Num_conf
Range("H1").Value = res2 'La cellule H1 affiche le numéro de confirmation, soit ce qui a été scanné en deuxième étape

'Conversion de données

Range("H1").Select
Selection.TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True

Range("I1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],RC[-6]:R[852]C[-5],2,FALSE)"

'test si pas d'erreur fomule "I1"
If Not (IsError(Range("I1"))) And res2 = Num_conf Then 'Si ce qui est entré dans la 2nd inputBox est different des num de confirmation dans la colonne C alors

NomDuFichier = Range("I1").Value

Dim Name As String

Dim Chemin As String

Chemin = "D:\Users\lala\Documents\doc\" 'Chemin des fichiers

Dim file As String

file = Dir(Chemin & "*" & ".docx")

Name = Left(NomDuFichier, 11)

If InStr(UCase(Name), UCase(file)) = 1 Then
MsgBox "trouvé"
Else
MsgBox "pas trouvé"
End If

Else
MsgBox "Erreur : Vous n'êtes pas sur la fiche de démarrage"

End If

End If
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 déc. 2015 à 08:38
Essaie de placer un MsgBox comme indiqué plus haut, comme ceci :

file = Dir(Chemin & "*" & ".docx")
Name = Left(NomDuFichier, 11)
MsgBox "file = " & file & VbCrlf & "Name = " & Name


Et donne nous EXACTEMENT le contenu du message...
0
Quand je rentre blabla01 dans mon inputbox j'ai donc dans ma Msgbox :
Name : blabla
file : toto01.docx

toto01.docx est le premier fichier de mon dossier doc
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > siamens_duj
18 déc. 2015 à 08:47
Ne rentre pas blabla01, fais un vrai test stp.
0
Name = UP-O-01040-
file = UP-C-15580-1B.docx

UP-C-15580-1B.docx est le premier fichier de mon dossier doc
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > siamens_duj
18 déc. 2015 à 09:02
Donc, comme tu le dis toi même, tu récupères le premier fichier.
Or, dans ton cas, je crois deviner que tu veux vérifier, dans tous les fichiers de ton répertoire chemin, si le fichier .docx que tu saisis dans ton InoutBox existe.
Si c'est cela, il te faut boucler sur tous les fichiers de ton répertoire.

Dim file As String
file = Dir(Chemin & "*" & ".docx")
Name = Left(NomDuFichier, 11)
Do While file <> ""
    If InStr(UCase(Name), UCase(file)) = 1 Then
           MsgBox "trouvé"
    Else
           MsgBox "pas trouvé"
    End If
    file = Dir()
Loop


Attention, ne lance pas cette macro si tu as 1000 fichiers dans le répertoire. Tu vas voir s'afficher 1000 MsgBox sinon...
0