Affichage plusieurs résultat d'une recherche
Bonjour à tous et merci de me lire,
Cela fait plusieurs mois que je planche sur ce sujet sans réel succès j'aurai donc besoin d'un peu d'aide.
J'ai un fichier avec 2 feuilles (Onglet 1 et Onglet 2)
Dans chacun il y a un tableau
Dans onglet 1
est il possible de forcer a ne pas pouvoir mettre deux textes différent si la première celule est la même c'est à dire ici dans mon fichier si W3 et W6 sont identique est ce que la valeur de Y3 peut etre la même que pour Y
Dans onglet 2
Faire apparaitre les numéros d'item du tableau dans l'onglet 1 correspondant au numéro de test (dans les cellules jaunes )
C'est à dire
pour TI_01 faire apparaitre en A5 les numéros correspondant ici les numéros 1, 4, 7, 10
Pour TI_02 faire apparaitre en A6 2, 5, 8, 11
Merci pour votre aide
Bien cordialement;
Mika
- Messages
- 1'089
- Excel
- 2021 FR
- Inscrit
- 17/12/2018
- Emploi
- Technicien maintenance robot Retraité
Bonsoir
A tout hasard un essai en formule..... d'après ce que j'ai pu comprendre !!
Slts
Bonjour à vous deux,
Merci pour vos essais et vos réponses
Boss_68 :
Est il possible de faire l'affichage dans l'onglet 2 via VBA car il y aura possiblement dans le fichier environ 250 lignes ?
Pour l'onglet 2 je vais essayer d'être plus clair dans ma recherche:
enfaite c'est :
si la cellule W1 = TI_01 la cellule Y1 est rempli à la main (normalement) car c'est la première fois que TI_01 apparait
si dans le tableau TI_01 réapparait dans la cellule Wn la cellule Yn doit être égale à la valeur de Y1
En tout cas merci de votre aide.
Bien cordialement,
Bonjour,
Personne n'a de solution ?
Je viens de faire un test sur une liste de test environ 50 cela est bien complexe à mettre en place
Bien cordialement,
Mika
Option Explicit
Dim f1 As Worksheet, dico As Object, tablo
Dim i&, lgn&
Private Sub Worksheet_Activate()
Set f1 = Sheets("Onglet 1")
Set dico = CreateObject("Scripting.Dictionary")
tablo = f1.Range("A3:W" & f1.Range("A" & Rows.Count).End(xlUp).Row)
For i = 1 To UBound(tablo, 1)
If Not dico.exists(tablo(i, 23)) Then
dico(tablo(i, 23)) = tablo(i, 1)
Else
dico(tablo(i, 23)) = dico(tablo(i, 23)) & "," & tablo(i, 1)
End If
Next i
lgn = Application.Max(4, Range("A" & Rows.Count).End(xlUp).Row)
Rows("4:" & lgn).EntireRow.Delete
Range("B3").Resize(dico.Count, 1) = Application.Transpose(dico.keys)
Range("A3").Resize(dico.Count, 1) = Application.Transpose(dico.items)
Rows("3:3").Copy
Range("3:" & dico.Count + 2).PasteSpecial xlPasteFormats
Range("A1").Select
Application.CutCopyMode = False
End SubBonjour
Merci c'est exactement ce que je cherchais
Pouvez vous m'expliquer car je ne comprends pas tout le code
Merci
J'ai un soucis avec le code
il est possible que les numéros de test ne soient pas toujours dans l'ordre croissant
et là le code ne fonctionne plus ...
Voilà :
Option Explicit
Dim f1 As Worksheet, dico As Object, tablo
Dim i&, lgn&
Private Sub Worksheet_Activate()
Set f1 = Sheets("Onglet 1") 'par commodité, on donne un nom à l"onglet 1
Set dico = CreateObject("Scripting.Dictionary") 'On crée un dictionnaire qui est destiné à
'recevoir, sans doublon, la liste des N°Test(colonne W)
tablo = f1.Range("A3:W" & f1.Range("A" & Rows.Count).End(xlUp).Row) 'on met dans une variable tableau
'l'ensemble des données de l'onglet 1
For i = 1 To UBound(tablo, 1) 'On va passer l'ensemble des lignes de tablo
If Not dico.exists(tablo(i, 23)) Then 'Si le N°Test est déjà dans le tablo alors
dico(tablo(i, 23)) = tablo(i, 1) 'On associe à ce N°, dans le dictionnaire, la valeur du numéro de l'item (colonne A)
'et du coup, le N° est créé dans le dictionnaire
Else 'sinon
dico(tablo(i, 23)) = dico(tablo(i, 23)) & "," & tablo(i, 1) 'on ajoute, puisqu'il existe le numéro de la colonne A
'au numéro associé à N°Test dans le dictionnaire
End If
Next i 'fin de la boucle
lgn = Application.Max(4, Range("A" & Rows.Count).End(xlUp).Row) 'on repère le numéro de la dernière ligne où
'la colonne A est non vide
Rows("4:" & lgn).EntireRow.Delete 'On supprime à partir de la ligne 4 les lignes qui
'vont recevoir le résultat
Range("B3").Resize(dico.Count, 1) = Application.Transpose(dico.keys) 'On reporte dans la colonne B les noms du dictionnaire (N°Tests)
Range("A3").Resize(dico.Count, 1) = Application.Transpose(dico.items) ''On reporte dans la colonne A les valeurs associées (N° items)
'aux noms contenus dans le dictionnaire (N°Tests)
Rows("3:3").Copy 'cosmétique : on copie la ligne 3 qu'on n'a pas touchée
Range("3:" & dico.Count + 2).PasteSpecial xlPasteFormats 'on colle son format sur les lignes qu'on vient de remplir
Range("A1").Select '
Application.CutCopyMode = False 'on effaice le clignotement de la zone copiée
End SubBye !
Merci pour les explications
J'ai un soucis avec le code
il est possible que les numéros de test ne soient pas toujours dans l'ordre croissant
et là le code ne fonctionne plus ...
Du coup je remet un fichier plus complet si quelqu'un a une idée
dans le tableau il peut y avoir deux type de test TI ou TF j'aimerai les séparer
et il est possible qu'une cellule soit fusionné avec le N° d'item comment procéder ? (j'ai mis un exemple dans le fichier)
Merci
Bonjour,
Avec votre fichier, pas certains que les résultats que vous souhaitiez 1/4/7/10 soient juste, sinon merci de nous expliquer comment vous arriver à cela.
Quoiqu'il en soit si vous lancez à partir de l'onglet TI ou TF, a adapter selon votre fichier :
Sub REMPLISSAGE()
Dim LR%, RESULTAT$, i%, j%
LR = Worksheets("Onglet 1").Cells(Worksheets("Onglet 1").Rows.Count, 1).End(xlUp).Row 'Défini dernière ligne Onglet 1
For i = 5 To 7 'Défini plage des tests, ici de la ligne 5 à 7 de la feuille active
For j = 3 To LR 'Entre les lignes 3 à dernière ligne onglet 1
If Worksheets("Onglet 1").Cells(j, 23) = ActiveSheet.Cells(i, 4) Then 'Si valeurs sont égales au test alors
RESULTAT = RESULTAT & ", " & Worksheets("Onglet 1").Cells(j, 23).Offset(0, -22) 'Enregistre valeur du n° de risque dans une variable en bouclant
End If
Next j
ActiveSheet.Cells(i, 1) = Right(RESULTAT, Len(RESULTAT) - 1) 'Colle le contenu de la variable RESULTAT dans le test correspondant
RESULTAT = "" 'Vide résultat
Next i 'Passe au prochain test
End SubCdlt,
il est possible que les numéros de test ne soient pas toujours dans l'ordre croissant
et là le code ne fonctionne plus ...
Je ne vois pas pourquoi cela ne marcherait plus ...
Ci-joint le même fichier où j'ai changé les données de Onglet 1 par ceux de ton nouveau fichier et où j'ai rajouté une instruction à la macro pour classer le résultat de Onglet 2 selon la colonne B
Bye !
J'ai franchement du mal a m'exprimer ...
Je vais essayer de réexpliquer pour essayer de me faire comprendre. désolé :(
effectivement vos exemple fonctionne seulement pas comme j'aimerai m'en servir
Je vais mettre le fichier original pour plus de simplicité aussi :
Dans l'onglet « Analyse de risque » à partir de la ligne 70 en colonne E il va y avoir des numéro d'item
Dans l’exemple de 1 à 35
Il est possible que certaines soient fusionnées (comme dans l'exemple)
Le but est d'obtenir dans l’onglet Test TI :
Les numéro de test se remplisse automatiquement (TI_01, TI_02 ect …)
J’aimerai pouvoir afficher les numéro item dans la colonne A correspondant au numéro de test
Dans l’onglet Test TF faire pareil que dans l’onglet TI
Tout cela ne doit pas être activé par un changement d’onglet (cela doit se faire automatiquement si possible)
J'espere avoir été clair pour vous.
encore désolé :(
Bonjour,
Sans vouloir interférer à ce qui vous a été proposé par d'autres forumeurs.
Juste un truc en regardant vos feuilles TF et TI. Pourquoi répétez-vous les titres à chaque page dans le document. Cela complique la consultation et les choses avec VBA.
Ce que je ferais :
- défusionner les ligne 5 à 7. Il suffit d'agrandir la ligne 5 pour avoir le même résultat
- supprimer tous les titres plus bas. De sorte que vous ayez les 5 premières lignes pour les titres et le reste sous forme de base de données. Pour l'impression, il suffit de demander à excel d'imprimer les 5 premières lignes sur chaque feuille.
Il y a aussi les colonnes vides qui ne servent pas. Je vois par exemple les colonnes B, C, E , F...., W,AC,AD. Elles sont vides de données. Les supprimer facilite grandement la lecture
Cordialement
Effectivement je peux modifier des choses tout est perfectible
Mais en ce qui concerne les colonnes c'est compliqué comme je vous l'ai expliqué avec la mise en forme de toutes les feuilles.
Je vais amélioré avec les nom des feuilles, les ligne fusionnée et les colonnes qui ne servent pas.
Merci de votre retour
Mais en ce qui concerne les colonnes c'est compliqué comme je vous l'ai expliqué avec la mise en forme de toutes les feuilles.
Pourquoi ? expliquez nous
Edit : regardez un modèle de la feuille TF (en 6 colonnes)
En gros la feuille Test TI va etre copier coller dans le protocole donc il faut prendre en compte la feuille protocole aussi
Voila pourquoi.
Et comme c'est une version que je fais évoluer très souvent en ce moment il y a des colonnes qui ne servent plus et effectivement je vais faire les modifs
mais je ne peux pas tout enlever.
Et je ne veux pas trop en demander sur le forum j'essaie aussi de me débrouiller par moi même.
:)