Dire var1 = var2 + 2 caracteres

Résolu
siamens_duj Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   -  
 siamens_duj -
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   Statut Modérateur Dernière intervention   2 761
 
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 1809 Date d'inscription   Statut Membre Dernière intervention   286
 
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   Statut Modérateur Dernière intervention   2 761 > sipherion Messages postés 1809 Date d'inscription   Statut Membre Dernière intervention  
 
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 192 Date d'inscription   Statut Membre Dernière intervention   7
 
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   Statut Modérateur Dernière intervention   2 761 > siamens_duj Messages postés 192 Date d'inscription   Statut Membre Dernière intervention  
 
Donnez- nous tout votre code, à défaut d'un fichier exemple.
0
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
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
Mosca
 
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   Statut Modérateur Dernière intervention   2 761
 
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
siamens_duj
 
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   Statut Modérateur Dernière intervention   2 761 > siamens_duj
 
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
siamens_duj
 
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
siamens_duj
 
Et je remarque que toto01.docx est le premier fichier de mon dossier
0
sipherion Messages postés 1809 Date d'inscription   Statut Membre Dernière intervention   286
 
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 192 Date d'inscription   Statut Membre Dernière intervention   7
 
En effet je commence à douter aussi. .
Merci tour de même pour votre réponse
0
siamens_duj
 
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   Statut Modérateur Dernière intervention   2 761
 
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
siamens_duj
 
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   Statut Modérateur Dernière intervention   2 761 > siamens_duj
 
Ne rentre pas blabla01, fais un vrai test stp.
0
siamens_duj
 
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   Statut Modérateur Dernière intervention   2 761 > siamens_duj
 
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