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 ...
A voir également:

5 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
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 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
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 7
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 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
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 7
16 déc. 2015 à 10:49
Je joins le code en réponse
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
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 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
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 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
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 7
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
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 7
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 7
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