Se connecter avec
S'enregistrer | Connectez-vous

[vba] pb classeur pas activé quand en cours de modification

Dernière réponse : dans Programmation

J'ai un bout de code qui active un classeur quand il est déjà ouvert ou l'ouvre s'il n'est pas ouvert.
La variable"chemin" contient le chemin complet de mon classeur.

Voici mon code:
  1. On Error Resume Next
  2. Workbooks(chemin).Activate 'activer classeur ouvert
  3. If Err <> 0 Then 'si classeur pas ouvert
  4. Workbooks.Open filename:= _
  5. chemin 'ouvrir le classeur
  6. End If


Mon code marche très bien si le classeur était ouvert (sans modification depuis le dernier enregistrement): le classeur est activé.
Si le classeur était fermé: il est ouvert.
Mais: lorsque le classeur est ouvert et en cours de modification (j'ai modifié le contenu d'une cellule par exemple, sans enregistrer et je lance la macro) le code ne s'exécute pas correctement: au lieu d'activer le classeur, il veut le rouvrir! Je ne comprend pas pourquoi il n'arrive pas à l'activer...
Quelqu'un aurait-il une solution?



Lassé par la pub ? Créez un compte
Expert Programmation

Rhooo...... Commente la ligne
  1. ' On Error Resume Next

Et tu verras que tu as systématiquement une erreur sur l'activation quand le fichier est déjà ouvert. Si le fichier n'est pas modifié, l'ouvrir alors qu'il est déjà ouvert ne porte pas à conséquence.

En fait tu ne dois pas désigner le workbook par son chemin, mais par son nom.

Tiens, écris ça dans un classeur déjà enregistré sur le disque :
  1. Sub Test
  2. MsgBox ThisWorkBook.Name
  3. MsgBox ThisWorkBook.FullName
  4. MsgBox ThisWorkBook.Path
  5. End Sub


Vois-tu la différence ?

C'est tellement laid, je te le concède, que Excel ne peut pas ouvrir C:\Dossier1\Classeur1.xls et C:\Dossier2\Classeur1.xls en même temps.


Solution :

Extraire le nom de fichier du chemin pour faire le activate :
  1. Workbooks ( ExtractFileName ( chemin ) ).Activate

Si tu ne sais pas coder la fonction ExtractFileName, demande à Nova13 :sol:  ( <-- zeb qui se la pète )

Voici le code pour extraire le nom d'un fichier excel (variable "classeur_previ") à partir du chemin complet (variable "chemin"):

  1. 'extraire nom du fichier classeur prévi
  2. Dim RemoveExtention As Boolean
  3.  
  4. ' get file name (find last '\')
  5. classeur_previ = chemin
  6. Dim i As Long
  7. i = InStrRev(chemin, "\")
  8.  
  9.  
  10. ' If i = 0 Then GoTo CLEAN_EXIT
  11. classeur_previ = Mid$(chemin, i + 1)
  12. ' remove extention (find last '.')
  13. If Not RemoveExtention Then GoTo CLEAN_EXIT
  14. i = InStrRev(classeur_previ, ".") - 1
  15. If i <= 0 Then GoTo CLEAN_EXIT
  16. classeur_previ = Left$(classeur_previ, i)
  17. CLEAN_EXIT:
  18. End If

si je peut me permettre, j'ai apporté 2-3 modif qui rendent le code plus simple, et en plus, à l'utilisation, je me suis rendu compte qu'il ne cherchait pas vraiment la dernière occurence du signe.
(A moins que ca ne marchait pas seulement avec moi)
sorry mais j'ai adapté avec mes noms de variable à moi:
  1. Do Until InStr(fich, filename, "\") = 0
  2. Dim fich As Long
  3. fich = InStr(filename, "\")
  4. filename = Mid$(filename, fich + 1)
  5. Loop
  6.  
  7. filename = Left$(filename, fich)


edit: avec init de fich à 1
Lassé par la pub ? Créez un compte