Login Registrati
Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
  • Autore
    Articoli
  • #13079 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 Risposta
      Luca73
      Luca73
      Partecipante
        11 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 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 Risposta
          patel
          patel
          Moderatore
            16 pts

            allega il file

            #13085 Risposta

            vecchio frac
            Senior Moderator
            • Sfida #1
              135 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 Risposta
              Luca73
              Luca73
              Partecipante
                11 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 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 Risposta
                  patel
                  patel
                  Moderatore
                    16 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 Risposta
                    albatros54
                    albatros54
                    Moderatore
                    • Sfida #2
                      30 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 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 Risposta
                        patel
                        patel
                        Moderatore
                          16 pts

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

                          #13308 Risposta
                          Luca73
                          Luca73
                          Partecipante
                            11 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 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:



                            vecchio frac - 1916 risposte

                            albatros54
                            albatros54 - 610 risposte

                            patel
                            patel - 450 risposte

                            Marius44
                            Marius44 - 390 risposte

                            Luca73
                            Luca73 - 356 risposte