IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

showpopup + onaction ne se lance pas [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut showpopup + onaction ne se lance pas
    Bonjour,

    Dans une application développée sous Excel 2000, j'utilise un menu contextuel qui apparait avec la fonction showpopup.
    le menu apparait bien,
    mais la macro précisée dans OnAction ne se lance pas sur mon poste,
    par contre le programme fonctionne parfaitement sur une autre poste.

    Quel paramétrage peut faire qu'un fichier Excel et ses macros fonctionne bien sur un poste mais pas sur un autre ?

    Merci d'avance.

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu....
    bonjour coyote

    si ton menu apparait c'est que vba est activé maintenant si la macro n'est pas déclanché c'est qu'il y a une erreur

    donne un bout du code pour voir

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    Je rappelle que le même fichier excel fonctionne sur un poste mais pas sur l'autre !!!

  4. #4
    Membre confirmé Avatar de jackborogar
    Homme Profil pro
    Etudiant Ingénierie Financière
    Inscrit en
    Avril 2012
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant Ingénierie Financière
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 290
    Points : 481
    Points
    481
    Par défaut
    Bonjour,

    As tu regardé au niveau de tes références?

    Cdt,
    Pour la carotte, le lapin est la parfaite incarnation du Mal.
    N'oublie pas de ou si la réponse t'a plu ou pas.

    Une fois que le topic est solutionné n'oublie pas

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    aucune référence manquante...

    Voici un bout de code pour afficher le menu contextuel, placé dans un module de classe
    les macros appelées par OnAction sont dans un module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    ' ===============================
    ' DEB - Popup
    Private Sub popup_Liste(ByVal obj As Object)
    Dim strEquipe As String
    strEquipe = obj.Caption
    Dim NumInter As Long
    Dim FinInter As String
    Dim trouveEquipe As String
     
        Dim foundFlag As Boolean
        Dim bar As CommandBar
        foundFlag = False
        For Each bar In CommandBars
            If Not bar.BuiltIn And bar.Name = "cbInter" & strEquipe Then
                foundFlag = True
                bar.Delete
            End If
        Next
        If Not foundFlag Then
            'Set moCBInterventions = Application.CommandBars.Add("cbImage" & strEquipe, msoBarPopup, , True)
            'CommandBars("moCBInterventions").Visible = True
        End If
     
    'Add the parent command bar popup
    Set moCBInterventions = Application.CommandBars.Add("cbInter" & strEquipe, msoBarPopup, , True)
    With moCBInterventions
         .Name = "cbInter" & strEquipe
         .Enabled = True
    End With
     
    If MesBoutons.BackStyle = 1 Then ' Gestion du statut "EN PAUSE"
     
    Dim oCBBilan As Office.CommandBarButton
    Set oCBBilan = moCBInterventions.Controls.Add(msoControlButton, 1, "9990", , True)
    With oCBBilan
        .Caption = "Nouvelle intervention"
        .Enabled = True
        .FaceId = 3732  'Open folder bitmap resource image
        .OnAction = "'btLogAdd """ & CStr(obj.Name) & """'"
        '.OnAction = Obj.Name & "_Click"
        .Style = msoButtonIconAndCaption
        .Visible = True
    End With
     
     
    Dim oCBInter As Office.CommandBarButton
    With Worksheets("Chrono")
        Dim l As Long
        l = 5
        Set oCBInter = moCBInterventions.Controls.Add(msoControlButton, 1, 0, , True)
        With oCBInter
            .BeginGroup = True
            .Enabled = False
            .Height = 1
            '.Caption = "Interventions :"
        End With
     
        While .Range("B" & l).value <> ""
            trouveEquipe = CStr(.Range("B" & l).value)
            NumInter = .Range("D" & l).value
            FinInter = CStr(.Range("G" & l).value)
            If NumInter > 0 And FinInter = "" And trouveEquipe = strEquipe Then
                Set oCBInter = moCBInterventions.Controls.Add(msoControlButton, 1, NumInter, , True)
                With oCBInter
                    '.BeginGroup = True
                    .Caption = "Victime N°" & NumInter
                    .Enabled = True
                    .FaceId = 1758 'Open folder bitmap resource image
                    .OnAction = "'FicheInterShow """ & CStr(strEquipe) & """,""" & CInt(NumInter) & """'"
                    .Style = msoButtonIconAndCaption
                    .Visible = True
                End With
                Debug.Print "SitacBoutons popup_Liste() Créer lien  FicheInterShow Equipe " & strEquipe & " NumInter " & NumInter
            End If
            l = l + 1
        Wend
    End With ' FIN - Worksheets("Chrono")
     
    End If
     
    If obj.BackColor = RGB(0, 255, 0) Then
    Set oCBBilan = moCBInterventions.Controls.Add(msoControlButton, 1, "9990", , True)
    With oCBBilan
        .Caption = IIf(obj.BackStyle = 1, "En pause", "Fin de pause")
        .Enabled = True
        .FaceId = IIf(obj.BackStyle = 1, 342, 343)    'Pause - ampoule : allumée / éteinte
        .OnAction = "'btPause """ & CStr(obj.Name) & """'"
        .Style = msoButtonIconAndCaption
        .Visible = True
        .BeginGroup = True
    End With
    End If
     
    End Sub
    ' FIN - Popup
    et le code pour l'ajout d'une intervention
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub LogAdd(ByRef equipe As Object, Optional ByVal Log As String = "")
    ' Ajoute une ligne intervention
    Dim NumInter As Long
    Dim CurLig As Long
    CurLig = TrouveFinTableau()
    With Worksheets("Chrono")
        NumInter = .Range("D3").value + 1
        .Range("A" & CurLig).value = Now()
        .Range("B" & CurLig).value = equipe.Caption
        .Range("C" & CurLig).value = "En intervention"
        .Range("D" & CurLig).value = IIf(equipe.Tag = "OUI", NumInter, "")
        '.Range("D" & CurLig).value = IIf(Equipe.Tag = "OUI", NumInter, Equipe.Caption & "-" & Time & "")
        .Range("E" & CurLig).value = Log
        Worksheets("Config").Range("NumInter").value = NumInter
        equipe.BackColor = RGB(255, 0, 0)
    End With
    Debug.Print "SitacModule LogAdd " & equipe.Name & " " & equipe.BackColor
    If equipe.Tag = "OUI" Then
        MsgBox "Pour " & equipe.Caption & vbCrLf & "Victime numéro " & NumInter, vbInformation + vbApplicationModal, "SItuation TACtique"
    Else
        MsgBox Equipe.Caption & " ne gère pas de victime"
    End If
    End Sub
    ou l'appel à la fiche d'intervention
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub FicheInterShow(ByVal equipe As String, ByVal NumInter As Long)
    'Sub FicheInterShow(ByVal Equipe As Object, ByVal NumInter As Long)
        Dim CurInter As Long
        CurInter = TrouveInter(equipe, NumInter)
        If CurInter > 1 Then
            Worksheets("Config").Range("NumInter").value = NumInter
            Load FicheIntervention
            FicheIntervention.TextBoxLig = CurInter
            FicheIntervention.TextBoxEquipe = equipe
            FicheIntervention.TextBoxInter = NumInter
            FicheIntervention.TextBoxBilan = Worksheets("Chrono").Range("E" & CurInter).value
            FicheIntervention.TextBoxSuivi = Worksheets("Chrono").Range("F" & CurInter).value
            FicheIntervention.Show vbModal
        Else
            MsgBox "Pas d'intervention " & NumInter & " pour " & equipe
            Worksheets("Config").Range("NumInter").value = 0
        End If
    End Sub

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    Je viens de rendre compte que tu travailles sur 2000 il me semble avoir entendu parler qu'avec "commandbar" il y avais des problèmes mais j'avoue que je ne me suis pas trop pencher sur la question d'autres pourront infirmer ou confirmer ce que je dis.

    Cela expliquerait que sur un autre poste équipé d'une version ultérieure d'excel cela fonctionne.

    A creuser.

    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, j'ai des applications avec des menus contextuels qui tournent sans problèmes d'Excel 97 à 2007, sans aucune adaptation du code VBA correspondant à ces menus.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Salut, j'ai des applications avec des menus contextuels qui tournent sans problèmes d'Excel 97 à 2007, sans aucune adaptation du code VBA correspondant à ces menus.
    Peux-tu poster ici un code de menu contextuel avec un .OnAction qui passe plusieurs paramètres ?

    merci

  9. #9
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, voir un exemple de PopUp Menu qui tourne d'Excel 97 à 2007.
    C'est toi qui a le problème et donc on est plusieurs à attendre ton code récalcitrant.

  10. #10
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par coyote90 Voir le message
    Peux-tu poster ici un code de menu contextuel avec un .OnAction qui passe plusieurs paramètres ?
    merci
    Bonjour,
    Ce n'était pas la question initiale...

    Pour passer des paramètres avec OnAction, il faut ajouter des simples quotes et une quirielle de doubles quotes.
    Cela donne par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    .OnAction = "'MaMacro1 ""Param1"",""Param2"",10'"
    'Param1 et 2 étant des paramètres de type String
    '10 étant un paramètre de type Integer
     
    .OnAction = "'MaMacro2 """ & MaVar & """'"
    'exemple pour passer une variable en paramètre
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par fring Voir le message
    Bonjour,
    Ce n'était pas la question initiale...
    Certe ce n'était pas la question initiale, mais il semblerait que ce soit l'origine du blocage.

    "peut être lié passage au sp3 de office 2000"

    merci pour votre aide.

  12. #12
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Ton problème est résolu ?
    Si oui, pense à le signaler en cliquant là -->
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par fring Voir le message
    Ton problème est résolu ?
    Si oui, pense à le signaler en cliquant là -->
    ce n'est pas encore résolu... je ne manquerais pas de le signaler en temps utiles.

    J'ai trouvé sur un autre forum le même problème signalé.
    Il est suggéré de créer une fonction qui retournera la chaine de texte de OnAction
    malheureusement, dans ce cas ma procédure est lancée deux fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function BuildProcArgString(ByVal ProcName As String, ParamArray args() As Variant) As String
        Dim TempArg As Variant
        Dim Temp As String
        For Each TempArg In args
            Temp = Temp + Chr(34) + TempArg + Chr(34) + ","
        Next
        BuildProcArgString = ProcName + "(" + Left(Temp, Len(Temp) - 1) + ")"
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OnAction = BuildProcArgString("MyProc", "A", "B", "C") 'You can add any number of arguments here!

  14. #14
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Pour aller de Bruxelles à Paris, on peut passer par Milan...
    Je ne vois pas pourquoi passer par une fonction

    Supposons que tu as une macro "test" avec 3 paramètres de type String
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test(Param1 As String, Param2 As String, Param3 As String)
        MsgBox "Param1 : " & Param1 & Chr(10) & "Param2 : " & Param2 & Chr(10) & "Param3 : " & Param3
    End Sub
    La propriété OnAction du bouton s'écrira de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OnAction = "'test ""Paramètre 1"",""Paramètre 2"",""Paramètre 3""'"
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    C'est exactement ce que j'ai dans mon code cf post 5 ci-dessus.
    Mais ça ne fonctionne pas / plus (sous excel 2000 version = 9.0.6926 SP-3 ).

    Je viens de faire un test :
    • Désinstallation complète de office2000.
    • Installation de la version de base : le programme fonctionne
    • Installation du SR-1 : le programme fonctionne
    • Installation du SP-3 : le programme ne fonctionne plus.

    note : Utilisation de office 2007 : le programme fonctionne

    Je ne trouve pas de descriptif exhaustif du SP-3.
    Mais je vois qu'il existe quelques correctifs post SP-3.
    Par contre je ne sais lequel appliquer et je ne trouve pas de pack global.

    Si vous avez ces infos, je suis très intéressé.

  16. #16
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Je n'ai malheureusement plus la version 2000 pour pouvoir tester mais es-tu certain que c'est la propriété OnAction qui coince ? Ca ne serait pas plutôt quelque chose dans la macro lancée par OnAction ? As-tu fait un simple test comme l'exemple que je t'ai montré ?
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    J'ai bien entendu commencé par des tests simples, voire même des OnAction sans passage de paramètres.

    Heureusement, je peux vous annoncer aujourd'hui que le problème est RESOLU et provenait bien du passage au SP-3.

    J'ai trouvé dans un autre forum une liste des correctifs post SP-3.

    Après avoir appliqué ces patchs, le programme re-fonctionne avec le code "standard".
    La nouvelle version d'excel est référencée 9.0.8968 SP-3

    merci pour votre aide.
    espérant que le lien pourra aider d'autres développeurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bootloader qui ne lance pas le Kernel
    Par Jb59 dans le forum Programmation d'OS
    Réponses: 2
    Dernier message: 01/08/2005, 22h29
  2. mmc.exe qui ne se lance pas
    Par r0d dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 27/04/2005, 17h11
  3. [Kylix] Ne se lance pas sous Fedora core 3
    Par John@EuroDevz dans le forum EDI
    Réponses: 3
    Dernier message: 14/02/2005, 16h27
  4. Mysql ne se lance pas problème de socket
    Par Riko dans le forum Installation
    Réponses: 5
    Dernier message: 05/02/2004, 09h28
  5. Envoi d'un mail en VBA: outlook ne se lance pas
    Par Hannibal dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/06/2003, 15h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo