Changer le type d'une variable au cours d'un code

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
- 16 déc. 2015 à 08:32
 siamens_duj - 17 déc. 2015 à 08:44
Bonjour,

J'ai un petit soucis, je suis coincé sur mon code depuis presque 3 jours sans avoir trouvé de solution.

Je vous explique :
Je fais sur excel une recherche qui met le résultat dans une cellule.
Cette cellule est de format de type standard, si tout se passe bien et que la recherche aboutit, je n'ai pas d'erreur. Mais si la recherche n'aboutit pas j'au une erreur d'exécution 13 "incompatibilité de type" et me surligne : NomDuFichier = Range("I1").Value
NomDuFichier est de type string. J'ai essayé de changer le type en Variant mais là c'est la ligne chemin= chemin & NomDuFichier & " .docx " qui est surligné (ce code trouve le fichier à ouvrir dans mon dossier) .
J aimerais donc changer le type de la variable NomDuFichier dans ma condition "si il n y a pas de résultat alors msgbox "fin" else changer le format de NomDuFichier en string" et mettre le type NomDuFichier as Variant au début de mon code. Seul problème, je n'arrive pas à le faire ...

Si quelqu'un pouvait m'aider svp ...

5 réponses

f894009
Messages postés
16486
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mai 2022
1 633
Modifié par f894009 le 16/12/2015 à 10:12
Bonjour,

Code restructure et test d'erreur sur cellule I1. Par contre comprends pas le test
res2 = Num_conf
car res2 prend la valeur de Num_conf !!

Sub Confirmation()
    Dim NomDuFichier As String
    Dim res2 As String
    
    If Num_conf <> "Fin" Then
        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")
    
            Dim Chemin As String
            Chemin = "D:\Users\lala\Documents\doc\"

            Chemin = Chemin & NomDuFichier & ".docx"
            Set appwd = CreateObject("Word.Application")
            With appwd
                .WordBasic.DisableAutoMacros 1 '0 pour activer
                .Visible = True
                .Documents.Open Chemin
                .Activate
            End With
        Else
            MsgBox "Fin, pas de nom de fichier"
        End If
    End If
End Sub


deuxieme possibilite en modifiant la formule:

        ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],RC[-6]:R[852]C[-5],2,FALSE)),"""",VLOOKUP(RC[-1],RC[-6]:R[852]C[-5],2,FALSE))"
        If 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
2
Merci beaucoup ça fonctionne ! :D
0
Pourrais-je abuser de votre gentillesse et vous demander comment comparer les deux derniers caractère du nom de fichier saisie et les deux derniers caractères du nom du fichier se situant dans le dossier Doc ?
J'ai commencé à faire le code mais je suis bloqué ...
0
pijaku
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 695
Modifié par pijaku le 16/12/2015 à 09:16
Bonjour,

Il faudrait nous montrer tout le code réalisé et qui ne fonction ne pas.
A priori, je ne vois pas pourquoi NomDuFichier as Variant ne fonctionnerai pas. A mon sens, il y a une autre erreur.
Par exemple : " .docx " normalement il ne doit pas y avoir d'espace.

Sinon, pour changer le type d'une variable, tu peux faire :

Dim NomDuFichier as Variant, NomFic As String

NomDuFichier = Range("I1").Value
NomFic = CStr(NomDuFichier) 'transforme en String
chemin= chemin & NomFic & ".docx"


Mais je persiste à penser qu'il y a d'autres erreurs.

Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
0
siamens_duj
Messages postés
191
Date d'inscription
vendredi 20 juin 2014
Statut
Membre
Dernière intervention
14 février 2019
8
16 déc. 2015 à 09:17
Merci pour votre réponse rapide, mais vous avez raison ce n'est visiblement pas ça.
0
pijaku
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 695 > siamens_duj
Messages postés
191
Date d'inscription
vendredi 20 juin 2014
Statut
Membre
Dernière intervention
14 février 2019

16 déc. 2015 à 09:18
Alors, comme demandé par tous ici, il nous faut le code complet...
0
siamens_duj
Messages postés
191
Date d'inscription
vendredi 20 juin 2014
Statut
Membre
Dernière intervention
14 février 2019
8
16 déc. 2015 à 10:49
Je joins le code en réponse
0
f894009
Messages postés
16486
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mai 2022
1 633
16 déc. 2015 à 11:11
Bonjour pijaku

En effet, je lui ai modifie son code (deux posibilites), car l'erreur venait de la formule qui est ecrite en I1 ou il n'y avait pas de esterreur a l'origine
0
pijaku
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 695 > f894009
Messages postés
16486
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mai 2022

16 déc. 2015 à 11:29
En effet, problème résolu.
C'est tout de même mieux sans les GoTo...
0
f894009
Messages postés
16486
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mai 2022
1 633
16 déc. 2015 à 08:49
Bonjour,
Pas possible de changer la declaration d'une variable en dynamique
Declarez NomDuFichier en variant des le debut, ca m'etonnerait que cela vienne de la declaration en string!!!
Montrez le code complet de recherche et affectation
0
siamens_duj
Messages postés
191
Date d'inscription
vendredi 20 juin 2014
Statut
Membre
Dernière intervention
14 février 2019
8
16 déc. 2015 à 09:18
Merci pour votre réponse rapide, je met mon code tout de suite.
0
cs_Le Pivert
Messages postés
7743
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 mai 2022
709
16 déc. 2015 à 09:16
Bonjour à tous,

Pour éviter un bug si le fichier n'existe pas:

If NomDuFichier <> "" Then
MsgBox "LeFichier Existe" 'mettre le code correspondant à la place
Else
MsgBox "LeFichier n'existe pas"
Exit Sub
End If


voir aussi si chemin se termine par \
0
siamens_duj
Messages postés
191
Date d'inscription
vendredi 20 juin 2014
Statut
Membre
Dernière intervention
14 février 2019
8
16 déc. 2015 à 10:50
Je ne peux pas faire ça car en gros il faut entrer un numéro puis un autre numéro de confirmation.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
siamens_duj
Messages postés
191
Date d'inscription
vendredi 20 juin 2014
Statut
Membre
Dernière intervention
14 février 2019
8
16 déc. 2015 à 09:18
Sub Confirmation()



Dim NomDuFichier As Variant, NomFic As String

Dim res2 As String



If Num_conf <> "Fin" Then



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)"



If res2 <> Num_conf Then 'Si ce qui est entré dans la 2nd inputBox est different des num de confirmation dans la colonne C alors



MsgBox ("fin")



GoTo fin



Else: GoTo suite



End If



suite:



NomDuFichier = Range("I1").Value



NomFic = CStr(NomDuFichier) 'Transforme en string



Dim Chemin As String



Chemin = "D:\Users\lala\Documents\doc\"

Chemin = Chemin & NomDuFichier & ".docx"



Set appwd = CreateObject("Word.Application")



With appwd

.WordBasic.DisableAutoMacros 1 '0 pour activer

.Visible = True

.Documents.Open Chemin

.Activate


End With



fin:



End If



End sub
0