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 :

Repérage complexe de cellules


Sujet :

Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 106
    Points : 36
    Points
    36
    Par défaut Repérage complexe de cellules
    Bonjour à tous,

    J'ai un problème dont je ne sors pas! Que je vous explique: j'ai 3 colonnes en X, Y, Z (pour mon exemple X8, Y8, Z8). Et à côté, une plage qui va de AH8 à CO8. Dans cette plage, les colonnes vont par 3 (AH8-AI8-AJ8, puis AK8-AL8-AM8, etc). L'utilisateur va commencer à remplir ces colonnes de gauche à droite, en partant de AH8. Parfois les 3 colonnes seront remplies, parfois 2, parfois une.

    Ce que doivent faire les formules en X, Y, Z: repérer le groupe de colonnes allant le plus à droite, entre AH8 et CO8, contenant au moins une valeur non vide, puis rapatrier ces valeurs.

    Exemple simple: en AH8 j'ai 3, en AI8 2, en AJ8 5; en AK8 4, en AL8 rien, en AM8 rien. Ensuite les 3 colonnes suivantes sont vides. En X8 je devrais donc avoir 4 (valeur de AK8), en Y8 rien ("valeur" de AL8), en Z8 rien ("valeur" de AM8).

    Quelqu'un a-t-il une idée lumineuse? Etant dans le noir, cela m'arrangerait assez...

    Merci d'avoir pris du temps pour me lire

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Perso j'irai avec une fonction VBA qui va parcourir ta ligne pour trouver la dernière colonne de données et récupérer les valeurs après.
    Tu peux utiliser UsedRange pour éviter de parcourir toute la ligne mais ça risque de ne pas être très performant.

    Une autre idée serait de mettre une valeur du genre #FinDonnees# dans la cellule juste après ta dernière colonne de bloc de donnée.
    Tu cherches cette valeur avec une formule Excel est tu récupères les cellules qui précèdent.

    Dans le même ordre d'idée, si toutes tes lignes de données ont le même nombre de blocs tu peux aussi envisager d'avoir une colonne dont l'entête est FinDonnees et de donner comme consigne à tes utilsateur.trice.s de toujours insérer les nouvelles données avant cette colonne.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 498
    Points : 3 053
    Points
    3 053
    Par défaut
    Bonsoir

    La version d'Excel n'ayant pas été indiquée, je propose une solution pour toutes les versions.

    Je propose un "classique" INDEX/EQUIV un peu boosté.

    Ce qui est complexe ce n'est pas de trouver la valeur la plus éloignée, mais de ne prendre que de trois en trois.

    En X8, je propose la formule suivante :
    =INDEX($AH$8:$AV$8;ENT((EQUIV(99;$AH$8:$AV$8;1)-1)/3)*3+1)

    La partie EQUIV(99;$AH$8:$AV$8;1) cherche la position de la valeur la plus éloignée (en se basant que les nombres sont plus petits que 99).
    La partie ENT((EQUIV(99;$AH$8:$AV$8;1)-1)/3)*3+1) renvoie la position de la première des trois valeurs du groupe le plus éloigné.
    La partie avec INDEX donne la valeur de cette position.

    En Y8 et Z8, ce sont les mêmes formules, en remplaçant le +1 final par +2 et +3.

    Attention, la fonction INDEX renvoie 0 pour une valeur vide. Si cela gêne, on peut traiter cette situation par du format ou un SI.

    En espérant que cela aide

    Pierre Dumas
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre éprouvé
    Homme Profil pro
    utilisateur
    Inscrit en
    Janvier 2017
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : utilisateur
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2017
    Messages : 676
    Points : 1 118
    Points
    1 118
    Par défaut
    Bonjour Calhagan, le forum

    Pour déterminer le numéro de la dernière colonne servie, la formule matricielle suivante a été utilisée :
    formule(aa8) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     {=MAX(NON(ESTVIDE($AH8:$CO8))*COLONNE($AH8:$CO8))}
    On construit ensuite l’adresse des cellules à afficher en X8:Z8 avec trois formules qui se différencient par l’agencement de la fonction CHOISIR()
    formule(x8) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDIRECT(ADRESSE(8;CHOISIR(MOD($AA8;3)+1;$AA8-2;$AA8;$AA8-1));1)
    formule(y8) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDIRECT(ADRESSE(8;CHOISIR(MOD($AA8;3)+1;$AA8-1;$AA8+1;$AA8));1)
    formule(z8) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDIRECT(ADRESSE(8;CHOISIR(MOD($AA8;3)+1;$AA8;$AA8+2;$AA8+1));1)
    La fonction MOD() affichant 0 quand le numéro de colonne divisé par 3 est un multiple de trois on y ajoute 1
    CàD quand le numéro de colonne est un multiple de trois, la fonction CHOISIR() prend la première option.
    INDIRECT() permet d’afficher le contenu de l’adresse obtenue

    Reste à peaufiner l’affichage 0 quand le contenu de l’adresse obtenue est vide…

    Cahlagan.xlsx

    Nom : Cahlagan.png
Affichages : 48
Taille : 10,6 Ko

    LibreOffice 7.5.9.2.M3 (x64) FR-YT 01/06/24
    OS : Windows 11.0

  5. #5
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 125
    Points : 2 670
    Points
    2 670
    Par défaut
    Bonjour

    avec une fonction DECALER avec 1 ligne et 3 colonnes en s'inspirant de la proposition de Pierre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(AH8;;ENT((EQUIV(9^9;$AH$8:$CO$8;1)-1)/3)*3;;3)
    Sur 3 colonnes en validation matricielle si version Excel "ancienne", uniquement en X8 si version récente.

    Stéphane

Discussions similaires

  1. TDBGRID - Couleur de fond d'une seule cellule
    Par cgo dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/09/2009, 10h16
  2. [OLE Excel] Aller jusqu'à la dernière cellule rempli
    Par JBrek dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 07/08/2009, 19h21
  3. [VBA-E] Fonction sum() dans une cellule
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2002, 10h18
  4. [] [Excel] Fusionner des cellules
    Par SamyD dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/12/2002, 18h37
  5. [VBA-E] [Excel] Protection d'une plage de cellules
    Par fikou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/11/2002, 11h28

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