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 :

Variable en fonction du numéro de l'onglet et décalage de la recherche dans une feuil DATA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    ouvrier
    Inscrit en
    Juin 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ouvrier

    Informations forums :
    Inscription : Juin 2016
    Messages : 69
    Par défaut Variable en fonction du numéro de l'onglet et décalage de la recherche dans une feuil DATA
    l'idées est de recopier les données venant d'un classeur externe (jusqu’à 200 classeurs ) dans une feuil DATA et de cette feuille DATA, compléter un onglet n°1" pour regrouper toute les données sous le même classeur à la fin et établir un classement !! il peut y avoir 200 onglets à la fin.

    En gros un classeur externe = un onglet dans le fichier du classement.

    chaque onglet est numéroter de 1 a 200, lors de sa création "ce qui a pour but d'indiquer le nombre de fois ou la recherche dois de décaler sur la droite"



    j'y suis presque mais ca pèche encore, le plus gros bug est que lorsque je fait une copie de "l'onglet 1" qui est ma référence, toutes les données sont identiques sur les autres onglets, la recherche ne se décale pas en fonction du numéro de l'onglet.

    Je pense qu'il faudrait arriver à intégrer un variable dans la formule que j'ai !

    Cette variable reprendrai le numéros de l'onglet, et indiquerai qu'il faut se décaler d'autant que le numéros de l'onglet par rapport à la colonne d'origine.

    je m explique avec la formule :

    =DECALER(DATA_1_TEAMS!F47;0;DROITE(CELLULE("nomfichier");NBCAR(CELLULE("nomfichier"))-TROUVE("]";CELLULE("nomfichier");1))) " en tout cette formule est utilisée plus de 100 fois dans l'onglet"

    La colonne F47 étant celle d'origine, il faudrait que l'onglet 3 se déplace de 3 fois sur la droite pour reprendre les données du classeur externe n°3,
    il faudrait que l'onglet 4 se déplace de 4 fois sur la droite pour reprendre les données du classeur externe n°4,
    et ainsi de suite ...


    je voudrais que cela se fasse en automatique des que je copie " en dernier" un nouvel onglet car j'ai pas envie de me refaire 200 fois le 1er onglet et refaire toutes les recherches

    Merci beaucoup de votre aide !!!

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 729
    Par défaut
    Bonjour,

    L'idée d'utiliser INDIRECT est bonne à ceci près qu'elle est sensible aux modifications (insertion/suppression/déplacement de lignes et/ou colonnes) auxquelles elle ne pourra pas s'adapter. Elle le pourrait via l'utilisation d'une plage nommée pour représenter les cellules visées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDIRECT("Sheet"&LIGNE()-1&"!A6:A145")
    Manque un peu de souplesse

    Mais en créant un nom "MaPlage" dont la portée est l'onglet courant (et non le classeur) via le gestionnaire de noms:
    MaPlage
    (ex pour Sheet1 mais ce nom est à créer pour chaque onglet concerné)
    La formule Excel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDIRECT("Sheet"&LIGNE()-1&"!MaPlage")
    On garde toute la force d'Excel via ce nom intermédiaire qui pointe sur une plage qu'il adaptera tout seul en cas d'insertion/suppression.
    Le nom MaPlage ne risquant pas de changer sans action volontaire de l'utilisateur, la formule INDIRECT reste robuste.

    NB: Si l'on crée une plage nommée dont la portée est l'onglet, la duplication de l'onglet duplique également ses plages nommées de portée locale donc c'est très facile à exploiter sur de multiples onglets basés sur le même modèle.


    L'autre possibilité serait d'utiliser des tableaux structurés nommés intelligemment (Tableau1 à Tableau200 ou similaire); INDIRECT fonctionnerait aussi dessus de façon robuste et la plage pointée s'adaptera automatiquement à l'ajout de lignes et/ou colonnes (en plus des insertions/suppressions).


    Edit: petite correction: la formule dans MaPlage doit impérativement utiliser des références absolues (avec les $)

  3. #3
    Membre confirmé
    Homme Profil pro
    ouvrier
    Inscrit en
    Juin 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ouvrier

    Informations forums :
    Inscription : Juin 2016
    Messages : 69
    Par défaut
    ok

    si j'ai bien compris dans ma feuil "DATA" je créer deux Colonne ! 1 colonne allant de 1 à 200 correspondant au numéros d'onglet et l'autre colonne correspondant à la colonne de recherche.

    et lorsque je vais créer un nouvel onglet il va directement orienter sa recherche par rapport au numéros de l'onglet ?

    merci .

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 729
    Par défaut
    Bonjour,

    Avec la technique de la plage nommée, ça va fonctionner comme ça mais tu n'es pas dynamique pour gérer d'éventuels ajouts de colonne(s) ou de ligne(s) en bout de table (je parle de tes tables sources).
    Avec la technique du tableau structuré, l'inconvénient est que la duplication d'onglet duplique les tableaux avec une règle peu fiable (du genre la copie de Tableau1 devient Tableau13 ou Tableau15 ou ... et non Tableau2) donc difficile à automatiser.

    Tu peux allier le meilleur des deux mondes en créant quand-même un tableau structuré et en faisant pointer une plage nommée dont la portée reste l'onglet (portée locale):
    Nom : MaPlage.png
Affichages : 422
Taille : 10,5 Ko
    Tu utilises donc toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDIRECT("Sheet"&LIGNE()-1&"!MaPlage")
    Mais, ta plage pointant sur un tableau, elle bénéficiera des avantages de ce tableau et la duplication d'onglet duplique cette plage à portée relative sur le tableau correspondant du nouvel onglet recopié quel que soit le nom qu'Excel lui aura attribué arbitrairement.

  5. #5
    Membre confirmé
    Homme Profil pro
    ouvrier
    Inscrit en
    Juin 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ouvrier

    Informations forums :
    Inscription : Juin 2016
    Messages : 69
    Par défaut
    ok,

    je t'avoue que j'ai du mal a te suivre, je suis perdu.

    Est ce que tu peut me faire un exemple dans mon fichier si je te le transfert ?

    Merci

    FIFA World Cup Russia 2018-FINALE.xlsm

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 729
    Par défaut
    Je t'ai plutôt préparé un exemple très simple car je ne savais pas exactement ce que tu souhaitais synthétiser dans ton fichier (les scores j'imagine mais ils avaient un comportement bizarre).
    Duplique Feuil1 en Feuil4 et étire l'un ou l'autre des tableaux de l'onglet de synthèse.

    Tu verras que ça fonctionne tout seul et tu peux adapter ton onglet modèle (Feuil1 ici) sans avoir à modifier les formules de synthèse.

    Dans le gestionnaire de noms:
    Nom : Exemple_NomsAPortéeLocale.png
Affichages : 399
Taille : 25,8 Ko
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Sql Server] Fonction de recherche dans une chaine
    Par pierre031183 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/01/2011, 16h16
  2. [VBA-E]Recherche dans une variable tableau
    Par illight dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2006, 17h50
  3. recherche dans une variable String
    Par vallgui dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 30/10/2006, 11h32
  4. [Tableaux] rechercher dans une variable array()
    Par tom06440 dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2006, 17h45

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