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 :

Repeter X fois des valeurs données sur une plage en utilisant la formule INDEX


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 71
    Par défaut Repeter X fois des valeurs données sur une plage en utilisant la formule INDEX
    Bonjour à tous,

    But : imprimer des étiquettes selon des libellés un certain nombre de fois.
    But 2 : Sans macros, sans boucle (ça c'est bon j'y arrive )


    Pour multiplier une valeur n fois dans des cellules différentes, j'ai l'habitude de la RechercheV avec une colonne "compteur" (fichier ci-joint feuille 1). Aucun problème avec ceci ( mise à part la correspondance non exacte de la RechercheV qui me chiffonne, mais ça fonctionne)

    J'ai trouvé par hasard un autre principe pour parvenir au même résultat avec la fonction index, mais j'ai vraiment du mal à comprendre (fichier ci-joint feuille 2). Cela fait depuis hier que je penche dessus et je n'arrive vraiment pas à comprendre le fonctionnement de la colonne C et D.

    Je me suis dit que l'explication d'un maitre pourrait débloquer les neurones qui me font défaut

    Bonne soirée à tous.

    Nef

    formule recopie plusieurs fois (version 1).xlsx

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si vous publiiez la fonction RECHERCHEV que vous utilisez, avec éventuellement une petite explication ou illustration de vos données, on pourrait facilement la traduire avec INDEX et EQUIV sans devoir ouvrir votre fichier.

    Voici un tutoriel sur le sujet Les fonctions Index et Equiv
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 590
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 590
    Par défaut
    Bonjour à tous

    Très lourde ton approche

    Ci-joint :
    • une solution simplifiée de tes RECHERCHEV
    • une solution par formule simple
    • une solution PowerQuery (intégré à Excel) qui donne le résultat facilement quel que soient le nombre d'étiquettes et de lignes par étiquettes selon le tableau de paramètres (Paramètres2)


    Je reposterai une solution 365 si je trouve
    Fichiers attachés Fichiers attachés

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 71
    Par défaut
    Bonsoir,

    Merci pour vos retours. Tuto Index + Equiv lu, mais je n'ai pas trouvé mon cas.
    Ce n'est pas faute d'avoir essayé, mais vraiment je bloque.
    J'aimerais comprendre le fonctionnement de base, sans powerquery, sans tableau nommé référencé (ce qu'il y a sur le fichier que tu as envoyé), car je pense que c'est un bon excercice.

    Juste avec un tableau de valeurs de base
    Une fois compris, j'essayerais de pousser plus loin.

    EDIT :
    Premier tableau recommencé de 0
    Pour ceux qui ne veulent pas télécharger le fichier :
    E2 : 1
    F2 : 1
    G2 : =INDEX(A:B;E2;1)
    E3 : =SI(F3=1;E2+1;E2)
    F3 : =SI(INDEX(A:B;E2;2)>F2;F2+1;1)

    Nom : Capture.JPG
Affichages : 108
Taille : 45,4 Ko

    mon but etant de remplacer la rechercheV du premier message par un index equiv simple (ce qui n'est pas le cas de ce fichier ci-joint qui lague beaucoup trop quand on tire la formule)

    recopie etiquettes.xlsx

  5. #5
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 590
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 590
    Par défaut
    Bonjour

    Concernant INDEX le principe est simple : on utilise les cordonnées, y et x d'une plage

    Dans le quasi totalité des cas on ne connait aucun des deux ou bien un seul et il faut donc trouver le moyen de déterminer le ou les inconnus par d'autres formules.

    C'est ce que je fais dans les formules de l'onglet solution simple avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(Paramètres[Ligne1];EQUIV(LIGNE(A1);Paramètres[Cumul];1))
    Il faudrait d'ailleurs l'améliorer pour limiter la répétition de la dernière étiquette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(LIGNE(A1)<=SOMME(Paramètres[nombre etiquettes]);INDEX(Paramètres[Ligne1];EQUIV(LIGNE(A1);Paramètres[Cumul];1));"")
    Cela fait 20 ans qu'Excel a introduit les tableaux structurés et s'en priver est une mauvaise approche car cela complique inutilement les formules dans nombre de cas et travailler sur des colonnes entières est une mauvaise approche.
    Mais ceci fonctionne aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(LIGNE(A1)<=SOMME(A:A);INDEX(B:B;EQUIV(LIGNE(A1);D:D;1));"")
    Cependant cela nécessaire d'étendre la formule sur un nombre pifométrique de lignes, suffisant pour traiter toutes les étiquettes avec le risque de ne pas pas avoir assez anticipé (étiquettes manquantes) ou trop de formules qui vont ralentir le fonctionnement d'Excel d'où l'intérêt d'une solution PowerQuery qui d'une part évite cet écueil, d'autre part intègre automatiquement les colonnes décrivant les autres lignes à inscrire sur les étiquettes.

    Tu as bien également calculer l’une ou l'autre des coordonnées y, x mais comme déjà dit je trouve ton approche compliquée avec 2 colonnes E et F interdépendantes et il faudrait aussi prévoir un test pour ne pas avoir à ajouter ou supprimer manuellement des lignes selon le nombre total d'étiquettes...

    Tu peux réutiliser ma logique plus simple du cumul sans l'incorporer au tableau initial...
    Images attachées Images attachées  

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 71
    Par défaut
    Merci pour la réponse.

    Je suis d'accord pour les tableaux structurés. Mais pour la compréhension, ca alourdit les choses.

    Ta formule est exactement ce que je cherche (pour tranquillement la potasser)

    Par contre il y a une erreur dans la formule, il y a 4 etiquettes "a" alors qu'on en demande que 2

    EDIT :

    le problème dans ton exemple venait de la colonne compteur je crois bien :

    Nom : Capture.JPG
Affichages : 91
Taille : 43,3 Ko

    Parfait ! formule a conserver
    Images attachées Images attachées  

  7. #7
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 590
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 590
    Par défaut
    Bonjour

    Ce n'est un compteur mais le cumul du tableau de gauche qui est effectivement faux Mais le bon calcul ne peut être obtenu en travaillant en colonnes entières

    Avec un tableau on exclut la ligne de titre automatiquement en plus de prendre automatiquement le bon nombre de lignes...

    Vérification faite ma formule de tableau devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(LIGNE(A1)<=SOMME(Paramètres[nombre etiquettes]);INDEX(Paramètres[Ligne1];EQUIV(LIGNE(A1)-1;Paramètres[Cumul];1));"")
    car là sinon il manque un a

  8. #8
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 337
    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 337
    Par défaut
    Bonjour 78chris évoquait Excel 365

    Une formule avec 3 fonctions suffit : FRACTIONNER.TEXTE, CONCAT et REPT (et seule FRANCTIONNER.TEXTE est récente)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =FRACTIONNER.TEXTE(CONCAT(REPT(A2:A4&"-"&B2:B4&"|";C2:C4));"-";"|";VRAI)
    Nom : 2023_07_10 répétition motif.JPG
Affichages : 85
Taille : 59,5 Ko

    REPT va répéter un motif autant de fois que nécessaire (ici la valeur de la colonne A, un -, la valeur de la colonne B, un | . motif répété suivant la valeur en colonne C)
    CONCAT pour agréger le tout
    FRACTIONNER.TEXTE pour découper les - en colonne et les | en ligne

    Stéphane

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 71
    Par défaut
    Bonsoir !

    Ces 2 approches sont très sympas

    Pour ma part j'ai une petite préférence pour la solution index-equiv ( que j'ai mis au moins 3 jours à comprendre xD )

    La dernière solution me questionne sur une petite subtilité :
    Toutes les étiquettes sont d'abord concaténées sur une seule cellule.
    Si les labels sont plus longs que a b c d, quelle est la limite de caractères de la cellule ?

    En tout cas ya le choix ! Merci à tous et bonne soirée

  10. #10
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 041
    Par défaut
    Citation Envoyé par neflerine Voir le message
    Si les labels sont plus longs que a b c d, quelle est la limite de caractères de la cellule ?
    32 767, d'après cette source :
    https://support.microsoft.com/fr-fr/...7-269d656771c3

  11. #11
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 337
    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 337
    Par défaut
    En effet, il y a une limite suivant le nombre de caractères maximal par cellule

    Pour ma part je recommanderai Power Query.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let
        Source = Votre_Source,
        Quantité = Table.AddColumn(Source, "Quantité Liste", each {1..[Quantité]}),
        Développement_Ligne = Table.ExpandListColumn(Quantité, "Quantité Liste")
    in
        Développement_Ligne
    Autant de colonnes que vous voulez dans votre source dont une colonne "Quantité"
    je crée une liste de 1 à la quantité voulue et je développe en ligne
    J'obtiens ainsi autant de fois les valeurs des colonnes initiales

    Stéphane

Discussions similaires

  1. Réponses: 24
    Dernier message: 14/03/2015, 10h09
  2. [Débutant] Compter des valeurs identiques sur une colonne Gridview
    Par dragoon25 dans le forum C#
    Réponses: 18
    Dernier message: 28/05/2014, 14h52
  3. [XL-2007] Recherche de la valeur # 0 sur une plage de 12 mois
    Par lebonprince dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/05/2010, 18h36
  4. [JpGraph] Mettre des valeurs manuellement sur une échelle
    Par Xandrine dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/06/2008, 12h11
  5. [Formule]recup de données sur une plage
    Par b.amine dans le forum Excel
    Réponses: 4
    Dernier message: 26/04/2007, 09h58

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