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

    Giuseppe123
    Partecipante

      Ciao a tutti, 

      sto cercando di implementare un piccolo programmino, cerco di spiegare la mia esigenza:

      in un foglio chiamato "Costi" , ho i costi di 10 prodotti ed io dovrei incrementare il costo del prodotto  X fino a minimizzare la differenza  di altri costi (chiamati Costi di risposta) riportati nel foglio "Risultati" del prodotto X rispetto al prodotto Y.  In sostanza devo incrementare il costo di X e devo fermarmi  prima di raggiungere la parità dei Costi di risposta tra X e Y. In questo modo potrei sapere il costo massimo di X che minimizza i costi di Risposta di X rispetto a Y.

      Esempio:Costo X= €3200

      Costo Risposta X= €17.000

      Costo Risposta Y= € 19.000

      Devo aumentare Costo X fino ad ottenere Costo Risposta X = Costo Risposta Y-1..

      Ho provato con il ciclo Do While ma non funziona..

      Grazie a chi vorrà darmi una mano,

      Giuseppe 

       

       

      #13080 Score: 0 | Risposta

      Luca73
      Partecipante
        54 pts

        Ciao

        Siccome hai provato e dici che non funziona, posta il tuo codice, magari inserito nel foglio da dove attingi i dati così 

        a) aiuti chi ti aiuta 

        b) partiamo da ciò che hai fatto per aiutarti.

        Ciao

        Luca

        #13081 Score: 0 | Risposta

        Giuseppe123
        Partecipante

          Ciao Luca, 

          Grazie per la risposta. Premetto che sono proprio agli inizi. Di seguito il codice:

           

          Dim num As Integer, i As Integer

          # cella dei costi

          num = shCosts.Cells.Range("F26")

          Do For i = num To num + 1

          MsgBox "il valore soglia : " & i

          #celle dei costi per risposta

          Loop While shResults.Cells.Range("D20") < shResults.Cells.Range("D18")

          End Sub

          #13082 Score: 0 | Risposta

          patel
          Moderatore
            50 pts

            allega il file

            #13085 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              238 pts

              Giuseppe123 ha scritto:

              Ho provato con il ciclo Do While ma non funziona

              Giuseppe123 ha scritto:

              Do For i = num To num + 1

              Perchè non funziona? ti compare qualche errore o non espone il risultato che ti aspetti?

              C'è un pulsantino fatto così: {;} e serve per formattare bene il proprio codice.

              #13093 Score: 0 | Risposta

              Luca73
              Partecipante
                54 pts

                Ciao

                Hai mischiato un ciclo Do While con un ciclo For...Next

                Il ciclo Do While segue una formulazione così

                Indice=0
                Do
                  funzioni
                  indice=indice+1
                While Condizione

                Il Ciclo For 

                For Indice=1 to 100 
                   funzioni
                   if condizione then 
                       exit for
                   end if
                next Indice
                 

                Ciao

                Luca

                #13287 Score: 0 | Risposta

                Giuseppe123
                Partecipante

                  Ciao a tutti,

                  scusate per il ritardo con cui rispondo. Ho provato a seguire i suggerimenti di Luca ma la macro continua a non funzionare. 

                  Vi allego il foglio excel con la macro che ho scritto. Vi sarei grato se qualcuno riusciste a correggerla o a spiegarmi come emendarla. 

                  Grazie,

                  Giuseppe

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

                  patel
                  Moderatore
                    50 pts

                    Prima di tutto non devi unire le celle,  per il resto dovresti spiegare la logica del programma scrivendo istruzioni in pseudo codice del tipo:

                    prendo la cella x del foglio y e la incremento di 1 fino ad arrrivare a .....

                    #13291 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      81 pts

                      nel modulo vba del tuo file ho trovato questo codice

                      Sub Cost()
                      Dim i As interger, num As Integer
                      i = i
                      shCosts.Activate
                      shResults.Activate
                      Do
                          num = shCost.Range("c26") + i
                          i = i + 1
                          MsgBox "il valore soglia : " & i
                          Loop Until shResults.Cells("c21") > shResults.Cells("c17")
                      
                      End Sub
                      

                      ho riscontrato i=i

                      Domanda; che vuole significare? forse volevi assegnare alla variabile i il valore 1.

                      shCosts.Activate .

                      per attivare un foglio la sintassi è worksheets("nomefoglio").activate nel tuo caso

                      Worksheets("Costs").Activate

                      non puoi attivare contemporistantaneamente   due fogli.

                      modifica queste righe e come ti ha fatto notare Patel(saluto) spiega la logica del programma

                       

                       

                      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 )
                      #13300 Score: 0 | Risposta

                      Giuseppe123
                      Partecipante

                        Ciao a tutti,

                        ho modificato le due righe. Spiego la logica della macro:

                        1. Vorrei incrementare la cella o26 del foglio Cost , che è impostata a € 3200, fino a quando l'importo della cella d20 del foglio Results (che fa riferimento ad una divisione) è pari alla cella r20 meno una unità (sempre del foglio Results). Considerate che i valori del foglio Results derivano dal rapporto tra i valori contenuti nel foglio Cost e i valori presenti nel foglio PASI. Inoltre i valori del foglio Cost utilizzati nel foglio Results dipendono dai valori riportati nella colonna D del foglio Cost. 

                        In sostanza vorrei trovare il valore massimo che la cella o26 del foglio Cost  può assumere prima che d20 eguagli r20 del foglio Results.

                        Grazie ancora

                        #13302 Score: 0 | Risposta

                        patel
                        Moderatore
                          50 pts

                          mi sembra che tu faccia molta confusione, nell'ultimo post hai citato celle completamente diverse da quelle riportate nella tua macro.

                          #13308 Score: 0 | Risposta

                          Luca73
                          Partecipante
                            54 pts

                            Ciao 

                            A parte la confusione a cui ha fatto riferimento Patel, se le formule sono nel foglio allora per ottenere un risultato devi cambiare i valori nel foglio, altrimenti devi costruire le formule nella macro.

                            io penso che tu volessi fare qualcosa tipo formule nel foglio allora devi pensare a qualcosa del genere.

                            Sub Cost()
                            Dim valIniz as long
                            i = 1
                            valiniz=sheets("Cost").Range("c26")
                            Do
                                sheets("Cost").Range("c26").value=sheets("Cost").Range("c26").value+1
                            Loop Until sheets("Results").Cells("c21") > sheets("Results").Cells("c17")
                                MsgBox "il valore soglia : " & i
                            ' poi se ti interessa ritornare al valore iniziale
                            sheets("Cost").Range("c26").value=valiniz
                            End Sub

                             

                            #13349 Score: 0 | Risposta

                            Giuseppe123
                            Partecipante

                              Ciao a tutti, 

                              scusate la confusione che ho fatto nel mio ultimo post (non consideratelo proprio e come riferimenti di cella considerate quelli presenti nella macro che trovate in allegato). Ho provato anche come ha detto Luca73 ma mi da errore di compilazione. La logica è quella di incrementare il valore della cella c26 del foglio Cost fino a quando la cella c2o del foglio Result (celle della colonna C che comunque vanno riferimento ad una divisione, dove il numeratore è calcolato sul valore della cella c26 del foglio Cost) raggiunga la quasi parità (parity-1) con la cella c17 del foglio Result.

                              Grazie,

                              Giuseppe

                               

                               

                               

                               

                              Allegati:
                              You must be logged in to view attached files.
                            Login Registrati
                            Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
                            Rispondi a: Ciclo Do while
                            Gli allegati sono permessi solo ad utenti REGISTRATI
                            Le tue informazioni: