Varie ed Eventuali (Off Topic) CICLI, no Grazie

Login Registrati
Stai vedendo 25 articoli - dal 1 a 25 (di 31 totali)
  • Autore
    Articoli
  • #40790 Score: 0 | Risposta

    albatros54
    Moderatore
      89 pts

      Abbiamo una tabella

      Codice Pezzo             Commisssione
      1                                       2.100
      2                                       12.500
      3                                       3.980

      Vogliamo sapere in base al numero di codice del pezzo(n),da noi introdotto, e alla loro quantita (s),introdotto da noi, la commissione totale.

      Non sono AMMESSI

      CICLI DI QUALSIASI GENERE

      COSTRUTTI SELECT ..CASE

      IF...THEN

      FOR...NEXT

      SONO BANDITE LE FORMULE, SOLO VBA.

      Buon Lavoro  

      NB.il controllo della variabile n deve essere su una riga di codice

       

      Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
      Sempre il mare, uomo libero, amerai!
      ( Charles Baudelaire )
      #40791 Score: 0 | Risposta

      Marius44
      Moderatore
        58 pts

        Ciao

        Se ho capito bene vuoi la somma. Se così è prova questa macro

        Option Explicit
        
        Sub comm()
        Dim ur As Long, tot As Long
        ur = Cells(Rows.Count, 1).End(xlUp).Row
        tot = Application.WorksheetFunction.Sum(Range(Cells(2, 2), Cells(ur, 2)))
        Cells(ur + 1, 2) = tot
        End Sub

        Ciao,

        Mario

        #40793 Score: 0 | Risposta

        gianfranco55
        Partecipante
          91 pts

          ciao Marius

          se l'hai preso sei un genio 

          io ho capito

          in base al codice e alla quantità

          cioè loro mettono il codice la quantità

          e tu gli devi trovare il prezzo in base al codice e moltiplicarlo per il numero di pezzi

          un cerca verticale e un moltiplicazione

          ma forse sbaglio

           

          Non sono AMMESSI

          CICLI DI QUALSIASI GENERE

          COSTRUTTI SELECT ..CASE

          IF...THEN

          FOR...NEXT

          SONO BANDITE LE FORMULE, SOLO VBA

          il pallottoliere/abaco  è ammesso?  

           

          #40800 Score: 0 | Risposta

          albatros54
          Moderatore
            89 pts

            @mario

            Ciao, no non chiedo la somma , ma come dice bene @gianfranco(saluto), in base all'articolo e al numero dei pezzi, voglio sapere il costo.

            gianfranco55 ha scritto:

            il pallottoliere/abaco  è ammesso?

            se fornisce la soluzione ben venga  

             

            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
            Sempre il mare, uomo libero, amerai!
            ( Charles Baudelaire )
            #40805 Score: 0 | Risposta

            gianfranco55
            Partecipante
              91 pts

              ciao

              però dovresti dire dove inserisci i dati

              perchè se in A1 scrivi il prezzo e in B1 i pezzi per avere il dato in C1

              teoricamente basta 

              `Private Sub Worksheet_Change(ByVal Target As Range)
              If Not Intersect(Target, Range("B1:B1000")) Is Nothing Then
              Target.Offset(0, 1).Value = Target * Target.Offset(0, -1).Value
              End If
              End Sub`

              ma non ho capito se devi fare una ricerca dei codici o altro

              #40806 Score: 0 | Risposta

              albatros54
              Moderatore
                89 pts

                gianfranco55 ha scritto:

                però dovresti dire dove inserisci i dati

                i dati possono essere inseriti anche da una inputBox ed in uscita avere una MsgBox con il valore.

                Il codice postato non rispecchia la clausola

                Non sono AMMESSI

                IF....THEN

                 

                Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                Sempre il mare, uomo libero, amerai!
                ( Charles Baudelaire )
                #40807 Score: 0 | Risposta

                gianfranco55
                Partecipante
                  91 pts

                  a sto punto fai una form

                  tre caselle di testo e sulla terza calcoli il totale

                  il problema è il prezzo dov'è

                  Private Sub TextBox2_Change()
                  TextBox3.Value = TextBox1.Value * TextBox2.Value
                  End Sub
                  #40808 Score: 0 | Risposta

                  albatros54
                  Moderatore
                    89 pts

                    nella tua userform  io debbo inserire solamente il Codice Pezzo e la Quantità, e mi deve ritornare il costo totale   che poi Occhio perchè quello che introduci nella textbox viene visto come STRING

                     

                    Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                    Sempre il mare, uomo libero, amerai!
                    ( Charles Baudelaire )
                    #40809 Score: 0 | Risposta

                    gianfranco55
                    Partecipante
                      91 pts

                      ciao

                      non mi hai risposto però

                      dove diavolo lo prendo il prezzo al pezzo?

                      mica l'hai detto....ergo il famoso cerca verticale come diavolo lo imposto?

                      i Occhio perchè quello che introduci nella textbox viene visto come STRING

                      secondo te l'immagine e il codice non li ho provati?

                      funziona anche senza dover formattare la textbox come vedi il risultato c'è nella terza text  

                       

                      #40811 Score: 0 | Risposta

                      albatros54
                      Moderatore
                        89 pts

                        gianfranco55 ha scritto:

                        dove diavolo lo prendo il prezzo al pezzo?

                        dalla tabella che ho inserito nella colonna "commissione"  

                         

                        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                        Sempre il mare, uomo libero, amerai!
                        ( Charles Baudelaire )
                        #40813 Score: 0 | Risposta

                        gianfranco55
                        Partecipante
                          91 pts

                          ma come mai non l'ho capito da subito

                          sono proprio sbadato  

                          pensavo fosse la commissione totale.

                          bene niente cicli niente formule niente iF

                          For Each neanche a vederlo

                          puoi usare almeno ........Range("D2").FormulaLocal = "=CERCA.VERT($C$2;$A$2:$B$5;2;0)"

                           

                          ma lascio a Marius non è il mio campo e potre fare danni  

                          #40814 Score: 0 | Risposta

                          albatros54
                          Moderatore
                            89 pts

                            albatros54 ha scritto:

                            SONO BANDITE LE FORMULE, SOLO VBA.

                            gianfranco55 ha scritto:

                            Range("D2").FormulaLocal = "=CERCA.VERT($C$2;$A$2:$B$5;2;0)"

                             

                            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                            Sempre il mare, uomo libero, amerai!
                            ( Charles Baudelaire )
                            #40815 Score: 0 | Risposta

                            gianfranco55
                            Partecipante
                              91 pts

                              Albatros

                              Range("D2").FormulaLocal = "=CERCA.VERT($C$2;$A$2:$B$5;2;0)"

                              è vba mica bruscolini eh!

                              si deve adeguare alle tue esigenze ma è VBA

                              #40816 Score: 0 | Risposta

                              albatros54
                              Moderatore
                                89 pts

                                albatros54 ha scritto:

                                il controllo della variabile n deve essere su una riga di codice

                                giusto, ma non è riga di  codice VBA  

                                 

                                Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                Sempre il mare, uomo libero, amerai!
                                ( Charles Baudelaire )
                                #40820 Score: 0 | Risposta

                                Marius44
                                Moderatore
                                  58 pts

                                  Ciao a tutti

                                  Avevo capito tutt'altra cosa. Mi scuso per il precedente post. Visto che, noncuranti della mia età, mi chiamate in causa (  ) vi allego quel che ho fatto.

                                  Questo il codice:

                                  in Questa cartella di lavoro

                                  `Option Explicit
                                  
                                  Private Sub Workbook_Open()
                                  Dim ur As Long
                                    ur = Cells(Rows.Count, 1).End(xlUp).Row
                                    UF.ComboBox1.RowSource = Sheets(1).Range("A2:A" & ur).Address
                                    UF.Show
                                  End Sub</code></pre><p>nella UserForm (UF)</p><pre class="language-c"><code>Option Explicit
                                  
                                  Private Sub ComboBox1_Change()
                                  Application.EnableEvents = False
                                  UF.TextBox2 = ""
                                  UF.Label3 = ""
                                  Application.EnableEvents = True
                                  End Sub
                                  
                                  Private Sub TextBox2_Change()
                                  Dim n As Integer, s As Integer
                                  Dim ur As Long, p As Long
                                  ur = Cells(Rows.Count, 1).End(xlUp).Row
                                  n = CInt(ComboBox1.Value)
                                  If n = 0 Then Exit Sub
                                  p = Application.WorksheetFunction.VLookup(n, Range(Cells(2, 1), Cells(ur, 2)), 2, 0)
                                  If TextBox2 <> "" And TextBox2 <> 0 Then
                                    s = TextBox2.Value
                                    Label3 = s * p
                                  End If
                                  End Sub`

                                  "Dovrebbe" funzionare (ma può essere migliorato).

                                  Ciao,

                                  Mario

                                  PS - Mi sono accorto adesso che vi sono DUE IF ... THEN.

                                  Provo ad eliminarli.

                                  Allegati:
                                  You must be logged in to view attached files.
                                  #40822 Score: 0 | Risposta

                                  Marius44
                                  Moderatore
                                    58 pts

                                    Ciao

                                    Sostituire la precedente con la seguente macro

                                    Private Sub TextBox2_Change()
                                    Dim n As Integer, s As Integer
                                    Dim ur As Long, p As Long
                                    ur = Cells(Rows.Count, 1).End(xlUp).Row
                                    n = CInt(ComboBox1.Value)
                                    p = Application.WorksheetFunction.VLookup(n, Range(Cells(2, 1), Cells(ur, 2)), 2, 0)
                                    s = CVar(TextBox2 + "0") * 1
                                    Label3 = s * p / 10
                                    End Sub

                                    Il condizionale vale sempre. Riprovare, Ciao,

                                    Mario

                                    #40833 Score: 0 | Risposta

                                    vecchio frac
                                    Senior Moderator
                                      272 pts

                                      Vedo solo adesso, per favore datemi un giorno o due prima di postare soluzione 🙂

                                      E' da tanto che non giochiamo.

                                      #40834 Score: 0 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        272 pts

                                        Io ho pensato a una cosa così.

                                        In un modulo:

                                        Option Explicit
                                        
                                        Function totale()
                                        Dim ce As Range
                                        Dim quantita As Integer
                                        Dim commissione As Single
                                        
                                            Application.Volatile
                                            
                                            Set ce = Application.ThisCell
                                            commissione = ce.Offset(, -1)
                                            quantita = ce.Offset(, -2)
                                                
                                            totale = quantita * commissione
                                        End Function

                                        Il foglio prevede le tre colonne, io scrivo nelle celle in giallo, il risultato è nelle celle in azzurro.

                                        In D2, D3 e D4 scrivo la formula =totale().

                                        Quando inserisco un valore per esempio in B2, ottengo il prodotto di B2 per C2 nella cella D2.

                                        #40838 Score: 0 | Risposta

                                        Marius44
                                        Moderatore
                                          58 pts

                                          Ciao a tutti

                                          Altro modo (che a me non piace ma fa il suo lavoro): inserire questo codice in altro Foglio (nel quale sono stati riportati i dati) all'Evento .Activate

                                          Option Explicit
                                          
                                          Private Sub Worksheet_Activate()
                                          Dim msg As String, tit1 As String, tit2 As String, cod As Integer, qtà As Long
                                          Dim mv1 As Long, mv2 As Long, ur As Long
                                          Range("D2:F2").ClearContents
                                          ur = Cells(Rows.Count, 1).End(xlUp).Row
                                          tit1 = "Inserire il Codice del pezzo"
                                          mv1 = InputBox(msg, tit1)
                                          tit2 = "Inserire la Quantità"
                                          mv2 = InputBox(msg, tit2)
                                          Cells(2, 4) = mv1
                                          Cells(2, 5) = mv2
                                          Cells(2, 6) = Application.WorksheetFunction.VLookup(mv1, Range("A2:B" & ur), 2, 0) * mv2
                                          
                                          End Sub

                                          All'attivazione del Foglio mostra due InputBox in cui bisogna inserire il Codice e la Quantità. Ovviamente ho omesso la trappola per eventuali errori (codice non trovato, quantità non inserita o pari a zero, ecc).

                                          Ciao,

                                          Mario

                                          #40841 Score: 0 | Risposta

                                          albatros54
                                          Moderatore
                                            89 pts

                                            Qualcuno storcera il naso....ma ho riesumato dalla mia collezione un vecchio libro d'informatica ed ho estratto queste righe di codice un po.....obsolento, che fa il suo dovere.
                                            Ho inserito in un foglio il codice pezzo dalle cella(a1) alla cella (a3), mentre nelle celle(b1..b3)il costo della commissione.
                                            Nel foglio ho inserito queato codice:

                                            Sub ongotocelle()
                                                Dim n As Integer
                                                Dim s As Integer
                                                n = CInt(InputBox("Introduci il codice Articolo"))
                                                s = CInt(InputBox("Introdici numero pezzi"))
                                                On n GoTo Primo, Secondo, terzo
                                            Primo:     c = s * Range("b1")
                                                MsgBox "La Commissione Globale è  " & c
                                                Exit Sub
                                            Secondo:     c = s * Range("b2")
                                                MsgBox "La Commissione Globale è  " & c
                                                Exit Sub
                                            terzo:     c = s * Range("b3")
                                                MsgBox "La Commissione Globale è  " & c
                                                Exit Sub
                                            End Sub
                                            

                                            che rispecchi le clausole inserite nel post precedente.  

                                             

                                            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                            Sempre il mare, uomo libero, amerai!
                                            ( Charles Baudelaire )
                                            #40848 Score: 0 | Risposta

                                            scossa
                                            Partecipante
                                              37 pts

                                              Ciao,

                                              non ho capito se infrange qualche regola, ma propongo questa udf che prevede 3 argomenti (il range della tabella, il codice del prodotto, la quantità) e restituisce il costo:

                                              Function uProfit(ByRef rng As Range, ByVal nCode As Long, ByVal nQty As Long) As Variant
                                                uProfit = rng(Application.Match(nCode, rng.Columns(1), 0), 2) * nQty
                                              End Function
                                              

                                               

                                              #40849 Score: 1 | Risposta

                                              vecchio frac
                                              Senior Moderator
                                                272 pts

                                                   bellissimo! il mio Maestro è ancora tra noi  <3

                                                 Da quel che ho capito io, la soluzione di scossa non infrange alcuna regola ed è concisa ed elegante anche se utilizza una funzione del foglio di lavoro mascherata da VBA  

                                                Ah Albatros... ti supplico... adesso che l'hai riesumata cancella subito col bianchetto ogni ricorrenza di On ... Goto + label dal tuo patrimonio culturale     

                                                #40855 Score: 0 | Risposta

                                                scossa
                                                Partecipante
                                                  37 pts

                                                  vecchio frac ha scritto:

                                                  anche se utilizza una funzione del foglio di lavoro mascherata da VBA

                                                   

                                                  Eccoti accontentato:

                                                  Function uProfitSwt(ByRef rng As Range, ByVal nCode As Long, ByVal nQty As Long) As Variant
                                                    uProfitSwt = rng(nCode, 2) * nQty
                                                  End Function

                                                  così è VBA d.o.c.g.   

                                                   

                                                  #40856 Score: 0 | Risposta

                                                  Marius44
                                                  Moderatore
                                                    58 pts

                                                    Buongiorno a tutti

                                                    @scossa

                                                    Scusa Marco ma nell'ultima UDF credo (ho paura quasi a dirlo) ci sia un piccolo errore.

                                                    Visto che la tabella proposta ha delle intestazioni di colonna, nell'indicare rng(nCode, 2) mi pare ci voglia un +1, cioè rng(nCode + 1, 2).

                                                    Grazie per l'attenzione. Ciao,

                                                    Mario

                                                    #40862 Score: 0 | Risposta

                                                    scossa
                                                    Partecipante
                                                      37 pts

                                                      Ciao Mario,

                                                      capisco il tuo dubbio, ed effettivamente avrei dovuto specificare con un esempio la chiamata della udf  lato celle: uProfitSwt(A2:B4;3;5);

                                                      normalmente si passa solo il range dei dati (senza la riga di intestazione, in pratica il DataBodyRange).

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 31 totali)
                                                    Rispondi a: CICLI, no Grazie
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: