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

Excel Discussion :

Chercher numéro dans une plage de cellules non contiguës [XL-MAC 2016]


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Musicien
    Inscrit en
    Août 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Août 2018
    Messages : 34
    Points : 13
    Points
    13
    Par défaut Chercher numéro dans une plage de cellules non contiguës
    Bonjour,
    je bute sur ce problème que je pensait simple à résoudre.

    Je cherche un numero (1à10) unique dans une plage de cellules non contigues:

    (X5;X9;X15;X19;X26;X30;X36;X40;AA7;AA17;AA28;AA38;P7;P17;P28;P38;L9;L19;L30;L40;AD12;AD33;H14;H35;D18;D39

    Si ce numero existe je souhaite afficher la valeur de la colonne adjacente (pour être plus précis, si je cherche 7, et que 7 se trouve en D4, je veux afficher la valeur (texte/nom) de C3)

    Je ne souhaite pas utiliser de Macro si cela est possible.

    J'ai nommé ces cellules : celtab1 celtab2, celtab3, est-ce qu'on peut faire une recherche dans celtab* quelque chose comme ça?

    Merci de votre aide.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    EQUIV ou RECHERCHEV ne savent pas chercher dans une zone non linéaire (plus d'une colonne ET plus d'une ligne).

    Il y a peut-être une possibilité en formules matricielles.

    Cela dit, je ne comprends pas trop ton explication sur la position de la valeur à renvoyer par rapport à la valeur trouvée : colonne de gauche et ligne du dessus ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ginofalaci Voir le message
    Bonjour,

    Désolé pour le VBA :

    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
     
     
    Function TrouverValeur(ByVal ValeurATrouver As Integer) As Variant
     
    Dim Cellule As Range, AireDeRecherche As Range
     
        Application.Volatile
     
        Set AireDeRecherche = Sheets("Feuil2").Range("X5,X9,X15,X19,X26,X30,X36,X40,AA7,AA17,AA28,AA38,P7,P17,P28,P38,L9,L19,L30,L40,AD12,AD33,H14,H35,D18,D39")
     
        TrouverValeur = ""
        For Each Cellule In AireDeRecherche
            If Cellule = ValeurATrouver Then TrouverValeur = Cellule.Offset(-1, -1)
        Next Cellule
     
        Set AireDeRecherche = Nothing
     
    End Function

  4. #4
    Membre à l'essai
    Homme Profil pro
    Musicien
    Inscrit en
    Août 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Août 2018
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Oui c'est ça: colonne de gauche et ligne du dessus.
    Pourrait-on imbriquer des INDEX EQUIV avec des OU pour chaque colonne concernée?
    mes cellules en question sont dans des colonnes qui ne contiennent pas d'autres valeurs ou formules.
    Donc est ce possible/raisonnable de faire un genre de =OU(INDEX EQUIV X5:X40)OU(INDEX EQUIV AA7:AA38) OU(INDEX EQUIV P738) etc.. ?

    Je vais regarder la macro, merci.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ginofalaci Voir le message
    Je n'avais pas fait attention que c'était sur Mac. Sans garantie.

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    En supposant
    - que tu ais créé une zone nommée "Test" contenant toutes les cellules de la zone de recherche.
    - que la valeur cherchée est en A1
    - que cette valeur n'est présente QU'UNE SEULE FOIS dans la zone de recherche.

    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDIRECT(ADRESSE(SOMME(SI(Test=A1;LIGNE(Test);0))-1;SOMME(SI(Test=A1;COLONNE(Test);0))-1))
    A valider comme formule matricielle avec Ctrl+Shift+Entrée

    Je n'ai pas testé dans tous les cas. Donc à vérifier.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Musicien
    Inscrit en
    Août 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Août 2018
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Merci je vais tester.

    La macro ne fonctionne pas, sur votre fichier et intégrée dans un autre fichier elle donne une erreur #VALEUR!

    Ce genre de 'function' fonctionne sur Mac, j'en utilise d'autres. Je ne vois pas trop pourquoi celle ci ne fonctionnerais pas.
    Sauf erreur Mac et Win partagent le même code pour Office, mais certaines fonctions ne sont pas implantées.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ginofalaci Voir le message
    N'ayant pas de Mac, je ne pourrai pas vous aider.

    Sinon, que devez vous récupérer comme type de valeur ? Modifiez le type de la fonction de Variant à String, ou autre par exemple ....
    Insérez de Debug.Print (ou l'équivalent dans Mac) dans le code de la fonction pour voir ce qui ne va pas

  9. #9
    Membre à l'essai
    Homme Profil pro
    Musicien
    Inscrit en
    Août 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Août 2018
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    J'ai essayé la macro sur mon windows, et cela fonctionne, je ne comprends pas pourquoi elle ne fonctionne pas sur Mac si quelqu'un a une idée, je suis preneur, car cette Macro me va.

    Menhir, j'ai essayé mais ça ne fonctionne pas. Ni sur Mac ni sur Win. Ni si je remplace la zone 'test' par celle qui fonctionne dans la macro 'AireDeRecherche'
    J'ai sélectionné chacune des cellules et donner le nom 'test', mais on est d'accord qu'entre ces cellules il y a pas mal de données, mais rien d'autre dans les colonnes contenant ces cellules.

  10. #10
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par ginofalaci Voir le message
    Menhir, j'ai essayé mais ça ne fonctionne pas.
    Effectivement, je viens de vérifier, ça ne fonctionne que sur une zone rectangulaire.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Musicien
    Inscrit en
    Août 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Août 2018
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Je cherche toujours la meilleure solution, et je reviens demander si on ne peut pas faire quelque chose avec INDEX EQUIV, vu que ces cellules sont seules dans des colonnes. Il me semblait avoir vu qu'on pouvait utiliser INDEX EQUIV dans une matrice non? https://excel.developpez.com/actu/17...re-Fauconnier/
    Mais j'ai dû mal à voir la mise en place.
    Sinon j'ai finalement pu faire fonctionner la macro sur mon Mac, en fermant tous les classeurs ouverts avec de multiples classeurs d'essais divers... Mais là j'essaie de la réimplanter dans un fichier qui comporte un tableau plus complet et ça bug de nouveau. Je ne suis pas sûr de la bonne façon de le faire, mais suis assez convaincu que c'est la même méthode que sur Windows.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ginofalaci Voir le message

    Bonjour,

    Pouvez-vous mettre votre code en ligne et indiquer la ligne où cela plante ?

  13. #13
    Membre à l'essai
    Homme Profil pro
    Musicien
    Inscrit en
    Août 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Août 2018
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Merci de votre intérêt.
    Je n'avais pas mis à jour le nom de la feuille.
    Le nom comporte un espace dois-je l'écrire ainsi ou il faut rajouter quelque chose?
    Sheets("Tableau 1")
    Je crois que ça va marcher, je dois ajuster pas mal de petites choses, la cellule à renvoyer n'est pas toujours situé au même endroit par rapport à celle recherchée.
    Je vais regarder tout ça tranquillement et je reviendrais vous dire ensuite. Merci en tout cas.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Musicien
    Inscrit en
    Août 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Août 2018
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Petite question au lieu de revoir toute ma mise en page pour aller avec cette macro, j'imagine que c'est possible de séparer le 'range' en deux, pour qu'une partie renvois la cellule colonne de gauche 1 au dessus, et l'autre colonne de droite 1 au-dessus?
    voici mes cellules et les deux 'range'

    X5,X9,X15,X19,X26,X30,X36,X40,AA7,AA17,AA28,AA38, --> 1 colonne à gauche, 1 ligne au dessus

    P7,P17,P28,P38,L9,L19,L30,L40,AD12,AD33,H14,H35,D18,D39 --> 1 colonne à droite, 1 ligne au dessus.

    cela réglerait tout mon tableau.

    merci

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ginofalaci Voir le message
    A tester, la fonction agit sur la feuille active. La position par défaut est G.

    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
     
     
    Function TrouverValeur(ByVal ValeurATrouver As Integer, ByVal Position As String) As Variant
     
    Dim Cellule As Range, AireDeRechercheGauche As Range, AireDeRechercheDroite As Range
     
     
        Application.Volatile
     
        TrouverValeur = ""
     
        With ActiveSheet
     
             Set AireDeRechercheGauche = .Range("X5,X9,X15,X19,X26,X30,X36,X40,AA7,AA17,AA28,AA38")
             Set AireDeRechercheDroite = .Range("P7,P17,P28,P38,L9,L19,L30,L40,AD12,AD33,H14,H35,D18,D39")
     
             If UCase(Mid(Position, 1, 1)) = "G" Then
                For Each Cellule In AireDeRechercheGauche
                    If Cellule = ValeurATrouver Then
                       TrouverValeur = Cellule.Offset(-1, -1)
                    End If
                Next Cellule
             Else
                For Each Cellule In AireDeRechercheDroite
                    If Cellule = ValeurATrouver Then
                       TrouverValeur = Cellule.Offset(-1, 1)
                    End If
                Next Cellule
     
             End If
        End With
     
     
        Set AireDeRechercheGauche = Nothing
        Set AireDeRechercheDroite = Nothing
     
    End Function

    Pièce jointe 412166


    Sinon pour repérer vos cellules :
    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
     
     
    Sub ChangerLaCouleurDesCellules()
     
    Dim Cellule As Range, AireDeRechercheGauche As Range, AireDeRechercheDroite As Range
     
     
        With ActiveSheet
     
             Set AireDeRechercheGauche = .Range("X5,X9,X15,X19,X26,X30,X36,X40,AA7,AA17,AA28,AA38")
             For Each Cellule In AireDeRechercheGauche
                 Cellule.Interior.Color = RGB(255, 255, 0)
             Next Cellule
             Set AireDeRechercheDroite = .Range("P7,P17,P28,P38,L9,L19,L30,L40,AD12,AD33,H14,H35,D18,D39")
              For Each Cellule In AireDeRechercheDroite
                 Cellule.Interior.Color = RGB(0, 255, 0)
             Next Cellule
     
        End With
     
     
        Set AireDeRechercheGauche = Nothing
        Set AireDeRechercheDroite = Nothing
     
    End Sub
    Dernière modification par Invité ; 16/09/2018 à 04h21.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Musicien
    Inscrit en
    Août 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Août 2018
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup, je teste ça d'ici demain.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Musicien
    Inscrit en
    Août 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Août 2018
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Bonsoir, je viens de rentrer et de jeter un oeil, je préfère demander tout de suite avant d'y passer trop de temps, je ne comprends pas ce qu'est "G", la position par défaut.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ginofalaci Voir le message
    je ne comprends pas ce qu'est "G", la position par défaut.
    Il faut indiquer à la fonction quelle série vous souhaitez obtenir le résultat. G : gauche, D : ou plutôt autre que G, à droite. Cela veut dire que s'il n'y a pas le caractère G, c'est la série de droite qui sera prise en référence.
    Erreur de ma part, c'est la série de droite qui est prise par défaut.
    Dernière modification par Invité ; 16/09/2018 à 04h21.

  19. #19
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ginofalaci Voir le message
    Si les valeurs saisies ne peuvent se rencontrer plus d'une fois dans les deux aires, alors cette fonction peut être utilisée :

    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
     
    Function TrouverValeurV2(ByVal ValeurATrouver As Integer) As Variant
     
    Dim Cellule As Range, AireDeRechercheGauche As Range, AireDeRechercheDroite As Range
     
        Application.Volatile
     
        TrouverValeurV2 = ""
     
        With ActiveSheet
     
             Set AireDeRechercheGauche = .Range("X5,X9,X15,X19,X26,X30,X36,X40,AA7,AA17,AA28,AA38")
             Set AireDeRechercheDroite = .Range("P7,P17,P28,P38,L9,L19,L30,L40,AD12,AD33,H14,H35,D18,D39")
     
             For Each Cellule In AireDeRechercheGauche
                    If Cellule = ValeurATrouver Then
                       TrouverValeurV2 = Cellule.Offset(-1, -1)
                       Exit Function
                    End If
                Next Cellule
                For Each Cellule In AireDeRechercheDroite
                    If Cellule = ValeurATrouver Then
                       TrouverValeurV2 = Cellule.Offset(-1, 1)
                    End If
                Next Cellule
     
        End With
     
        Set AireDeRechercheGauche = Nothing
        Set AireDeRechercheDroite = Nothing
     
    End Function

  20. #20
    Membre à l'essai
    Homme Profil pro
    Musicien
    Inscrit en
    Août 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Août 2018
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Je vous remercie, je pense que ça va marcher, je dois travailler un peu dessus pour l'adapter, car la distance vers les valeurs à renvoyer augmente plus on va vers la gauche et plus on va vers la droite. Mais je crois que j'ai compris le système, et que je devrais pouvoir détailler plus ma selection de cellules, pour incrémenter les positions à renvoyer, en ajoutant AireGauche1, AireGauche2 , AireDroite1, AireDroite2 et autant de autant de Cellule.Offset(-1,1), Cellule.Offset(-2,1) etc... Je reviens quand j'ai fini ou si je bloque vous redemander un conseil.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Récupérer un numéro de ligne dans une plage de cellules
    Par clem256 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/03/2017, 16h02
  2. [OpenOffice][Tableur] Ecrire dans une plage de cellule
    Par jmjmjm dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 08/05/2007, 15h20
  3. Comment sélectionner une plage de cellules non consécutives?
    Par jokair dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/08/2006, 16h36
  4. Pb de lecture données dans une plage de cellule avec itération
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/07/2006, 14h33
  5. Remplacer "#N/A" dans une plage de cellule.
    Par Yogi_01 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/04/2006, 15h59

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