> Tous les forums > Forum Bureautique
 Excel 2003 Chercher infos automatiquement dans BD
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
eagle-of-gold
  Posté le 30/04/2010 @ 19:07 
Aller en bas de la page 
Petit astucien

Bonsoir,

J'aimerais savoir comment dans cette base de données http://www.mediafire.com/?nckwky5zbgl aller rechercher les informations suivantes automatiquement pour les cellules avec les ????? rouges:

en I2: "sky; cat"
en I3: "snake; eagle"
en I4: "sky; dragon"

Comment conserver dans la concaténation la couleur rouge pour les ????? ou ce qui remplacera ceux-ci?

MERCI

Publicité
ferrand
 Posté le 30/04/2010 à 21:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut,

Un petit casse-tête ton problème. Je ne vois pas de moyen d'obtenir le résultat cherché avec une seule formule, sauf à créer une fonction personnalisée. Je ne vois pas comment éviter de passer par un relais.

Voici toujours une méthode:

En B12 (j'ai pris B12, compte-tenu de la position de ta matrice sur ton fichier en A2:D6, mais tu peux placer n'importe où et masquer...): la formule a taper sera ensuite à étendre sur la plage B12:D16, les cellules B11:D11 doivent être vides.

En B12 donc: =B11&SI(B2=MAX(B$2:B$6);$A2&"; ";"")

(Bien respecter les caractères absolus ou relatifs des références pour que l'extension puisse se faire correctement.)

Une fois l'extension faite, tu auras en B16:D16 les chaînes que tu souhaite avoir en I2:I4, terminées par "; " (2 caractères à supprimer donc.

Tu sélectionnes la plage I2:I4 (la cellule active étant I2). Tu tapes la formule suivante :

{=TRANSPOSE(GAUCHE(B16:D16;NBCAR(B16:D16)-2))} [les accolades se mettent lors de la validation par la combinaison de touches Ctrl+Maj+Entrée (formule matricielle)].

Bonne soirée.

eagle-of-gold
 Posté le 03/05/2010 à 16:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour ferrand,

Tes formules fonctionnent parfaitement. Je n'ai plus qu'à trouver comment garder la couleur rouge pour les noms des joueurs quand j'effectue la concaténation. Si quelqu'un a une solution, je suis preneur.

MERCI

ferrand
 Posté le 03/05/2010 à 16:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Les formules ne changent pas la couleur du texte dans les cellules...

eagle-of-gold
 Posté le 04/05/2010 à 15:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour ferrand,

Je sais que les formules ne changent pas le format d'un texte. Néanmoins, en cas de concaténation s'il y a plusieurs couleurs, il n'en garde qu'une. Par exemple dans ma base de données, F2 = "Mine Métal (MM)" en noir, G2 = "MAX(B2:B6)" soit "30" en noir, H2 = "possédée par" en noir, I2 = "{=TRANSPOSE(GAUCHE(B16:D16;NBCAR(B16:D16)-2))}" soit "sky; cat" en rouge, J2 = "CONCATENER(F2;": ";G2;" ";H2;" ";I2)" soit "Mine Métal (MM): 30 possédée par sky; cat" mais là tout est en noir. J'aimerais que les noms des joueurs restent en rouges si c'est possible.

Au fait pour la résolution de mon projet, je sais qu'il existe la fonction RANG. N'y aurait-il pas moyen d'avoir les noms des joueurs plus facilement avec cette fonction? Néanmoins, j'ai lu dans l'aide qu'il y avait un souci avec cette fonction quand il y a des nombres en double (on pourrait avoir par exemple deux rangs 3 mais le rang suivant serait 5). Il y a bien une correction mais c'est avec des rangs avec décimale(s) (on pourrait avoir par exemple un rang 3, un rang 3,5 mais le rang suivant serait quand même 5 (enfin si j'ai bien compris)).

C'est dommage qu'il n'y a pas moyen d'avoir en cas de nombres en double des rangs sans saut(s) de rang et sans décimale(s) (supposons que l'on aurait deux nombres identiques au rang 3, on aurait rang 3 (premier nombre identique), rang 4 (deuxième nombre identique), rang 5. Une autre solution serait d'avoir les deux nombres identiques qui resteraient au rang 3 mais le rang suivant serait 4 et non 5.

Désolé de m'être éloigné du sujet initial, mais Excel contient tellement de fonctions que l'on peut imbriquer ainsi que des fonctions matricielles, sans oublier la programmation en VBA, qu'il est parfois difficile de trouver la solution la plus simple pour un projet. De plus, je trouve que l'aide n'est pas toujours facilement compréhensible.

Au fait, y a-t-il une aide pour la programmation VBA? J'aimerais apprendre mais la syntaxe des lignes de commande me semble si compliquée.

J'ai encore une question, pour le cas ou il y a plusieurs noms de joueurs seraient-ils possibles d'avoir deux sortes de séparations? Par exemple, s'il y a trois joueurs on aurait "sky; cat et snake" ou "sky, cat et snake", s'il y a deux joueurs on aurait "sky et cat". Je demande cela car en relisant la concaténation "Mine Métal (MM): 30 possédée par sky; cat", je trouve que cela donnerait mieux comme ceci "Mine Métal (MM): 30 possédée par sky et cat".

MERCI

PS: si j'en demande trop, dis-le-moi, car je ne rends pas toujours compte quand je suis lancé dans mes questions.

ferrand
 Posté le 04/05/2010 à 18:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Je ne reprends pas tout... Voilà un bricolage supplémentaire:

http://cjoint.com/?fesrDEZCg5

La partie colorée en jaune correspond à mon premier post (revoir explications). La virgule remplace le point-virgule comme adoptée dans ton dernier post.

A la suite, lignes 18 et 19, je procède à la mise en forme selon tes indications.

En B18: =SOMMEPROD((RANG(B2:B6;B$2:B$6)=1)*1)
On peut en effet utiliser la fonction RANG dans ton cas, puisque tu recherches tous les joueurs de rang 1 dans chaque cas. Son utilisation dans les lignes qui précèdent n'amènent rien de plus par rapport à MAX, question de goût le cas échéant. Je l'ai utilisée ici pour renvoyer le nombre de joueurs de rang 1. La formule est étendue en C18 et D18.

Ligne 19, on met en forme la chaîne de la ligne 16.

En B19: =SUBSTITUE(SI(B18>1;SUBSTITUE(B16;",";" et";B18-1);B16);", ";"";B18-1)
Remplace s'il y a lieu l'avant-dernière virgule par " et" et élimine de ce dernier texte la dernière virgule (et l'espace qui suit).

La formule des cellules cibles (matricielle) se simplifie, elle n'a plus qu'à transposer la ligne 19.

Une fois là, on peut envisager de remplacer tout cela par une fonction personnalisée qui pourra faire la même chose directement.

Quant à obtenir du texte en deux couleurs dans la même cellule, je ne connais pas de fonction qui le permette. Il y faudra une procédure VBA (peut-être aussi une fonction personnalisée, à essayer). Si je trouve un moment je regarde.

Bonne soirée.

eagle-of-gold
 Posté le 06/05/2010 à 22:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonsoir ferrand,

J'avais mis ce que tu avais proposé dans ton premier post dans ma base de données. Si j'avais su que tu allais le réutiliser, j'aurais mis la nouvelle base de données en pièce jointe.

J'ai téléchargé ton fichier joint, ça semble parfait. Par contre, j'aurais peut-être besoin de toi pour comprendre en profondeur les formules quoi qu'avec l'aide ça devrait aller, mais bon, on ne sait jamais.

La base de données que j'ai jointe est simple par rapport à la base de données que j'aurai au final et là, j'aurai peut-être des difficultés à adapter les formules.

Au fait, sais-tu comment je peux apprendre le VBA facilement et s'il y a une aide sur la syntaxe des lignes de commande quand on réalise une macro?

MERCI



Modifié par eagle-of-gold le 06/05/2010 22:32
ferrand
 Posté le 07/05/2010 à 00:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

Même pour les fonctions qui ne te sont pas familières un petit passage dans l'aide et une analyse de la façon dont elle sont utilisées dans le contexte devrait te suffire pour maîtriser cette utilisation et l'adapter.

Ceci dit, comme je l'ai déjà évoqué, une fonction personnalisée sera sûrement plus facile à utiliser dans ton cas :

http://cjoint.com/?fgx4PPbaLW

N'oublie pas d'autoriser les macros. La fonction n'est pas optimale mais elle donne le résultat cherché (signale-moi s'il est des cas où elle ne fonctionnerait pas correctement). Tu l'utilises comme une fonction native d'Excel avec comme arguments la plage Résultats dans laquelle elle recherche la ou les valeurs maximales et la plage Noms dans laquelle elle prélève le ou les noms à concaténer s'il y a lieu et les renvoie sous forme de chaîne. Elle ne prend comme arguments valides que des plages à une seule ligne ou une seule colonne.

Pour ta chaîne bicolore, j'utilise une procédure évènementielle, il n'y a donc plus de fonction. Elle se met à jour en même temps que ta chaîne noms. Tu peux tester en changeant la couleur. (Dans son état actuel elle ne s'occupe pas de la couleur des autres éléments de la chaîne.)

Pour VBA (et Excel) tu pourras trouver pas mal de sites... Un lien parmi d'autres :

http://bidou.developpez.com/article/VBA/ un cours à télécharger (qui a l'avantage d'être en pdf) qui te donnera une vue d'ensemble.

eagle-of-gold
 Posté le 08/05/2010 à 17:49 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour ferrand,

Quand il y a une ou deux fonctions utilisées, c'est vrai que l'aide suffit, mais quand il s'agit de formules complexes avec des imbrications de plusieurs fonctions, ça devient plus difficile à comprendre.

J'ai téléchargé ton fichier, j'ai autorisé les macros, mais je ne sais pas aller voir le code de ta fonction pour voir comment tu l'as créée (dans macro, il n'y a rien et je ne sais pas où aller voir d'autre).

Au fait, dans les formules, j'ai vu qu'il y avait deux ";" qui se suivent "=MIEUXPLACES(DECALER($B$2:$B$6;;LIGNE()-2);$A$2:$A$6)". Je suppose que c'est normal et que l'on complète certaines informations ou non suivant le cas, mais je voulais être sûr.

J'ai essayé de comprendre la formule en détail mais j'avoue que même avec l'aide j'ai un peu du mal à tout analyser. Par exemple, le -2, mais bon, on ne peut pas tout comprendre en quelques minutes.

Pour la procédure évènementielle, j'ai changé la couleur des noms des joueurs dans la colonne I (bleu à la place du rouge) mais dans la concaténation, ils restent en rouge. Pour que la concaténation reprenne le bleu, il faut que je refasse un "ENTER" sur chaque ligne dans la colonne I.

Pour la fonction, j'ai réalisé quelques tests en changeant les noms et le niveau des différentes mines et tout fonctionne parfaitement.

Comment fait-on une concaténation par procédure évènementielle?

Comment puis-je voir le code de ta fonction MIEUXPLACES?

Je te remercie énormément pour le temps que tu prends à m'expliquer et à résoudre mon problème.

J'espère un jour pouvoir réaliser de telle manipulation seul en étant capable de tout comprendre et de tout analyser.

ENCORE UN GRAND MERCI



Modifié par eagle-of-gold le 08/05/2010 17:51
Publicité
ferrand
 Posté le 09/05/2010 à 03:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Pour accéder à l'éditeur Visual Basic, tu peux faire: soit onglet Développeur et tu cliques sur l'icône Visual Basic à l'extrême gauche (sur Excel 2007), soit tu fais Alt+F11 (raccourci clavier), soit un clic droit sur l'onglet de la feuille et Visualiser le code (ce qui t'amène sur le module de la feuille qui contient la proc. évènementielle). La fonction est dans Module1.

Normal qu'il faille une manoeuvre clavier, la procédure s'exécute lorsque la valeur de la cellule dans la colonne I change. Il faudrait modifier pour que cela mette à jour la totalité avec un seul changement, ou bien l'associer au recalcul de la feuille...

Dans la formule que tu cites : elle se trouve sur les lignes 2, 3 et 4. Pour chacune de ces lignes, le max à chercher est respectivement dans les colonnes B, C et D (soit col. de n° 2, 3 et 4). La plage B2:B6 sur la ligne 2 devrait être remplacée par C2:C6 sur la ligne 3 et D2:D6. Si tu ne veux pas la taper 3 fois et donc ne la taper qu'une fois sur la ligne 2 et pouvoir la tirer ou recopier sur les lignes suivantes, il faut que lors de la recopie la plage se décale automatiquement d'une colonne par rapport à la ligne précédente. Ce que te permet la fonction DECALER:

DECALER($B$2:$B$6;;LIGNE()-2)

DECALER(plage de référence;décalage ligne;décalage colonne)

La plage est celle qui convient pour la ligne 2. Le décalage ligne est nul (rien entre les ;;) et LIGNE()-2 représente le décalage colonne. LIGNE() renvoie le n° de la ligne : soit 2-2=0 sur la ligne 2 (décalage nul), 3-2=1 sur la ligne 3 (décale 1 col. donc C), 4-2=2 sur la ligne 4 (décale 2 col. donc D). C'est évidemment beaucoup plus intéressant quand tu recopies sur une centaine de lignes (ou plus) au lieu de 3...

Bonne continuation.

eagle-of-gold
 Posté le 14/10/2010 à 01:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonsoir ferrand,

Je suis désolé de ne pas t'avoir répondu avant, mais mon ordinateur est tombé en panne et j'ai du attendre pour avoir un autre.

Pour en revenir au sujet, je n'ai pas Excel 2007 sur mon ordinateur, mais je connais quelqu'un qui l'a sur son portable, je pourrai peut-être regarder cette fonction. À moins que ce soit faisable avec Excel 2003. Je testerai tes nouvelles informations prochainement, là je suis assez pris par les cours (rire).

ENCORE UN GRAND MERCI

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
chercher les lignes doubles dans excel 2003
Problème ouverture de fichier protégé dans Excel 2003
Excel: Chercher l'emplacement de la valeur maximale dans une plage
supprimer des lignes dans fichier excel 2003
Chercher une liste de mots dans une cellule Excel
copier plage excel 2003 coller dans word + m en p
Recherche dans Excel 2003
formules dans excel 2003
Saisie double dans cellule Excel 2003
arrondi décimale dans excel 2003
Plus de sujets relatifs à Excel 2003 Chercher infos automatiquement dans BD
 > Tous les forums > Forum Bureautique