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 :

Utiliser INDEX en macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Par défaut Utiliser INDEX en macro
    Bonjour,


    cela fait un petit moment que je ne me suis pas plongée dans le code VAB et j'aurais besoin de vous.
    Je cherche à pouvoir utiliser la fonction suivante en macro VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX($D:$D, SMALL(IF($J$10=$A:$A, ROW($D:$D)-ROW($D$1)+1), COLUMN(A1)))
    j'ai tenté un début de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub logicielsmachines()
     
    Dim NbLignestestmacro As Integer
    Dim k As Integer
     
    k = 2
     
    NbLignestestmacro = Application.CountA(Range("'after effect'!A:A"))
     
    Application.ScreenUpdating = False
     
    While k <= NbLignestestmacro
     
    Range("after effect!" & "N" & k).Value = Application.INDEX(Range("after effect!" & "D" & k), SMALL(IF(Range("after effect!" & "J" & k).Value = (Range("after effect!" & "A" & k)), ROW(Range("after effect!" & "D"+1))-ROW(Range("after effect!" & "D"+1), COLUMN(Range("after effect!" & "A1")))
    mais dès lors, j'ai un problème avec la dernière ligne.

    Pourriez-vous m'aider ?


    Merci

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    essayes ce code entre autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("after effect").Range("N" & k).FormulaLocal = "=INDEX($D:$D, SMALL(IF($J$10=$A:$A, ROW($D:$D)-ROW($D$1)+1), COLUMN(A1)))"
    Sheets("after effect").Range("N" & k) = Sheets("after effect").Range("N" & k).Value
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Par défaut
    merci de votre réponse.

    Le code ci dessus me donne une réplique exacte de la colonne D au lieu de prendre en compte les éléments de la colonne J

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    A toi d'adapter pour les bonnes colonnes, savoir dans quel "range" placer le code, je n'ai repris que ce que tu demandais
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Par défaut
    J'ai effectivement repris le code et l'ai appliquer selon mes colonnes. Peut-être n'ai je pas été assez claire.

    La formule index me permet de trouver tous les éléments correspondant à une valeur. Par exemple:

    données:

    orange 1
    banane 2
    cerise 3
    orange 4

    résultats:

    orange 1 4


    Ayant beaucoup de données, je souhaiterais pouvoir lancer cette macro

  6. #6
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Dans votre code initial, vous pouvez remplacer
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.Index
    Cdt

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Par défaut
    en fait, la réponse de casefayere devrait fonctionner mais je n'ai pas le même résultat en utilisant la formule dans la macro que dans une cellule active directement

    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
    Sub logicielsmachines()
     
    Dim NbLignestestmacro As Integer
    Dim k As Integer
     
    k = 2
     
    NbLignestestmacro = Application.CountA(Range("'TABLEAU DE CONTROLE'!A:A"))
     
    While k <= NbLignestestmacro
     
    Sheets("TABLEAU DE CONTROLE").Range("E" & k).FormulaLocal = "=INDEX($B:$B, SMALL(IF($C2=$A:$A, ROW($B:$B)-ROW($B$1)+1), COLUMN(A$1)))"
    Sheets("TABLEAU DE CONTROLE").Range("E" & k) = Sheets("TABLEAU DE CONTROLE").Range("E" & k).Value
     
    k = k + 1
     
    Wend
     
    End Sub

  8. #8
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    La ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("TABLEAU DE CONTROLE").Range("E" & k) = Sheets("TABLEAU DE CONTROLE").Range("E" & k).Value
    recopie la valeur d'une cellule dans cette même cellule.

    Vérifiez où vous souhaitez recopier cette valeur.

    Cdt

  9. #9
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Par défaut
    cette ligne ne me semble pas très utile, je l'ai donc enlevé mais j'ai toujours le même résultat. J'ai attaché un fichier excel pour vous montrer.

    En appliquant la macro, j'ai 1 et 0 qui s'affiche, en appliquant directement la formule, j'ai la bonne réponseexemple.xlsx

  10. #10
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    En pièce jointe une proposition de classeur qui fait la même chose que votre exemple.
    En modifiant la structure de la feuille, on peut utiliser le solveur.

    Cdt

    EDIT: Toutes mes excuses, le fichier en pièce était relatif à un autre post...
    Fichiers attachés Fichiers attachés

  11. #11
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Par défaut
    je n'ai pas l'impression d'avoir compris votre fichier excel.

    J'utilise la macro suivante avec le fichier excel qui s'appelle exemple et je ne comprends pas pourquoi je n'obtiens pas le même résultat qu'en appliquant directement la formule

    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
    Sub logicielsmachines()
     
    Dim NbLignestestmacro As Integer
     
    Dim k As Integer
     
     
     
    k = 2
     
    NbLignestestmacro = Application.CountA(Range("'Sheet1'!A:A"))
     
    While k <= NbLignestestmacro
     
     
     
     
    Sheets("Sheet1").Range("E" & k).FormulaLocal = "=INDEX($B:$B, SMALL(IF($D2=$A:$A, ROW($B:$B)-ROW($B$1)+1), COLUMN(A$1)))"
     
     
     
     
     
    k = k + 1
     
    Wend
     
     
    End Sub

  12. #12
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    Quand on parle de "FormulaLocal" il faut remettre la formule telle qu'elle apparait avec Excel, exemple "If" = "Si"

    je dois encore me déplacer mais espère que quelqu'un t'aidera entre temps.
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  13. #13
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Par défaut
    mon excel est en anglais, j'ai bien fait un copié collé de la formule telle quelle

  14. #14
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Dans Excel, le séparateur de liste est le point-virgule alors que c'est la virgule dans VBA.

    Dans votre code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Sheet1").Range("E" & k).FormulaLocal = "=INDEX($B:$B, SMALL(IF($D2=$A:$A, ROW($B:$B)-ROW($B$1)+1), COLUMN(A$1)))"
    remplacez les virgules par des points virgules chaque fois que nécessaire.

    Cdt

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par letravailclasanté Voir le message
    cette ligne ne me semble pas très utile, je l'ai donc enlevé mais j'ai toujours le même résultat. J'ai attaché un fichier excel pour vous montrer.

    En appliquant la macro, j'ai 1 et 0 qui s'affiche, en appliquant directement la formule, j'ai la bonne réponseexemple.xlsx
    Bonjours,

    Quel est la bonne formule dans Excel ? Dans le fichier Excel, le résultat ne donne pas la plus petite valeur ?
    Ananas = 5 au lieu de 3 par exemple.

Discussions similaires

  1. Utilisation de la macro XL4 LIRE.DOCUMENT
    Par Bigalo dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 05/02/2008, 21h58
  2. Réponses: 17
    Dernier message: 03/01/2008, 14h40
  3. [VBA] utilisation d'une macro excel 2003 sur excel 2004 for mac
    Par fofika dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/11/2007, 16h30
  4. Utilisation d'une macro d'un autre classeur
    Par madislak dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/07/2006, 15h00
  5. [Sybase] Utilisation indexes sur table Proxy
    Par MashiMaro dans le forum Sybase
    Réponses: 2
    Dernier message: 20/02/2004, 11h20

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