Fermer feuille de dialogue

Bonjour !

J'ai un fichier qui va chercher des informations dans les feuilles d'un autre fichier par le biais d'une macro.

Cependant quand la feuille n'existe pas, excel ouvre une boite de dialogue (joint). Et il y a souvent beaucoup de feuilles inexistantes.

Je souhaiterai que soit la boite ne s'ouvre pas, soit la fermer automatiquement.

Merci de votre aide.

Cordialement

capture

Bonjour

Il faudrait contrôler au préalable que la feuille existe dans le code, mais pour te faire des propositions, il faudrait déjà fournir le code ou au moins un extrait significatif.

Sinon, pour éviter l'apparition de ce genre de message, tu peux aussi écrire :

Application.DisplayAlerts = False
'Instructions
Application.DisplayAlerts = True

Mon code est le suivant mais je ne pense pas que ça t'aide réellement :

Sub test()
Dim i As Long
Dim j As Long
i = 2
j = 11

While i < 11
    Range("C" & i).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]0" & Range("B" & i) & "'!$G$8"
    On Error Resume Next
    i = i + 1
Wend
While Range("B" & j).Value <> ""
    Range("C" & j).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]" & Range("B" & j) & "'!$G$8"
    On Error Resume Next
    j = j + 1
Wend

End Sub

La solution que tu m'as proposé ça ne fonctionne pas ...

Tu peux adapter cette fonction à ton besoin :

https://excel-malin.com/codes-sources-vba/vba-verifier-si-feuille-existe/

Je te fais une proposition dans un instant

A tester :

Sub test()

Dim i As Long, j As Long, F As Worksheet
Set F = ThisWorkbook.ActiveSheet
Workbooks("Feuille de route conducteur_fr-FR.xlsx").Activate
With F
    For i = 2 To 10
        If FeuilleExiste("0" & .Range("B" & i)) Then
            .Range("C" & i).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]0" & .Range("B" & i) & "'!$G$8"
        End If
    Next i
    For j = 11 To .Range("B" & Rows.Count).End(xlUp).Row
        If FeuilleExiste(.Range("B" & j)) Then
            .Range("C" & j).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]" & .Range("B" & j) & "'!$G$8"
        End If
    Next j
End With

End Sub
Public Function FeuilleExiste(FeuilleAVerifier As String) As Boolean
'fonction qui vérifie si la "FeuilleAVerifier" existe dans le Classeur actif
'par Excel-Malin.com ( https://excel-malin.com )

On Error GoTo SiErreur
Dim Feuille As Worksheet

    FeuilleExiste = False
    For Each Feuille In Worksheets
        If Feuille.Name = FeuilleAVerifier Then
            FeuilleExiste = True
            Exit Function
        End If
    Next Feuille
Exit Function

SiErreur:
MsgBox "Une erreur s'est produite..."
FeuilleExiste = CVErr(xlErrNA)
End Function

Merci pour ta réponse rapide ! J'avais essayé cette solution mais j'avais coincé car je ne dois pas vérifier si la feuille existe dans ce fichier mais dans un autre et je ne sais pas comment faire pour réaliser cette vérification dans un autre document..

Merci pour ta réponse rapide ! J'avais essayé cette solution mais j'avais coincé car je ne dois pas vérifier si la feuille existe dans ce fichier mais dans un autre et je ne sais pas comment faire pour réaliser cette vérification dans un autre document..

J'avais oublié les "." devant les Range... Et du coup, ça fonctionne ?

Je n'y arrivais pas mais je me suis rendu compte que si le document où la macro va chercher les données, il n'y a pas de message d'erreur. Ainsi j'ai modifié mon code ainsi pour qu'il ouvre le document et le referme, ainsi :

Sub Ouvrir()
Dim Chemin As String
Dim NomFichier As String
Dim i As Long
Dim j As Long
Chemin = "http..Transport/Exploitation/Planning/DISPONIBILITES CHAUFFEURS/"
NomFichier = "Feuille de route conducteur_fr-FR.xlsx"
Workbooks.Open Filename:=Chemin & NomFichier
i = 2
j = 11
Workbooks("transfert.xlsm").Activate

While i < 11
    Range("C" & i).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]0" & Range("B" & i) & "'!$G$8"
    On Error Resume Next
    i = i + 1
Wend
While Range("B" & j).Value <> ""
    Range("C" & j).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]" & Range("B" & j) & "'!$G$8"
    On Error Resume Next

    j = j + 1
Wend
i = 2
j = 11
While i < 11
    Range("D" & i).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]0" & Range("B" & i) & "'!$B$8"
    On Error Resume Next
    i = i + 1
Wend
While Range("B" & j).Value <> ""
    Range("D" & j).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]" & Range("B" & j) & "'!$B$8"
    On Error Resume Next
    j = j + 1
Wend
Workbooks(NomFichier).Close False
End Sub

Maintenant tout fonctionne ! je te remercie encore une fois pour ton aide !

J'avais bien précisé que le document externe devait être ouvert avant de lancer la macro.

Il y a des choses à revoir dans ta macro... Je vois ça dès que j'ai un moment.

Ca y est, j'ai pris le temps de revoir ton code. Voilà mes remarques :

  • Dans ton code, n'ayant qu'un fichier à ouvrir, il est inutile d'utiliser 2 variables (Chemin et NomFichier), et on peut même ne pas en utiliser du tout puisqu'il n'y a pas besoin de répéter plus d'une fois le nom complet à l'ouverture.
  • Il est également inutile d'utiliser 4 boucles ("While...Wend") puisqu'elles sont identiques 2 à 2.
  • En ce qui me concerne, je préfère utiliser "For...Next" puisque l'amplitude de tes boucles est connue à l'avance. L'écriture est aussi plus "light" puisqu'il n'est pas nécessaire d'affecter une valeur initiale ni de prévoir une ligne spécifique pour incrémenter la variable.
  • Il est inutile de répéter sans cesse la gestion des erreurs, un unique "On Error Resume Next" en début de macro est suffisant.

Voilà le code que je propose (j'ai gardé la vérification du nom d'onglet, au cas où) :

Sub Ouvrir()

Dim i As Long, j As Long, F As Worksheet

On Error Resume Next

Set F = ThisWorkbook.ActiveSheet
Workbooks.Open Filename:="http..Transport/Exploitation/Planning/DISPONIBILITES CHAUFFEURS/Feuille de route conducteur_fr-FR.xlsx"
With F
    For i = 2 To 10
        If FeuilleExiste("0" & .Range("B" & i)) Then
            .Range("C" & i).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]0" & .Range("B" & i) & "'!$G$8"
            .Range("D" & i).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]0" & .Range("B" & i) & "'!$B$8"
        End If
    Next i
    For j = 11 To .Range("B" & Rows.Count).End(xlUp).Row
        If FeuilleExiste(.Range("B" & j)) Then
            .Range("C" & j).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]" & .Range("B" & j) & "'!$G$8"
            .Range("D" & j).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]" & .Range("B" & j) & "'!$B$8"
        End If
    Next j
End With
ActiveWorkbook.Close False

End Sub
Public Function FeuilleExiste(FeuilleAVerifier As String) As Boolean
'fonction qui vérifie si la "FeuilleAVerifier" existe dans le Classeur actif
'par Excel-Malin.com ( https://excel-malin.com )

On Error GoTo SiErreur
Dim Feuille As Worksheet

    FeuilleExiste = False
    For Each Feuille In Worksheets
        If Feuille.Name = FeuilleAVerifier Then
            FeuilleExiste = True
            Exit Function
        End If
    Next Feuille
Exit Function

SiErreur:
MsgBox "Une erreur s'est produite..."
FeuilleExiste = CVErr(xlErrNA)
End Function

Je comprends toutes tes remarques et c'est vrai que la macro est beaucoup mieux optimisée ainsi !

Je te remercie beaucoup pour ton aide, mon fichier est maintenant opérationnel !

Bonne continuation

Bonne continuation

A toi également !

Rechercher des sujets similaires à "fermer feuille dialogue"