Listing des classeurs ouverts et tri
Bonjour à tous,
Chez un nouveau client et avec tout ceux qui maîtrisent bien VBA en vacances, j'ai besoin d'aide. En gros, j'ai un fichier que doit récupérer des données d'un fichier qui doit être ouvert. ce fichier source a dans son nom de fichier un acronyme qui me permet de le distnguer des autres. par contre, je dois m'assurer qu'il n'y aie qu'un seul fichier d'ouvert
'Déclaration des variables
Dim wb As Workbook
Dim a As Integer
Dim b As Integer
Dim wb_OQT As String
Dim wb_Persos As String
Dim Column As Integer
Dim i As Integer
Dim Nb_Format As Integer
Dim Response
'initialisation des variables
a = 1
b = 1
Column = 0
Nb_Format = 0
'Etablissement de la liaison
MsgBox ("Attention, il ne faut ouvrir qu'un seul OQT/OST")
wb_OQT = wb.Name
For Each wb In Workbooks
If InStr(wb_OQT, "OQT") Or InStr(wb_OQT, "OST") Then
b = b + 1
a = a + 1
End If
Next
MsgBox (b)
If b > 1 Then
Response = MsgBox("il ne peut y avoir qu'un seul OQT*/OST d'ouvert, fermer le fichier non nécessaire", vbOKCancel, "ERREUR DE FICHIERS")
GoTo Sortie
Else
GoTo Fill_data
End IfDans mon code, le for each contient le contrôle du nom de fichier est l'incrément d'un compteur b pour valider si j'ai plus d'un fichier type OQT/OST.
par contre, en terme d'erreur, j'ai un compteur à zéro, et me génère une erreur de type.
Bref, je pense que j'ai un soucis de déclaration ou de portée et je suis pas assez habitué au codage pour m'en sortir seul.
Merci pour toutes informations de votre part qui pourraient m'aider à avancer.
bonjour,
sur quelle instruction as-tu l'erreur ?
je vois également une erreur de logique
wb_OQT = wb.Name
For Each wb In Workbooks
If InStr(wb_OQT, "OQT") Or InStr(wb_OQT, "OST") Then
b = b + 1
a = a + 1
End If
Nextdevrait être
For Each wb In Workbooks
wb_OQT = wb.Name
If InStr(wb_OQT, "OQT") Or InStr(wb_OQT, "OST") Then
b = b + 1
a = a + 1
End If
NextBien le bonjour à toi h2So4, j'ai désormais corrigé ce point.
je viens de me rendre compte que j'avais 2 versions du code, avec dans mon fichier dev wb.names, alors que mon code prod avec wb_OQT dans l'instruction.
If InStr(wb.Names, "OQT") Or InStr(wb.Names, "OST") ThenJ'avais donc une erreur, c'est une erreur de type 449 (argument non facultatif) sur la ligne, mais je ne sais pas trop pourquoi, bref, maintenant ça marche.
Merci beaucoup d'accepter ma bouletitude. je vais donc pouvoir travailler sur la suite du fichier désormais.
bonjour,
il y a une différence entre wb.name (nom du classeur) et wb.names (collection des plages nommées)
J'avais compris qu'il y avait une différence, mais pas compris la portée de celle là.
bref je m'en sors, par contre, j'ai du modifier un peu mon code pour récuperer à la fois le nombre de fichier (pour faire mon débugage) et le nom du fichier en rajoutant une variable wb_num et garder la variable wb_OQT uniquement pour stocker le nom du fichier.
Sub fill_Format_from_OQT_Cliquer()
'Déclaration des variables
Dim wb As Workbook
Dim a As Integer
Dim b As Integer
Dim wb_OQT As String
Dim wb_num As String
Dim wb_Persos As String
Dim Column As Integer
Dim i As Integer
Dim Nb_Format As Integer
Dim Response
'initialisation des variables
a = 0
b = 0
Column = 0
Nb_Format = 0
'Etablissement de la liaison
MsgBox ("Attention, il ne faut ouvrir qu'un seul OQT/OST")
For Each wb In Workbooks
wb_num = wb.Name
If InStr(wb_num, "OQT") Or InStr(wb_num, "OST") Then
b = b + 1
a = a + 1
wb_OQT = wb.Name
End If
Next
MsgBox (b)
If b > 1 Then
Response = MsgBox("il ne peut y avoir qu'un seul OQT*/OST d'ouvert, fermer le fichier non nécessaire", vbOKCancel, "ERREUR DE FICHIERS")
GoTo Sortie
Else
GoTo Fill_data
End If
Sortie:
End
Fill_data:
MsgBox wb_OQT, vbInformation, "Fichier OQT/OST utilisé : "
'il manque le contrôle si plusieurs OQT sont dispoJe continue mon debugage.