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 :

VBA : INDEX avec MAX IF et ROW


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Par défaut VBA : INDEX avec MAX IF et ROW
    Salut la compagnie,

    me revoila sur ce super forum car je suis encore bloqué

    Alors voila, je dois mettre en forme un fichier et ensuite récuperer certaines valeurs, j'ai réussi la partie de la mise en forme (doublons, type, etc ...) mais il me reste la partie recherche de valeurs.

    J'ai trouvé la formule en excel qui est la suivante :

    =INDEX($C$1:$C$19;MAX(IF(($A$22=$A$1:$A$19)*($B$21=$G$1:$G$19);ROW($C$1:$C$19);0)))

    suivi de ctrl+shift+enter

    mais impossible de faire la même en vba (aide de l'enregisteur de macro aussi)

    Et j'espere ne pas devoir en arriver à devoir combiner des boucle for pour les 2 conditions if, des autofilter ou autre ...


    En gros l'idée (j'explique la formule ci-dessus) est de récuperer un nombre dans la colonne C. Ce nombre est récupérer si la condition 1 (ici en A22) et la condition 2 (ici en B21) sont réunis. Puis je récupére ensuite le numéro de la ligne et comme je connais déjà la colonne (la C) c'est tout bon.


    Avez vous une ou plusieurs pistes pour arriver à mes fins ?


    D'avance merciiiii

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par Nutella14 Voir le message
    mais impossible de faire la même en vba (aide de l'enregisteur de macro aussi)
    Si la formule de calculs entrée manuellement fonctionne,
    il suffit de rééditer l'opération en activant au préalable l'Enregistreur de macro !

    Et en cas de souci avec le code ainsi généré, conformément aux règles de ce forum, il suffit de le poster via l'icône #

    Sans compter les tutoriels dédiés aux formules en VBA !

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Par défaut
    je me suis mal exprimé ... j'ai bien réussi à faire l'enregistreur de macro mais le resultat ne me convient pas car je dois ensuite faire une boucle dessus (double boucle même)

    Selection.FormulaArray = _
    "=INDEX(R1C3:R19C3,MAX(IF((RC[-1]=R1C1:R19C1)*(R21C2=R1C7:R19C7),ROW(R1C3:R19C3),0)))"


    Je dois entuite faire avancer la formule en colonne ou juste la seconde condition bouge
    R21C2 / R21C3 / R21C4 ...

    et en ligne ensuite
    R2-1 / RC-2 ...

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Par défaut
    up

    je vais essayer de redéfinir mon problème sur un exemple :

    imaginons le tableau suivant :

    Prenom Nom Age
    Pierre X 12
    Paul Y 14
    Jean Z 12
    Jean X 12
    Pierre Y 14

    Je cherche donc avoir un code me donnant selon un certain prénom et un certain nom l'âge.
    Sachant que ce travail doit être fait 2 fois car la recherche sera faite pour tous les uniques prénoms il me faudra tous les âges.

    Soit un tableau type suivant :

    X Y Z
    Pierre 12 14 0
    Paul 0 14 0
    Jean 12 0 12

    Maintenant que la problèmatique est un peu plus clair maintenant j'espere que vous avez quelques pistes à me fournir

    La mise en forme (récupération des prenoms unique, noms en colonne etc) a été fait, on peu condirerer que je suis avec le tableau suivant et en cellule B2 ^^

    X Y Z
    Pierre
    Paul
    Jean


    Ce que je disais précédement c'est que en excel cette formule marche très bien
    Selection.FormulaArray = _
    "=INDEX(R1C3:R19C3,MAX(IF((RC[-1]=R1C1:R19C1)*(R21C2=R1C7:R19C7),ROW(R1C3:R19C3),0)))"

    (formule extraite de l'enregistreur de macro)

    mais je n'arrive pas à la faire "boucler" 2 fois pour arriver à mon résultat voulu (qui en vrai sera un peu plus tordu vu que je ne voudrai pas de 0 mais si jamais il y a un 0 alors mettre le nombre de la case précédente (à gauche), si c'est la premiere alors laisser 0, tout un programme)

    D'avance merci !!!!

  5. #5
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut
    Bonjour,

    Voici, si j'ai bien compris (évidemment, adapter les plages sources et destination en conséquences...)
    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
    Sub RecupAges()
      Dim oRangeDest As Range
      Dim oRangeSource As Range
      Dim oCellD As Range
      Dim oCellS As Range
      Dim i As Long
      'Définir la plage avec liste des prénoms du tableau final
      Set oRangeDest = Worksheets("Feuil2").Range("A2:A4")
      'Définir la plage avec liste des prénoms du tableau source
      Set oRangeSource = Worksheets("Feuil1").Range("A2:A6")
      For Each oCellD In oRangeDest
        i = 0
        For Each oCellS In oRangeSource
          If oCellD = oCellS Then
            i = i + 1
            oCellD.Offset(0, i) = oCellS.Offset(0, 2)
          End If
        Next
      Next
    End Sub
    Dis-nous quoi !

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Par défaut
    Tout d'abord merci beaucoup pour ta réponse !

    Ce code serait parfait si le tableau final ne prennait pas en compte le nom mais j'en ai besoin.


    Le code actuel me donne pour chaque prénoms tous les ages possibles l'un à la suite de l'autre, et dans l'ordre dans lequel il les trouve, à savoir :

    X Y Z
    Pierre 12 14
    Paul 14
    Jean 12 12

    Sachant que le "1er" 12 de Jean correspond à celui de Y il me faudrait celui du X.


    J'ai essayé de rajouter une seconde boucle avec les plages de noms ainsi qu'une autre condition à valider mais rien n'y fait


    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
    Sub RecupAges()
      Dim PrenomsDestination As Range
      Dim PrenomsSource As Range
      Dim NomsDestination As Range
      Dim NomsSource As Range
      Dim PCellD As Range
      Dim PCellS As Range
      Dim NCellD As Range
      Dim NCellS As Range
      Dim i As Long
      Dim p As Long
      'Définir la plage avec liste des prénoms du tableau final
      Set PrenomsDestination = Worksheets(4).Range("A6:A7")
      'Définir la plage avec liste des prénoms du tableau source
      Set PrenomsSource = Worksheets(1).Range("A2:A7500")
     
      'Définir la plage avec liste des noms du tableau final
      Set NomsDestination = Worksheets(4).Range("B5:LM5")
      'Définir la plage avec liste des noms du tableau source
      Set NomsSource = Worksheets(1).Range("G2:G7500")
     
     
      For Each PCellD In PrenomsDestination
        i = 0
      For Each NCellD In NomsDestination
         p = 0
     
        For Each PCellS In PrenomsSource
        For Each NCellS In NomsSource
          If PCellD = PCellS And NCellD = NCellS Then
            i = i + 1
            p = p + 1
            PCellD.Offset(0, i) = PCellS.Offset(0, 2)
          End If
        Next
      Next
      Next
      Next
    End Sub

Discussions similaires

  1. [XL-2003] VBA problème avec la une boucle for range.end(xlup).row après suppression de lignes
    Par JohnNC115 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 25/01/2011, 10h21
  2. Problème d'index avec load data file
    Par bruno782 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/03/2005, 12h11
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Index avec conditions
    Par marhnix dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/03/2004, 10h48
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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