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

Résolu
siamens_duj Messages postés 212 Statut Membre -  
 siamens_duj -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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. siamens_duj
       
      Merci beaucoup ça fonctionne ! :D
      0
    2. siamens_duj
       
      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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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. siamens_duj Messages postés 212 Statut Membre 7
       
      Merci pour votre réponse rapide, mais vous avez raison ce n'est visiblement pas ça.
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > siamens_duj Messages postés 212 Statut Membre
         
        Alors, comme demandé par tous ici, il nous faut le code complet...
        0
    2. siamens_duj Messages postés 212 Statut Membre 7
       
      Je joins le code en réponse
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
         
        En effet, problème résolu.
        C'est tout de même mieux sans les GoTo...
        0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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. siamens_duj Messages postés 212 Statut Membre 7
       
      Merci pour votre réponse rapide, je met mon code tout de suite.
      0
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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. siamens_duj Messages postés 212 Statut Membre 7
       
      Je ne peux pas faire ça car en gros il faut entrer un numéro puis un autre numéro de confirmation.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. siamens_duj Messages postés 212 Statut Membre 7
     
    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