Copie texte cellule selon plusieurs conditions

Bonjour,

Je relance ma question que je crois avoir posté dans un thread résolu sans réponse.

J'ai joint mon test de fichier histoire d'être le plus explicite possible.

Ce que je cherche à faire:

Reprendre dans la colonne D16;G21 de l'onglet "score" les noms de la colonne H18;Q197 de l'onglet "Ressources" selon les conditions:

  • dans la colonne type : "Serious Game" dans l'onglet "Ressources"
  • dans la colonne SPS : "SPS01" dans l'onglet "Ressources"

Alors j'ai essayé Index pour un resultat ridicule, je ne comprends rien à Esterreur etc... J'ai aussi vu Decaler, Substitue, Estnum et je n'y comprends rien...

Et quand j'ai réalisé qu'il me faudrait aussi gérer le fait qu'un nom ne doit être pris qu'une fois, j'ai bien compris que j'avais tapé trop haut pour mes capacités...

Si quelqu'un peut orienter mon "développement"...

Merci d'avance

Nicolas

16ma-test.xlsx (80.69 Ko)

Bonjour,

Dans un premier temps refait tes tableaux en virant toutes les cellules fusionnées. Mets les tout de suite a la bonne dimension. De nombreuses fonctions ne travaillent pas avec des cellules fusionnées.

Hello,

Fusionner les cellules, c'est pourtant un des trucs que je fait le mieux sur Excel...

Bon, eh bien c'est fait.

J'ai encore cherché sur le site cette aprèm et y a finalement pas mal de threads dont les titres me semblent coller à ma requête, mais je suis tellement loin de pouvoir en adapter les fichiers d'exemple...

Et maintenant, vers quoi dois je m'orienter?

Merci en tout cas de votre aide, vraiment.

Nicolas

10ma-test.xlsx (27.33 Ko)

Bonsoir NicoA et DjiDji59430,

un essai de ma part voir si cela peut te convenir.

Cordialement.

18ma-test-v2.xlsm (34.17 Ko)

Re,NicoA et bigdaddy154

le meme, mais sans vba

20ma-test.xlsx (32.37 Ko)

Bonjour,

Tout d'abord merci à vous deux d'avoir littéralement fait ce que je souhaitais. Merci.

Histoire de ne pas récupérer vos fichiers comme un bovin sans chercher à aller plus loin j'ai essayé de comprendre ce que vous avez fait, afin de pouvoir adapter à terme. Permettez moi qques questions, que vous pouvez totalement ignoré vu ce que vous avez déjà fait

@ bigdaddy,

pourquoi effacer la colonne D au début de la macro puisque cette dernière est censée être vide par défaut.

derligne_ressources = .Cells(Rows.Count, "B").End(xlUp).Row ça, ça détermine la colonne à "analyser?

For i = 17 To derligne_ressources i en gros c'est la range d'analyse?

If .Cells(i, "B") = "Serious Game" And .Cells(i, "D") = "SPS01" ce sont les conditions?

ActiveCell = .Cells(i, "E") ce que l'on extrait

et je ne "comprends" pas la fin...

Si je veux la répliquer sur d'autre tableaux de la même page avec d'autres refs, il me suffit de la dupliquer dans le même worksheet ou c'est une par worksheet?

à DjiDJi,

Je crois comprendre l'utilisation de Index, pour situer la cellule à extraire non?

Petite.valeur, pour gérer les doublons?

Mais au delà de ça je me perds, et je ne comprends pas du tout l'utilisation de Sierreur

En tout cas, encore merci à vous deux.

N

Hello,

pourquoi effacer la colonne D au début de la macro puisque cette dernière est censée être vide par défaut.

Si tu lances la macro que tu fais des modifs dans tes données sources et que tu relances la macro sans effacer la colonne D tu te retrouveras avec 2 fois l'import.

derligne_ressources = .Cells(Rows.Count, "B").End(xlUp).Row ça, ça détermine la colonne à "analyser?

Cette ligne de code permet de savoir qu'elle est la ligne de la dernière cellule remplie dans la colonne B.

For i = 17 To derligne_ressources i en gros c'est la range d'analyse?

C'est ça en faite je boucle de la ligne 17 à la dernière ligne remplie de la colonne B.

If .Cells(i, "B") = "Serious Game" And .Cells(i, "D") = "SPS01" ce sont les conditions?

Exactement

ActiveCell = .Cells(i, "E") ce que l'on extrait

Signifie que la cellule active de la feuille est égale à la cellule E de la ligne i (la variable qui va de 17 jusqu'à la derniere ligne) de la feuille ou se trouve tes données.

En espérant que ce soit plus clair pour toi.

Cordialement.

Merci pour ces détails, ça me permet de mieux comprendre pour refaire plutôt que de récup vos fichiers et de partir comme un voleur.

Merci beaucoup

N

NicoA a écrit :

Bonjour,

à DjiDJi,

Je crois comprendre l'utilisation de Index, pour situer la cellule à extraire non?

oui index(matrice; n° de ligne dans la matrice)

Petite.valeur, pour gérer les doublons?

la formule crée une matrice a partir des ligne($1:$50) par exemple pour une matrice de recherche de 50 lignes qui a des zero partout sauf aux N° de ligne qui correspondent aux valeurs cherchées. On extrait ces valeurs en commençant par la plus petite - On aurait pu le faire par la plus grande, mais ce n'est pas dans l'ordre d'extraction-

Mais au delà de ça je me perds, et je ne comprends pas du tout l'utilisation de Sierreur

La formule renvoie un erreur si elle ne trouve pas. Pour ne pas afficher #NOMBRE!, en cas d'erreur, on n'affiche rien ("")

=sierreur(index(matrice;#NOMBRE!);"")

Crdmt

Merci,

Je suis toujours un peu dessus j'avoue.

Donc l'utilisation de SIERREUR est purement esthétique.

En revanche je ne comprends pas l'usage de LIGNE et LIGNES dans les conditions

LIGNE($1:$47)<>0 Il faut sur cette cette plage que le numéro de lignes soient différents de 0?

LIGNES($1:1) se rapporte à quelle condition?

Ces deux références m'ont l'air essentielles dans la formule et pourtant je ne vois pas

Merci pour ces infos que j'espere retenir

N

re

j'ai fait un fichier exemple


Re

un petit fichier explication

10explications.xlsx (15.60 Ko)

Merci pour ce petit cours.

Effectivement, c'est plus clair.

Je pense même qu'en me creusant je pourrai utiliser tout ça par moi même à l'avenir.

Tu m'as fait progresser.

Encore merci,

Bonne journée

Nicolas

Re bonjour DjiDji,

Je suis désolé de revenir une nouvelle fois, je crois comprendre mais mes tentatives d'adaptation infructueuses montrent clairement que ce n'est pas le cas...

J'ai mis mon nouveau test en PJ, j'ai donc adapté le formule comme suit:

SIERREUR(INDEX(Ressources!$J$36:$J$125;PETITE.VALEUR(SI((Ressources!$F$36:$F$125="Serious Game")*(Ressources!$I$36:$I$125="O01")*LIGNE($1:$89)<>0;(Ressources!$F$36:$F$125="Serious Game")*(Ressources!$I$36:$I$125="O01")*LIGNE($1:89));LIGNES($1:1)));"")

Ma matrice de recherche est donc Ressources!$J$36:$J$125

Il me filtre dans les 89 lignes de cette matrice LIGNE($1:$89) les lignes correspondantes au double critère Ressources!$F$36:$F$125="Serious Game" et Ressources!$I$36:$I$125="O01"

En l'état il me retourne une case vide, donc on doit être dans le cas du SIERREUR. La formule ne trouve donc pas de résultat correspondant à ces filtres dans la plage donnée et je ne comprends pas pourquoi

Promis, après j’arrête

Merci

N

Bonjour,

Alors ?, on n'a pas bien suivi l'instituteur sur les intervalles et les piquets?

Il y a combien de lignes dans une matrice, par exemple ligne($5:$10) => 5,6,7,8,9,10 ce qui fait 6 lignes

Dans ta formule, ce n'est pas ligne($1:$189) mais .....ligne($1:$190)

Crdmt

La blague...

C’était juste ça.

Mais du coup, l'erreur de résultat vient donc du fait que le nombre de ligne que j'ai mis dans la matrice ne correspondait pas exactement à celui de la fonction LIGNE? Parce que quelque part je me dis que ce qui est valable pour 90 lignes l'est tout autant pour 89. Il y aurait juste une ligne qui sauterait dans la recherche mais apparemment, c'est plus que ça.

En tout cas merci beaucoup pour ta patience et ta pédagogie.

Gros merci.

Nicolas

Rechercher des sujets similaires à "copie texte conditions"