Puis-je faire un bip Excel quand un calcul est terminé?

13

J'ai ces très longs calculs dans Excel. Je voudrais détourner mon attention de l'écran et faire quelque chose à mon bureau, mais être alerté lorsque le calcul est terminé.

Des idées?

Eliyahu
la source
1
Comment faites-vous exactement le calcul? Si c'est en VBA, pourquoi ne pas utiliser la méthode "Beep" de VBA ? Qu'avez-vous déjà essayé?
Ƭᴇcʜιᴇ007
2
@ techie007 pas VBA. Fonctionne uniquement dans les grandes feuilles de calcul Excel.
Eliyahu
1
Néanmoins, vous pouvez probablement utiliser la fonction Beep, surtout si votre SS utilise réellement des "fonctions" pour calculer au lieu de "formules". Mais "comment" vous pouvez l'utiliser dépend beaucoup du fonctionnement de votre feuille de calcul, ce que nous ne savons pas. Comme si vous tapiez simplement une valeur dans une cellule et que vous deviez ensuite attendre très longtemps pour qu'elle se termine, ou appuyez-vous sur un bouton pour démarrer le calcul après avoir rempli les cellules? SI vous appuyez sur F11 pour ouvrir l'éditeur VBA, y a-t-il un tas de code là-dedans?
Ƭᴇcʜιᴇ007
@ techie007 J'utilise des formules. Je vais appuyer sur F9 après un tas de travail et je dois attendre.
Eliyahu
Vous auriez dû faire vos calculs d'une autre manière. Ce que vous voulez n'est pas possible si tout ce que vous faites est de dire à Excel d'effectuer les calculs sur le classeur ouvert
Ramhound

Réponses:

21

OK, quelque chose à essayer (les instructions supposent qu'Excel 2007 ou plus récent):

  • Ouvrez votre classeur.
  • Enregistrez-le en tant que SS compatible macro ( .XLSM).
  • Appuyez sur Alt-F11 pour ouvrir la fenêtre de codage VBA.
  • Cliquez avec le bouton droit sur VBAProject ( yourbook.xlsm) et choisissez Insérer → Module.
  • Ouvrez le "Module1" nouvellement créé.
  • Dans le module, collez cet extrait:

    Sub Auto_Open()
        Application.OnKey "{F9}", "F9Handler"
    End Sub
    

    Cela entraînera la réaffectation de la touche F9 à chaque ouverture du SS. Lorsque vous appuyez sur F9, il s'exécute F9Handlerau lieu du calcul habituel.

  • Dans le module, collez cet extrait:

    Sub F9Handler()
        Application.Calculate
        Beep
    End Sub
    

    C'est ce qui sera désormais exécuté lorsque vous atteindrez F9. La première ligne exécute le Application.Calculate(qui est ce que F9 effectue habituellement), puis des bips.

  • Sauvegardez tout.

  • Fermez Excel.
  • (Re) Ouvrez le XLSM que vous avez créé.
  • Profit. :)

Remarque: Vous devrez probablement activer les macros et / ou faire du document un document "de confiance" pour vous assurer que les macros s'exécutent comme prévu.

Plus d'informations:

Ƭᴇcʜιᴇ007
la source
5

Tout comme les autres mentionnés, utilisez la beepcommande en Visual Basic (VB):

Function beepNow()
Beep 
End Function

Pour obtenir le codage VB, vous devez obtenir les informations Developer tabdisponibles (voir: Obtenir l'onglet Développeur visible )

Ainsi, lorsque vous modifiez une cellule ou une condition, un bip retentit. Exemple de macro pour appeler le code VBS ci-dessus:=IF(C2<>C3,beepNow(),"")

BlizzardsGambit
la source
2
Sachez simplement que si vous n'utilisez actuellement aucun UDF VBA, leur introduction peut entraîner une dégradation massive des performances (car, contrairement aux fonctions normales, ils ne s'exécutent que sur le thread principal). Cela ne devrait pas être un problème avec un seul bip, mais si vous commencez à en répandre partout, vous aurez des problèmes.
sapi
1
Malheureusement, cette fonction utilise le haut-parleur de votre PC - pas votre carte son et vos haut-parleurs, mais le haut-parleur interne. FYI - Dans de nombreuses entreprises, le haut-parleur PC a été supprimé ou désactivé afin que vous n'entendiez rien.
raddevus
1

Alternativement, vous pouvez placer le module dans le SS, vous pouvez le mettre dans votre Personal.xlsb. Cela vous permettrait d'avoir le "bip" à la disposition de tous les art. Pour l'exécuter, modifiez la barre d'outils d'accès rapide ou insérez un bouton / une forme pour cliquer dans votre ss et lui affecter la macro.

Ruthie
la source
Bienvenue dans Super User. Cela semble être un commentaire sur les autres réponses plutôt qu'une solution substantiellement différente, à laquelle les messages de réponse sont destinés. Avec un peu plus de représentants, vous pourrez poster des commentaires.
fixer1234
0

La réponse publiée par @ Ƭᴇcʜιᴇ007 est excellente, à une exception près que d'autres ont commentée: la Beepméthode repose sur votre haut-parleur intégré (et parfois désactivé) au sein de l'ordinateur et n'utilise pas vos haut-parleurs, de sorte que vous n'entendez rien.

Je publie une solution de contournement basée sur cette réponse. S'il y avait moins de contenu, j'aurais plutôt publié un commentaire.

Voici ce que j'utilise pour jouer un son avec VBA sous Windows. Il utilise les haut-parleurs de votre ordinateur normal au lieu du haut-parleur intégré et souvent désactivé accessible avec la Beepméthode.

Commencez par la réponse de @ Ƭᴇcʜιᴇ007. Modifiez simplement Beepceci:

PlaySound sound_Up

Vous pouvez modifier le son en passant sound_Upà un autre élément de l'énumération SoundType (liste) dans le code ci-dessous, comme sound_Completeou sound_Notify.

Option Explicit
' --------------------------------------------------
' --------------------------------------------------
'   REQUIRED DLL REFERENCE AND CONSTANTS
' --------------------------------------------------
' Reference to external procedure in DLL to play sounds

#If VBA7 Then
    ' 64-bit MS Office
    Private Declare PtrSafe Function sndPlaySound32bit Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As LongPtr) As LongPtr
#Else
    ' 32-bit MS Office
    Private Declare Function sndPlaySound32bit Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As LongPtr) As LongPtr
#End If

' --------------------------------------------------
' --------------------------------------------------
'   CONSTANTS
' --------------------------------------------------
'
Public Const SOUND_DO_NOT_WAIT          As String = "&H1"
Private Const SOUND_FILES_PATH          As String = "C:\Windows\Media\"

' --------------------------------------------------
' --------------------------------------------------
'   PUBLIC ENUMERATIONS
' --------------------------------------------------
'
Public Enum SoundType
    sound_None = 0
    sound_Up = 1
    sound_Down = 2
    sound_Attention = 3
    sound_Blocked = 4
    sound_Boop = 5
    sound_Complete = 6
    sound_Critical = 7
    sound_Ding = 8
    sound_Error = 9
    sound_Exclamation = 10
    sound_FastDown = 11
    sound_Information = 12
    sound_Notify = 13
    sound_PhoneRing = 14
    sound_RingOut = 15
    sound_Stop = 16
    sound_Tada = 17
    sound_Tone = 18
End Enum

' --------------------------------------------------
' --------------------------------------------------
'   PUBLIC METHODS
' --------------------------------------------------
'
Public Sub PlaySound(ByVal sound As SoundType)
' Plays a sound from a list (see the 'SoundType' Enum).  Code execution continues
'   while sound is playing.
    Dim soundFileName                   As String
    soundFileName = GetSoundFileName(sound)

    If Not soundFileName = vbNullString Then
        sndPlaySound32bit SOUND_FILES_PATH & soundFileName, SOUND_DO_NOT_WAIT
    End If
End Sub

' --------------------------------------------------
' --------------------------------------------------
'   PRIVATE DEPENDENCIES
' --------------------------------------------------
'
Private Function GetSoundFileName(ByVal soundToGet As SoundType) As String
' Returns a windows sound file name (not path) from a member of the custom
'   'SoundType' enumeration.

    Dim fName                           As String

    Select Case soundToGet
    Case sound_Up:          fName = "Speech On.wav"
    Case sound_Down:        fName = "Speech Off.wav"
    Case sound_Attention:   fName = "Windows Battery Low.wav"
    Case sound_Blocked:     fName = "Windows Pop-up Blocked.wav"
    Case sound_Boop:        fName = "Speech Misrecognition.wav"
    Case sound_Complete:    fName = "Windows Print complete.wav"
    Case sound_Critical:    fName = "Windows Critical Stop.wav"
    Case sound_Ding:        fName = "Windows Ding.wav"
    Case sound_Error:       fName = "Windows Error.wav"
    Case sound_Exclamation: fName = "Windows Exclamation.wav"
    Case sound_FastDown:    fName = "Speech Sleep.wav"
    Case sound_Information: fName = "Windows Information Bar.wav"
    Case sound_Notify:      fName = "notify.wav"
    Case sound_PhoneRing:   fName = "Windows Ringin.wav"
    Case sound_RingOut:     fName = "Windows Ringout.wav"
    Case sound_Stop:        fName = "chord.wav"
    Case sound_Tada:        fName = "tada.wav"
    Case sound_Tone:        fName = "Windows Balloon.wav"
    Case Else:              fName = vbNullString
    End Select

    GetSoundFileName = fName
End Function
ChrisB
la source