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

Résolu
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

  1. 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
    1. Merci beaucoup ça fonctionne ! :D
      0
    2. 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
  2. Modérateur
    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
    1. Merci pour votre réponse rapide, mais vous avez raison ce n'est visiblement pas ça.
      0
    2. Modérateur
      @siamens_dujAlors, comme demandé par tous ici, il nous faut le code complet...
      0
    3. Je joins le code en réponse
      0
    4. 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
    5. Modérateur
      @f894009En effet, problème résolu.
      C'est tout de même mieux sans les GoTo...
      0
  3. 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
    1. Merci pour votre réponse rapide, je met mon code tout de suite.
      0
  4. Contributeur
    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
    1. Je ne peux pas faire ça car en gros il faut entrer un numéro puis un autre numéro de confirmation.
      0
  5. 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