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 :

Challenge : formule matricielle ne marche plus quand elle est insérée par VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur occasionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Par défaut Challenge : formule matricielle ne marche plus quand elle est insérée par VBA
    Bonjour,

    Un petit casse-tête (pour moi en tout cas )
    J'ai une feuille excel avec les données suivantes en A3:B7 :

    5 A
    3 B
    6 C
    3 D
    4 E


    Dans la même feuille, j'ai une formule matricielle utilisée pour faire du tri dynamique sur ces données. Appliquée au petit tableau ci-dessus, elle donne (tri par ordre décroissant qui gère les doublons éventuels) :

    6 C
    5 A
    4 E
    3 B
    3 D


    La formule (insérée par exemple en H9:I13) est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(INDEX($A$3:$B$7;;COLONNE($A$3:$B$7)-COLONNE(INDEX($A$3:$B$7;;1))+1);EQUIV(GRANDE.VALEUR($A$3:$A$7-LIGNE($A$3:$A$7)/10^10;LIGNE($A$3:$A$7)-LIGNE(INDEX($A$3:$A$7;1))+1);$A$3:$A$7-LIGNE($A$3:$A$7)/10^10;0))
    Je précise que la formule est censée traiter des tableaux plus grands que l'exemple ci-dessus (ce qui explique que certaines parties de la formule soient superflues pour un tableau 5x2).
    Cependant, la formule marche très bien si je l'entre directement dans la feuille excel (via Ctrl+Maj+Entrée).
    Par contre, lorsque j'essaie de l'insérer par le code suivant, il y a un problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Test()
    Range("H9:I13").FormulaArray = "=INDEX(INDEX(R3C1:R7C2,,COLUMN(R3C1:R7C2)-COLUMN(INDEX(R3C1:R7C2,,1))+1),MATCH(LARGE(R3C1:R7C1-ROW(R3C1:R7C1)/10^10,ROW(R3C1:R7C1)-ROW(INDEX(R3C1:R7C1,1))+1),R3C1:R7C1-ROW(R3C1:R7C1)/10^10,0))"
    End Sub
    Il n'y a pas de message d'erreur, le code s'exécute correctement. En revanche, dans la feuille de calcul, j'obtiens le résultat suivant en H9:I13 :

    #REF! #REF!
    5 5
    #REF! #REF!
    A A
    #REF! #REF!


    Il suffit toutefois de sélectionner la plage H9:I13, appuyer sur F2 puis sur Ctrl+Maj+Entrée (sans toucher à la formule) et... miracle : le résultat correct apparaît !

    Est-ce que quelqu'un pourrait m'expliquer pourquoi VBA+Excel ont ce comportement bizarre et trouver une façon d'obtenir directement le bon résultat à partir du code VBA sans avoir à "valider" derrière ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub Trier()
     
    Range("A3:A7").Sort [A3], xlDescending, MatchCase:=True
     
    End Sub
    _____________
    Cordialement

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur occasionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Par défaut
    Merci pour la réponse mais ce n'est pas ce que je souhaite faire.
    Il ne s'agit pas de trier les données en statique mais d'insérer une formule de tri dynamique : si les valeurs de mon tableau de départ changent, le tableau trié doit changer aussi.
    J'ai donc ma formule, mais comme elle est relativement longue et fastidieuse à taper, je voudrais automatiser son insertion en utilisant du code VBA. Et c'est là le problème...

  4. #4
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonjour

    Citation Envoyé par Tchesko Voir le message

    ... si les valeurs de mon tableau de départ changent, le tableau trié doit changer aussi.
    Vous pouvez utiliser Private Sub object_Change( )
    pour déclencher le tri des données

    Exemples
    Données reprises E3:E7
    Plage a trier H10:H14

    Toute modification dans la plage de données va déclancher la macro
    et trier la plage H10:H14

    Code testé qui fonctionne

    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
     
    Private Sub Worksheet_Change(ByVal Target As Range) 
     
        Dim Lgn As Long
     
        If Target.Column = 5 Then
     
            Lgn = Target.Row
     
            Select Case Lgn
     
                Case 3 To 7
     
                   Trier
     
            End Select
     
        End If
     
    End Sub
    _______________

    Cordialement

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur occasionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Par défaut
    OK, merci pour cette réponse qui a le mérite de ne pas présenter d'effets secondaires indésirables.
    Il reste toutefois la question qui défie ma curiosité : pourquoi VBA+Excel ont ce comportement bizarre que j'ai décrit dans mon 1er post ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/07/2014, 12h51
  2. Réponses: 1
    Dernier message: 17/07/2011, 18h10
  3. Réponses: 5
    Dernier message: 08/07/2011, 09h56
  4. Réponses: 4
    Dernier message: 11/03/2010, 22h55
  5. Mon site ne marche plus quand il est chargé sur free
    Par HekThor dans le forum Langage
    Réponses: 5
    Dernier message: 12/12/2008, 13h07

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