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 :

Exprimer la condition


Sujet :

Macros et VBA Excel

  1. #21
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 85
    Par défaut Fonctionnement macro selon version Excel.
    Bonjour,

    J'ai testé la macro proposée par Wilfried dans un précédent message (ci-dessous) et elle marche parfaitement sous Excel 2002. Le problème, c'est que certains utilisateurs de mon fichier ont Excel 2000 et sous cette version, la macro ne marche pas, erreur d'exécution d'une des lignes de code. Savez-vous comment résoudre ce problème ?

    Je vous remercie d'avance pour votre aide.



    Citation Envoyé par wilfried_42 Voir le message
    re:

    en voyant le fichier que tu as envoyé, c'est la solution menu popup choisie

    Donc, j'ai modifié ta base pour y accoler en colonne A un code (bidon, un numero progressif) qui doit etre different sur chaque ligne

    le feuille MENU, je 'lai aussi remaniée (Cases bleues, pour l'adaptée à ta base)

    Ce gestionnaire de menus deroulant est entierement adaptable pour toutes les bases de données et la page menu (Cases bleues et entete de colonne est la seule chose que l'utilisateur aie besoin de faire

    Tu disposes de trois procedures disponibles :

    Prep_menu : qui doit etre lancée à chaque modification de la base de donnée d'origine, elle prepare le menu (Feuille Menu) en fonction des colonnes définies entres les cases bleues et la colonne wilindex

    Cre_menu (lancée automatiquement apres un prep_menu, et relancée aussi apres chaque click droit

    aff_menu premettant l'affichage du menu (lancée automatiquement lors d'une click droit)

    Tu as aussi 2 macro evennementielles

    Workbooks_open qui lance les macro prep_menu et cre_menu

    sur la feuille concernée par la saisie
    une macro Worksheet_BeforeRightClick qui lance cre_menu et aff_menu

    Voila c'est tout

    Ton fichier en retour

  2. #22
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Qu'est-ce qui ne fonctionne pas ? Tu ne donnes pas de précision.
    A+

    NB - J'ai retiré Résolu, tu le remettras quand tu le voudras

  3. #23
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 85
    Par défaut Message d'erreur.
    Quand on exécute la macro sous Excel 2000, le message d'erreur suivant apparaît :

    Erreur d'exécution '1004' : Erreur de définition par l'application ou l'objet.

    Ceci fait référence aux lignes de code suivantes dans prep_menu :

    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
    Sub prep_menu()
        Dim i As Integer, j As Integer
        With Sheets("Menu")
            feuille = .Range("B1").Value
            nom_menu = .Range("B3").Value
            nbc_menu = .Range("IV1").End(xlToLeft).Column - 2
            nbc_base = Sheets(feuille).Range("IV1").End(xlToLeft).Column
            Dim colonne() As Integer
            If .Cells(1, nbc_menu + 2).Value = "WilIndex" Then
                .Cells(1, nbc_menu + 2).Value = ""
                nbc_menu = nbc_menu - 2
            End If
            ReDim colonne(nbc_menu) As Integer
        
            For i = 1 To nbc_menu
                For j = 1 To nbc_base
                    If .Cells(1, i + 2).Value = Sheets(feuille).Cells(1, j).Value Then colonne(i) = j
                Next j
            Next i
        
            For i = 1 To nbc_menu
                If colonne(i) = 0 Then
                   MsgBox "Erreur : Colonne " & .Cells(1, i + 2).Value & " Inconnue dans la base"
                   Exit Sub
                End If
            Next i
            .Range("C2:" & Chr(68 + nbc_menu) & "65000").ClearContents
        End With
        With Sheets(feuille)
             nbl = .Range("A65500").End(xlUp).Row
             For i = 2 To nbl
                 For j = 1 To nbc_menu
                     Sheets("Menu").Cells(i, j + 2) = .Cells(i, colonne(j))
                 Next j
                 Sheets("Menu").Cells(i, j + 3) = i
             Next i
             Sheets("Menu").Cells(1, nbc_menu + 4).Value = "WilIndex"
        End With
            memfeuille = ActiveSheet.Name
            Sheets("Menu").Range("C:H").Sort _
            Key1:=Sheets("Menu").Range("C2"), Order1:=xlAscending, _
            Key2:=Sheets("Menu").Range("D2"), Order2:=xlAscending, _
            Key3:=Sheets("Menu").Range("E2"), Order3:=xlAscending, _
            Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
        For i = 1 To nbc_menu - 1
            mem = ""
            nbl = Sheets("Menu").Cells(65000, i + 2).End(xlUp).Row
            If i = 1 Then nbl_mem = nbl
            For j = 2 To nbl
                If Sheets("Menu").Cells(j, i + 2).Value = mem Then
                   Sheets("Menu").Cells(j, i + 2).Value = ""
                Else
                   mem = Sheets("Menu").Cells(j, i + 2).Value
                End If
            Next j
        Next i
        cre_menu
    End Sub
    Dois-je passer sous Excel 2002 ou y a-t-il un moyen d'exécuter cette macro sous Excel 2000 ?

    Je vous remercie d'avance pour vos réponses.

  4. #24
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Je n'ai pas la version 2000.

    Il faudrait peut-être regarder dans l'aide de Excel 2000 si la fonction Range.Sort possède les mêmes arguments que dans l'appel du code.

  5. #25
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Remplace les arguments par leurs valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Range("A1:I75").Sort Key1:=Range("A2"), Order1:=1, Key2:=Range( _
            "B2"), Order2:=1, Key3:=Range("D2"), Order3:=1, _
            Header:=1, OrderCustom:=1, MatchCase:=False, Orientation:= _
            1, DataOption1:=0, DataOption2:=0, _
            DataOption3:=0
    Order = 1 = xlAscending
    Header = 1 = xlYes
    Orientation = 1 = xlTopToBottom
    DataOption(n) = 0 = xlNormal
    etc.
    Tu dis

  6. #26
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut Help
    Bonjour !

    J'ai essayé d'adapter la macro de Wilfried à l'un de mes fichiers, au début pas de soucis puis j'ai fais évoluer ma base de donnée (Base Segmentation, 1er onglet) et maintenant j'obtiens le message suivant à l'ouverture du fichier :

    "Erreur d'exécution 424 objet requis" sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Set sm(i, j) = sm(mem_i(j - 1), mem_j(j - 1)).Controls.Add(msoControlButton, 1, , , True)
    Avez vous une idée ?

    Merci d'avance !

    OUTIL 2.xlsm

Discussions similaires

  1. Comment exprimer une condition en html ?
    Par razily dans le forum Débuter
    Réponses: 4
    Dernier message: 04/04/2012, 20h01
  2. comment exprimer une condition sous un fichier xml?
    Par n_adou dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 28/05/2008, 20h28
  3. Exprimer une condition sur des sous-formulaires.
    Par Julieta dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/12/2007, 15h11
  4. Réponses: 4
    Dernier message: 08/12/2007, 15h06

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