Elenco a discesa

Anonimo
2020-10-22T00:51:42+00:00

Salve ho bisogno di uno script (purtroppo sono a digiuno di VBA) che mi permetta di inserire una nuova riga identica alla precedente che mantenga le formule e soprattutto al di sotto e non al di sopra di quella precedente. Mi spiego io nella prima cella (A2) ho una casella convalida dati con un serie di sostanze. Nella seconda cella (2B) ho il prezzo (euro/g) di queste sostanze che viene generato in automatico (ho usato la formula =SE($A2=0;"";CERCA.VERT($A2;Foglio3!$A$2:$B$218;2)):. Nella cella 2C ho la quantità in g che va selezionata manualmente, nella 2D il prezzo in base alla quantità di sostanza es (=2B*2C) e in 2E ho il prezzo totale. Cioè io ho aggiunto un commandbutton per aggiungere nuove righe che siano uguali alla precedente. Tutto ciò nasce dalla esigenza che io vorrei creare una dropdown a scelta multipla. Se io seleziono 3 sostanze da questa lista a ciascuna di essa sarà associato un valore (euro/g) ragion per cui selezionando la quantità dovrebbe generarsi in automatico il prezzo/quantità di ciascuna sostanza e sempre in automatico il prezzo totale dato dalla somma dei prezzi unitari delle 3 sostanze. Ho inserito uno script che però mi crea una riga sopra e non sotto (prima cosa che vorrei correggere) ed inoltre se io nella casella superiore seleziono la sostanza A, sotto mi copia una cella con scritto A mentre io vorrei che fosse sempre una dropdown ma "vuota", cioè contenente gli stessi dati ma da selezionare (non voglio che sia precompilata sulla base della scelta precedente). Non so se mi sto spiegando. Inoltre vorrei creare un commonbutton per eliminare eventualmente l'ultima riga qualora la si aggiunga per sbaglio. Grazie in anticipo a chi mi aiuterà.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

2 risposte

Ordina per: Più utili
  1. Anonimo
    2020-10-25T19:37:17+00:00

    Ciao Caty,

    se ho ben capito nella colonna E hai il totale di tutte le righe che man mano vengono aggiunte, vero? Ipotizzando questo nella cella E2 ho inserito la formula =SOMMA(D$2:D2), che con l'aggiungersi di nuove righe ti darà il totale di quella corrente e di tutte le righe precedenti.

    Nella cella D2 inoltre userei la formula =SE.ERRORE(B2*C2;0), altrimenti appena copi la riga vuota, trovando lo spazio al posto di un valore numerico nella colonna del prezzo, vedrai l'errore #VALORE!.

    A questo punto do per scontate due cose:

    1. la cella A1 è piena (probabilmente ci sarà l'intestazione di colonna)
    2. la seconda riga sarà sempre presente con convalida e formule

    Solo se queste due condizioni sono vere le routine di seguito saranno in grado di funzionare.

    Sub CopiaRiga()

    Dim dest As Range

        If IsEmpty(Range("A2")) Then Exit Sub

        Set dest = ActiveSheet.Range("A1").End(xlDown).Offset(1, 0)

        Rows("2:2").Copy Destination:=dest

        dest.ClearContents

        dest.Offset(0, 2).ClearContents

        Application.CutCopyMode = False

    End Sub

    Sub EliminaRigaVuota()

    Dim dest As Range

        If IsEmpty(Range("A2")) Then Exit Sub

        Set dest = ActiveSheet.Range("A1").End(xlDown).Offset(1, 0)

        dest.EntireRow.Delete

    End Sub

    Come potrai vedere per prima cosa controllo la cella A2 sia piena, altrimenti non ha senso né aggiungere una riga (puoi usare già quella) né eliminarla (non dovrebbero essercene altre) e quindi nessuna delle due routine viene eseguita.

    La seconda cosa che faccio è identificare la prima cella vuota nella colonna A assegnandola alla variabile "dest". Il comando  ActiveSheet.Range("A1").End(xlDown).Offset(1, 0) equivale a posizionarsi sulla cella A1, premere CTRL+<freccia giù>, per posizionarsi sull'ultima cella piena contigua alle altre, e scendere ancora di una riga.

    Ora che hai la cella di destinazione puoi usarla come parametro DESTINATION del comando COPY, e puoi eliminarne il contenuto dopo aver copiato la riga 2. Ho anche eliminato il contenuto della quantità, 2 celle a destra di dest (dest.Offset(0,2).ClearContents) che altrimenti sarebbe rimasta inserita.

    Spero di aver capito correttamente cosa volevi e di esserti stato di aiuto. Se hai bisogno chiedi pure.

    Ciao,

    Alessandro

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2020-10-24T13:29:27+00:00

    Ciao Caty,

    Scusa per il ritardo nella risposta.

    Veniamo a quanto richiesto!

    Ho letto attentamente quanto indicato e mi rendo conto di quanto sia importante per te poter utilizzare questo tipo di dropdown menu.

    In effetti come da te indicato sembra che sia necessario creare una Macro o utilizzare comunque VBA.

    Quanto descrivi sembrerebbe quindi necessitare di un'occhio esperto che abbia conoscenze su come aiutarti a creare quanto desiderato.

    Vorrei che tu possa confrontarti direttamente con programmatori e esperti nel campo IT, che hanno conoscenze approfondite proprio su questi argomenti.

    Per farlo ti lascio una Community specifica, utilizzata proprio a tale scopo.

    Ovvero la Community TechNet

    Puoi avviare una nuova conversazione e indicare quanto hai descritto qui.

    In aggiunta, vorrei lasciarti alcuni utili articoli che potrebbero esserti utili per capire di più.

    Il primo riguarda l'utilizzo delle Macro

    Mentre il secondo le VBA.

    Il secondo è in inglese ma ti lascio Bing Translator.

    Potrebbero essere utili per te per comprendere da dove iniziare.

    Fammi sapere come va!

    Per ogni domanda o dubbio siamo qui

    A presto,

    Alessandro

    La risposta è stata utile?

    0 commenti Nessun commento