Cerca nome



  • Cerca nome
    di Sergio (utente non iscritto) data: 15/11/2015 14:55:38

    Ho una cartella Excel, con 2 fogli. Nel foglio1 ho sei colonne: la colla A indica il nome chimico di una sostanza, la colla B il nome commerciale, la colonna C il peso, la colonna D il costo, la colonna E l'anno, la colonna F lo stato. In tutto le righe sono circa 1000.
    Il foglio2 è per la ricerca. Nella cella A4 scrivo il nome chimico; voglio un elenco di tutti i prodotti il cui nome commerciale contiene quella determinata sostanza chimica, con le altre caratteristiche indicate (cioè i valori delle colonne C, D ed E).
    E' possibile farlo senza macro?? Grazie.



  • di Albatros54 data: 15/11/2015 15:07:57

    la funzione che fa al tuo caso sicuramente è Cerca.vert().
    Ciao
    Albatros54
    PS se alleghi un file rendi le cose piu facili.





  • di alfrimpa data: 15/11/2015 15:15:24

    Ciao Sergio

    Senza vba si dovrebbe poter fare.

    Secondo me però dovresti aggiungere un altro foglio dove costruire il database dei principi attivi ed i nomi commerciali ad essi associati.

    Mi spiego sulla riga 1 metti i principi attivi (uno per colonna)
    In ogni colonna dalla riga 2 in poi metti tutti i nomi commerciali afferenti al principio attivo della colonna.

    Poi con dei CERCA.ORIZ() e CERCA.VERT() si possono ricavare le informazioni a te necessarie.

    Allega comunque un file di esempio con 3/4 principi attivi ed il loro nomi commerciali in modo che si possa concretizzare questa mia proposta.

    Alfredo





  • di Sergio (utente non iscritto) data: 15/11/2015 19:09:51

    Ho allegato un piccolo file di esempio. Grazie!!



  • di alfrimpa data: 15/11/2015 19:18:32

    Ciao Sergio

    Spero domani di non avere le difficoltà che sto avendo oggi alla linea (telefonica ed internet; mi è stato detto di un problema a centrale Telecom).

    Appena in grado ti riallego il tuo file.

    Alfredo





  • di Sergio (utente non iscritto) data: 15/11/2015 20:25:31

    Grazie Alfredo.



  • di Cucù data: 15/11/2015 21:58:25

    cit"E' possibile farlo senza macro??"

    Si, basta un semplice filtro dati!



  • di alfrimpa data: 15/11/2015 22:21:58

    Internet è tornata a posto.

    Domani ti allego il file che utilizza solo le formule CERCA.ORIZZ() e CERCA.VERT().

    Alfredo





  • di Albatros54 data: 16/11/2015 07:48:58

    La Formula che ho applicata è CERCA.VERT().Ti ho allegato il file con le formule,
    lo devi adattare alle tue esigenze.
    Ciao
    Albatros54
     
    =CERCA.VERT(B4;SCEGLI({1;2;3;4;5};Farmaci!B3:B10;Farmaci!C3:C10;Farmaci!D3:D10;Farmaci!E3:E10;Farmaci!F3:F10;);5;0)






  • di ninai data: 16/11/2015 08:03:52

    ciao
    per come ho capito io:
    =SE.ERRORE(INDICE(Farmaci!A$3:A$10;AGGREGA(15;6;RIF.RIGA(Farmaci!$B$3:$B$10)-2/(Farmaci!$B$3:$B$10=$B$4);RIGHE($A$3:A3)));"")
    in A10, da trascinare in basso ed a destra



  • di alfrimpa data: 16/11/2015 12:18:21

    Ciao a tutti.

    Giusto per il gusto di partecipare (anche se Sergio non l'aveva richiesto espressamente) propongo una mia soluzione in VBA (file allegato Sergio_VBA.xlsm)

    @ Sergio

    In cella A4 ho inserito una Convalida Dati nella quale puoi scegliere il principio attivo; fatta la scelta automaticamente verranno esposte le informazioni richieste.

    Fai sapere se puoi essere interessato a questo tipo di soluzione.

    Alfredo
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Double
    Dim lr As Long
    Dim ur As Long
    Dim rng As Range
    Dim cel As Range
    If Not Intersect(Target, Range("a4")) Is Nothing Then
    lr = Worksheets("Farmaci").Cells(Rows.Count, 1).End(xlUp).Row
    Set rng = Worksheets("Farmaci").Range("b2:b" & lr)
    Range("a10:f1000").ClearContents
    For Each cel In rng
    ur = Worksheets("Ricerca").Cells(Rows.Count, 1).End(xlUp).Row
    lr = Worksheets("Farmaci").Cells(Rows.Count, 1).End(xlUp).Row
        If cel.Value = Range("a4").Value Then
            Cells(ur + 1, 1) = cel.Offset(0, -1).Value
            Cells(ur + 1, 2) = cel.Value
            Cells(ur + 1, 3) = cel.Offset(0, 1).Value
            Cells(ur + 1, 4) = cel.Offset(0, 2).Value
            Cells(ur + 1, 5) = cel.Offset(0, 3).Value
            Cells(ur + 1, 6) = cel.Offset(0, 4).Value
            ur = ur + 1
        End If
    Next cel
    End If
    End Sub






  • di scossa data: 16/11/2015 14:41:45

    cit. alfrimpa: "Giusto per il gusto di partecipare ....."

    Ciao,

    mi permetto di suggerire alcune variazioni al codice di Alfredo.
    La prima riguarda l'inibizione degli eventi, altrimenti ad ogni variazione eseguita dalle istruzioni ClearContents e dal ciclo For la routine di evento viene inutilmente richiamata (senza danni ma comunque "consuma" tempo).
    La seconda la semplificazione del ciclo For Each ... Next.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)


     
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim ur As Long
      Dim rng As Range
      Dim cella As Range
      If Target.Address(0, 0) = "A4" Then
        With Worksheets("Farmaci")
          Set rng = Intersect(.UsedRange, .Columns(2))
        End With
        With Me
          Application.EnableEvents = False
          .Range("A10:F" & .Cells.SpecialCells(xlCellTypeLastCell).Row + 1).ClearContents
          ur = 10
          For Each cella In rng
            If cella.Value = Target.Value Then
              .Cells(ur, 1).Resize(1, 6).Value = cella.Offset(0, -1).Resize(1, 6).Value
              ur = ur + 1
            End If
          Next cella
          Application.EnableEvents = True
        End With
        Set rng = Nothing
      End If
    End Sub



  • di alfrimpa data: 16/11/2015 14:58:40

    Ciao scossa

    Quando ritieni di intervenire devi assolutamente farlo.

    I tuoi non sono solo suggerimenti ma vere lezioni di VBA che io, per mia incapacità, non sempre riesco a "metabolizzare".

    Grazie

    Alfredo





  • di ninai data: 16/11/2015 15:07:21

    E' TORNATOOOOOOOOOO!!!!!!!!!


    scusate l'OT, ma non sono riuscito a trattenere l'urlo per il ritorno di scossa



  • di alfrimpa data: 16/11/2015 15:12:39

    Ma è un urlo di gioia o di paura

    Comunque anche qualche giorno fa ho visto un suo intervento.

    Alfredo





  • di Sergio (utente non iscritto) data: 16/11/2015 16:53:43

    Ringrazio tutti per i contributi. La formula di Alfredo funziona perfettamente, anche se in verità non ho capito dove hai incollato la formula (p.s. puoi spiegarmelo Alfredo??)!. La formula di Albatros54 invece non mi funziona. Non ho avuto ancora il tempo di provare la macro di Scossa, lo farà questa sera. Un caro saluto a tutti,ed ancora grazie!!.



  • di alfrimpa data: 16/11/2015 17:24:37

    Ciao Sergio

    Tu non vedi nessuna formula perché formule non ce ne sono.

    È il codice VBA che provvede ad inserire le giuste informazioni nei posti giusti.

    Se hai bisogno di altri chiarimenti chiedi pure ma se sei a digiuno di VBA dovremmo scrivere un libro

    Alfredo

    P.S. Anche il codice di scossa, sicuramente migliore del mio, funzionerà perfettamente.





  • di ninai data: 16/11/2015 17:35:50

    e la mia formula???? che fine ha fatto...?? me lo dico da solo, funziona!!



  • di alfrimpa data: 16/11/2015 17:39:39

    Ma nessuno aveva dubbi su questo

    Alfredo





  • di Sergio (utente non iscritto) data: 16/11/2015 17:45:06

    Ho visto Alfredo. Mi chiedevo: se dovessi apportare una modifica nel file completo, ad esempio inserire una ulteriore colonna G per riportare ad esempio l'anno, come devo modificare la tua macro??
    Giusto che ci siamo, scusa se approfitto della tua competenza: se voglio fare una ricerca non partendo dal nome del principio, ma ad esempio dal nome commerciale, oppure dal codice ATC, come devo modificare la macro? E' sufficiente che crei un'altra convalida dati, ad esempio in D4, e sostituisca nella macro il riferimento a C4 con quello a D4??

    Grazie ancora!!




  • di alfrimpa data: 16/11/2015 20:14:11

    Ciao Sergio

    Quando si scrive del codice (di qualunque linguaggio di programmazione si tratti) è necessario, direi indispensabile, che vi sia uno scenario quanto più "definito" in termini di struttura dei dati e di obiettivi che si desiderano raggiungere con il codice.

    Capirai che una qualsuasi modifica strutturale dei dati comporta di conseguenza una variazione del codice.

    Detto questo in linea generale e non sottovalutando le ottime proposte con formule che ti sono state fatte se desideri continuare sulla strada del VBA sarebbe opportuno che si delineasse bene il contesto in cui ci muoviamo e, soprattutto, gli obiettivi che ti prefiggi.

    Ritengo che il tuo file reale non contenga dati sensibili; se è così potresti provare ad allegarlo (zippato) sul forum e provare a descrivere quali sono tutte le tue necessità.

    Se lo ritieni opportuno possiamo approfondire.

    Alfredo





  • di Sergio (utente non iscritto) data: 16/11/2015 22:34:53

    Purtroppo non ho ancora alcun file completo... è che dovendolo creare mi chiedevo da ora come fare per potere poi avviare la ricerca partendo da questo o quel dato (es. dal nome del principio attivo, oppure dal nome commerciale o dal codice ATC, per fare un esempio).



  • di alfrimpa data: 16/11/2015 23:26:47

    Ok, provo a vedere se riesco a far qualcosa con l'esempio che hai postato.

    Ma tu, poi, sarai in grado di adattarlo al tuo file reale?

    Inoltre hai provato ad usare i filtri di Excel?

    Alfredo





  • di alfrimpa data: 17/11/2015 13:49:24

    Ciao Sergio

    Ti ho allegato il file Sergio_VBA_1.xlsm.

    Sul foglio Ricerca dopo aver compilato il riquadro giallo con i criteri clicca,sul pulsante "Filtra Dati".

    È ovvio che la macro andrà modificata quando si avrà a disposizione il database dei farmaci completo.

    Fai sapere se era quasto che volevi.

    Alfredo

    P.S. Questa volta oltre al VBA ho usato anche delle formule sul foglio Ricerca.





  • di Sergio (utente non iscritto) data: 17/11/2015 17:19:17

    Purtroppo Alfredo la macro non parte, nel senso che compilato il box giallo il clik sul pulsante "filtra dati" non dà luogo ad alcun evento.



  • di alfrimpa data: 17/11/2015 17:36:39

    Ma hai inserito più criteri nel riquadro giallo?

    Può darsi che, se con più criteri non ci sono record che li soddisfano, è normale che non vedi nulla.

    Prova ad inserire una voce alla volta.

    Comunque farò anch'io delle prove.

    Ci risentiamo.

    Alfredo





  • di alfrimpa data: 17/11/2015 19:26:48

    Scusa Sergio non so perché ma si erano cancellate delle formule sul foglio ricerca.

    Prova con il file allegato Sergio_VBA_2.xlsm

    Alfredo





  • di Sergio (utente non iscritto) data: 17/11/2015 22:41:57

    Grazie Alfredo, mi sembra che ora funzioni perfettamente. Dovendo ovviamente trasformare il file di esempio nel file completo ho necessità di aggiungere nel foglio FARMACI altre righe, con i vari nomi. Ho provato a farlo, aggiungendo una decina di nomi nella colonne del foglio FARMACI, ma i nomi aggiunti non vengono trovati nella ricerca. Mi sfugge qualcosa....



  • di alfrimpa data: 17/11/2015 23:02:36

    Ciao Sergio

    Te lo avevo detto in precedenza che la macro avrebbe funzionato solo con i record presenti nell'esempio.

    Domani ti modifico il codice in modo che qualora aggiungessi record al database dei farmaci la macro funzioni comunque.

    Alfredo





  • di Sergio (utente non iscritto) data: 17/11/2015 23:25:38

    Grazie mille Alfredo....



  • di alfrimpa data: 18/11/2015 11:49:46

    Ciao Sergio

    Come promesso ti allego il file Sergio_VBA_3.xlsm dove penso sono riuscito ad arrivare all'obiettivo; ho eliminato le formule e fatto tutto con il VBA.

    Un consiglio: nel database dei farmaci non lasciare mai righe vuote.

    Fammi sapere.

    Alfredo





  • di sergio (utente non iscritto) data: 18/11/2015 19:23:55

    Intanto ti ringrazio Alfredo. Il file tutto sommato funziona: però come mai, dopo che ho aggiunto una ventina di righe, quando vado a filtrare i dati per ottenere i risultati completi devo cliccare più volte su filtra dati (in pratica, dopo un clic mi dà i primi risultati, poi clicco di nuovo e ne aggiunge altri) ??



  • di alfrimpa data: 18/11/2015 19:42:29

    Mah mi sembra strano.

    La macro ad ogni clic sul pulsante estrae dal database dei farmaci tutti i record che soddisfano i criteri.

    Domani riproverò anch'io di nuovo.

    Alfredo





  • di alfrimpa data: 19/11/2015 10:36:39

    Ciao Sergio

    Oggi ho provato anch'io ed anche a me è successa la stessa cosa e non capisco assolutamente il perché.

    Comunque ho fatto un passo indietro e sul foglio ricerca ti ho rimesso le formule (che ho protetto per evitare cancellazioni accidentali).

    Il file è Sergio_VBA_4

    Fai sapere.

    Alfredo