Dire var1 = var2 + 2 caracteres [Résolu/Fermé]

Signaler
Messages postés
191
Date d'inscription
vendredi 20 juin 2014
Statut
Membre
Dernière intervention
14 février 2019
-
 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.

4 réponses

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620 >
Messages postés
1798
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
19 décembre 2016

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 
Messages postés
191
Date d'inscription
vendredi 20 juin 2014
Statut
Membre
Dernière intervention
14 février 2019
6
Bonjour et merci pour votre reponse mais cela ne fonctionne toujours pas. Je pense louper quelque chose. .
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620 >
Messages postés
191
Date d'inscription
vendredi 20 juin 2014
Statut
Membre
Dernière intervention
14 février 2019

Donnez- nous tout votre code, à défaut d'un fichier exemple.
>
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021

Je vous met le fichier en reponse
Messages postés
1941
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
23 août 2020
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/
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
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620
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.
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 :(
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620 > 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.
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 ?
Et je remarque que toto01.docx est le premier fichier de mon dossier
Messages postés
1798
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
19 décembre 2016
283
Salut,

If file like Name & "??" Then

Mais je doute sur le test de la concaténation de la variable et des caractères joker.
Messages postés
191
Date d'inscription
vendredi 20 juin 2014
Statut
Membre
Dernière intervention
14 février 2019
6
En effet je commence à douter aussi. .
Merci tour de même pour votre réponse
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
> Mosca
Ah d'accord merci pour votre réponse
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620 > siamens_duj
Le Debug.Print peux t'aider.
Sers t'en comme ceci :

Do While file <> ""
    If Len(file) = Len(Name) + 2 And left(file, Len(file) - 2) = Name Then
        MsgBox "trouvé"
    End If                
    file = Dir() 'Permet de passer  u fichier suivant                                
    Debug.Print file & " <> " & Name & " Longueur de file : " & Len(file) & " Longueur de Name : " & Len(Name) + 2 & " -- " & left(file, Len(file) - 2) & " <> " & Name
Loop
UP-C-15580-1B.docx <> UP-O-01040- Longueur de file : 18 Longueur de Name : 13 -- UP-C-15580-1B.do <> UP-O-01040-

Voila ce que j'obtiens
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620 > siamens_duj
Je comprends mieux.
J'avions omis l'extension.
A tester :
Do While file <> ""
    If Len(file) - 7 = Len(Name) And Left(file, Len(file) - 7) = Name Then
        MsgBox "trouvé"
    End If                
    file = Dir() 
Loop
Genial merci beaucoup ça fonctionne !
Merci pour votre aide et votre patience.