VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

timal03

XLDnaute Nouveau
Bonjour,

J'essaie d'ecrire cette macro me permettant d'ouvrir des classeurs excels selon les valeurs de cellules de ma page excel active dans l'onglet "Inputs" ici cité. Ces valeurs sont amenées à changer, ce qui m'amenerait vers des chemins fichiers differents.
Les fichiers que je souhaite ouvrir sont fermes et sous differents dossiers.

Voici le code que j'ai ecrit. J'ai un message d'erreur mentionnant "Error '133 Type Mismatch" et aucune ligne de code n'est specifiee.


Je decourvre tt juste VBA... donc je suis un peu demuni... Quelqu'un peut il y jeter un coup d'oeil ?

Merci bcp !

Voici le code:

Code:
Sub ImportFile()
Dim A As String
Dim B As String
Dim C As String

If Sheets("Inputs").Range("A_A1") > Sheets("Inputs").Range("G6") Then
A= Sheets("Inputs").Range("A_A1") & "_12"

Else: Sheets("Inputs").Range("A_A1") = Sheets("Inputs").Range("G6")

If Sheets("Inputs").Range("M3") < 10 Then
A = Sheets("Inputs").Range("A_A1") & "_0" & Sheets("Inputs").Range("M3")

Else
If Sheets("Inputs").Range("M3") >= 10 Then
A = Sheets("Inputs").Range("A_A1") & "_" & Sheets("Inputs").Range("M3")
End If
End If


If Sheets("Inputs").Range("B_B1") = "BLUE Then
B = "BLUE"
Else
B = "RED"

C = Range("C_C1") & " - " & A 

End If
End If

Workbooks.Open Filename:="S:\XXXX\ZZZZ\& A & " \ " & B & " \ " & C & *.xls"

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Bonjour,

déjà à priori manque des guillemets...
Code:
Workbooks.Open Filename:="S:\XXXX\ZZZZ\" & A & " \ " & B & " \ " & C & "*.xls"

les espaces avant et après les \ sont ils nécessaires ?? sans plus de détails difficile d'en dire plus...

bonne journée
@+
 

pijaku

XLDnaute Occasionnel
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Bonjour,

Plusieurs interrogations :
Qu'est ce que Range("A_A1")? Je connais Range("A1"), Range("AA1"), Range("A1:A10"), mais pas Range("A_A1")...
Idem pour Range("B_B1").

Remplacer également :
Code:
Workbooks.Open Filename:="S:\XXXX\ZZZZ\& A & " \ " & B & " \ " & C & *.xls"
par :
Code:
Workbooks.Open Filename:="S:\XXXX\ZZZZ\& A & " \ " & B & " \ " & C & ".xls"

Type mismatch erreur 13 est, généralement, une erreur dans le type d'une variable; une variable de type Integer ne peux pas contenir un String.

Ce lien n'existe plus
The variable or property isn't of the correct type. For example, a variable that requires an integer value can't accept a string value unless the whole string can be recognized as an integer.

Que contiennent donc Range("A_A1"), Range("B_B1") et tous les autres Range utilisés dans ta macro?????
 

timal03

XLDnaute Nouveau
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Bonjour et merci,

Pierrot, en effet il me manquait des guillemets, merci. Les espaces oui sont nécessaires puisqu’ils existent dans le chemin fichier.

Pijaku, Range(A_A1) et les autres de même type (B_B1….) sont les noms de mes cellules (j’ai seulement renomme les noms avec des lettres pour poster sur le forum).

Range(A_A1) contient une annee en format (YYYY)
Range (G6) est l’année en cours de format YYYY
Range (M3) est le mois en cours traduit en chiffres

Range(B_B1) contient un nom

Range (C_C1) contient un code de type (X1234) (Une lettre et 4 chiffres)

Mes cellules nommees (A_A1), (B_B1) et (C_C2) sont des listes deroulantes. C’est en choisissant les valeurs dans ces cellules qui determinent le chemin du fichier a prendre…

Suis-je plus clair ?

J’ai modifie ce que vous m’avez dit, j’ai maintenant une ‘error 9’ subscript out of range…
Je dois donc associe autre chose que « String » a l’une des mes variables ? Mais quoi ? 

Merci pour votre aide
 

pijaku

XLDnaute Occasionnel
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Non tes variables A, B et C doivent bien être définies comme des String. Pas de souci de ce côté.

L'imbrication des If End If me semble particulière :
Code:
If Then
Else
    If Then
    Else
        If Then
        End If
    End If
    If Then
    Else
    End If
End If

Les espaces dans le chemin d'accès me surprennent... Mais bon si tu le dis. S:\XXXX\ZZZZ\AAAA \ BBBBB \ CCCCC.xls me semble plus que curieux...

Manque un guillemet aussi à BLUE :
If Sheets("Inputs").Range("B_B1") = "BLUE" Then

Pour continuer, je penses qu'un fichier exemple nous permettrait de donner la solution adéquate.
Merci.
 

timal03

XLDnaute Nouveau
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Je n'ai pas de lignes en jaune qui sont apparues,
Je suis retourne sur la macro j'ai essaye de la refaire fonctionner et j'ai maitenant un message error '1004' qui apparait, l'aide windows ne m'eclaire guere plus...

Je vous prepare un fichier, ca sera plus simple en effet....
Merci
 
Dernière édition:

timal03

XLDnaute Nouveau
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Voici un fichier type... j'ai rajoute des explications directement dedans...

Merci beaucoup pour votre aide !
 

Pièces jointes

  • Fichier type ouverture Classeur via Macro.xlsx
    20.7 KB · Affichages: 248

pijaku

XLDnaute Occasionnel
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Essaye ce code :
[Tu peux remplacer les cellules B10, F12 etc par les noms que tu leur as donné]
Code:
Sub ImportFile()
Dim A As String
Dim B As String
Dim C As String
Dim Chemin As String

If Sheets("Inputs").Range("B10") < Sheets("Inputs").Range("G6") Then
    A = Sheets("Inputs").Range("B10") & "_12"
Else
    If Sheets("Inputs").Range("M3") < 10 Then
        A = Sheets("Inputs").Range("B10") & "_0" & Sheets("Inputs").Range("M3")
        Else
        A = Sheets("Inputs").Range("B10") & "_" & Sheets("Inputs").Range("M3")
    End If
End If
If Sheets("Inputs").Range("F12") = "ASIA" Then
    B = "ASIA"
Else
    B = "PACIFIC"
End If
C = Range("B12") & " - " & A
Chemin = "S:\XXXX\ZZZZ\" & A & "\" & B & "\" & C & ".xls"
MsgBox Chemin
'Workbooks.Open Filename:=Chemin
End Sub
 

timal03

XLDnaute Nouveau
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Merci beaucoup Pijaku !
Ca fonctionne tres bien ! Pratique le message, ca permet de voir facilement si le chemin est correct ou non.

Je vais pouvoir passer a mes problemes suivants maintenant :)

D'ailleurs j'aurais une autre question,

Je dois aller chercher un autre type de fichier. Le nom du classeur est commun pour les 20 premiers caracteres mais les suivants changent trop souvent pour pouvoir automatiser....

Le principe pour aller chercher le classeur reste le meme que pour la premiere macro (avec les conditions et tt le "tralala") la seule chose qui me pose probleme c'est le nom du classeur en tant que tel.

En gros j'aimerais transposer sur VBA la chose suivante: "Va ouvrir le classeur en ne prenant en compte que les 20 premiers caracteres qui composent le nom de ce classeur"

C'est possible ?

Merci pour votre aide !
 

pijaku

XLDnaute Occasionnel
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Bonjour,
message à 05h06!! Pas bien dormi?

Si c'est le cas, t'inquiète il existe forcément une solution à tout...

Bon, si tu n'as que partiellement le nom de ton fichier, je présume que ce nom partiel sera stocké dans ta variable C :

Code:
Sub ImportFile()
Dim A As String
Dim B As String
Dim C As String
Dim Chemin As String, NomFicIncomplet$, Fichier$

If Sheets("Inputs").Range("B10") < Sheets("Inputs").Range("G6") Then
    A = Sheets("Inputs").Range("B10") & "_12"
Else
    If Sheets("Inputs").Range("M3") < 10 Then
        A = Sheets("Inputs").Range("B10") & "_0" & Sheets("Inputs").Range("M3")
        Else
        A = Sheets("Inputs").Range("B10") & "_" & Sheets("Inputs").Range("M3")
    End If
End If
If Sheets("Inputs").Range("F12") = "ASIA" Then
    B = "ASIA"
Else
    B = "PACIFIC"
End If
C = Range("B12") & " - " & A
NomFicIncomplet = C
Chemin = "S:\XXXX\ZZZZ\" & A & "\" & B & "\"
Fichier = Dir(Chemin & NomFicIncomplet & "*")
MsgBox Fichier
If Fichier <> "" Then
    Workbooks.Open Filename:=Fichier
End If
End Sub
 

timal03

XLDnaute Nouveau
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Haha non non ca va j'ai tres bien dormi ! En fait je suis a l'etranger, ou j'ai 6h de plus qu'en France :) Ca explique aussi pourquoi je n'ai pas d'accent sur mes lettres... :)

Ok je regarde des que je peux ce que tu m'as donne... merci pour ta disponibilite en tout cas !
 

timal03

XLDnaute Nouveau
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Et bien ecoute merci encore Pijaku ! Ca fonctionne tres bien !
Un vrai bonheur lorsque ca fonctionne !

J'ai deux autres petites questions.
En fait apres l'ouverture du fichier je je copie un onglet que je colle ds ds mon fichier principal. Jusque la ca va.
Mon seul souci c'est lorsque je precise a la macro de fermer le fichier.
Vu que j'ai recupere les codes via une macro enregistree il me precise un fichier en particulier.

Ca c le code une fois change, mais a la place de Fichier c'etait le nom du classeur entier qui apparassait
Code:
Windows(Fichier).Activate
    ActiveWindow.Close

Ca doit etre totu bete j'en suis sure... mais bon...


2eme question: Je dois "Unprotect" un ces fichiers, j'ai recuperer ces codes

Code:
dim Obj2 As Object
'Les codes qu'on a ecrit plus haut'
'Et Juste apres'
Workbooks.Open Filename:=Chemin
'jecris ca'
    Obj2.Sheets("Name of the Sheet").Select
    Obj2.Sheets("Name of the sheet").Activate
    ActiveSheet.Unprotect Password:="Mon code"

'Et ensuite apres laction je reprotege ma feuille'

ActiveSheet.Protect Password:="Mon code"

Encore un truc bete ? :)

Merci !
 

pijaku

XLDnaute Occasionnel
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Coucou,
De rien le forum est là pour ça.

Bon Alors pour ouvrir et fermer le classeur on va utiliser une variable de type .... workbook :
Code:
Dim Wbk As WorkBook
Set Wbk = WorkBooks.Open(blabla)
'ici le traitement
Wbk.Close
Ensuite, pour déprotéger et reprotéger une feuille de ce classeur :
Code:
With Wbk.Sheets("TrucMuche")
    .UnProtect "motdepasse"
    'ICI LE TRAITEMENT
    .Protect "motdepasse"
End With

Bon je n'ai rien tester, mais ça doit être quelque chose d'assez approchant...

Le code :
Code:
Sub ImportFile()
Dim A As String
Dim B As String
Dim C As String
Dim Chemin As String, NomFicIncomplet$, Fichier$
Dim Wbk As WorkBook

If Sheets("Inputs").Range("B10") < Sheets("Inputs").Range("G6") Then
    A = Sheets("Inputs").Range("B10") & "_12"
Else
    If Sheets("Inputs").Range("M3") < 10 Then
        A = Sheets("Inputs").Range("B10") & "_0" & Sheets("Inputs").Range("M3")
        Else
        A = Sheets("Inputs").Range("B10") & "_" & Sheets("Inputs").Range("M3")
    End If
End If
If Sheets("Inputs").Range("F12") = "ASIA" Then
    B = "ASIA"
Else
    B = "PACIFIC"
End If
C = Range("B12") & " - " & A
NomFicIncomplet = C
Chemin = "S:\XXXX\ZZZZ\" & A & "\" & B & "\"
Fichier = Dir(Chemin & NomFicIncomplet & "*")
MsgBox Fichier
If Fichier <> "" Then
    Set Wbk = Workbooks.Open(Fichier)
    With Wbk.Sheets("TrucMuche")
        .UnProtect "motdepasse"
        'ICI LE TRAITEMENT--------------------
        .Protect "motdepasse"
    End With
Wbk.Close
Set Wbk = Nothing
End If
End Sub
 

timal03

XLDnaute Nouveau
Re : VBA: Ouvrir un classeur excel avec valeurs de cellules comme variables

Bonjour,

Avec un "petit peu" de retard merci pour ton aide au fait ! :)
Tout a tres bien fonctionne avec quelques adaptations forcement !

Encore merci et peut etre a bientot
 

Discussions similaires

Réponses
6
Affichages
228

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa