Sviluppare funzionalita su Microsoft Office con VBA Modifica nome con numero progressivo e cella con numero progressivo

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

    FROST220684
    Partecipante

      Ciao a tutti,

      Office 2021 Professional - Windows 11

      il titolo non sarà esaustivo ma spiegherò meglio il problema, Ho questo file che crea preventivi in 3 soluzioni diverse (pdf, xlsx, xlsm) cliccando su un tasto collegato ad una macro. Quando si clicca il tasto "Preventivo Comitive" viene effettuato anche un reset di alcune celle e fino a qui funziona tutto correttamente. Vi allego un file con dei dati preimpostati e Vorrei pero che due celle in particolare al loro reset fossero autocompilate in questo modo:

      Gentile (Cella B1): Fabrizio 1* (Deve diventare in automatico Fabrizio 2 poi Fabrizio 3 poi Fabrizio 4, etc fino a quando non ho finito)

      * questo dato è variabile in base al numero di camere preventivate

      Comitiva (Cella B2): 1 di 4* (deve diventare in automatico 2 di 4, 3 di 4, 4 di 4)

      * questo dato è variabile in base al numero di camere preventivate

      In sommi capi dovendo compilare più preventivi con gli stessi dati, cliccando sul tasto "Preventivo Comitive" mi lascia già le celle che mi servono ma non riesco a modificare quelle uniche 2 che devono progressivamente cambiare numero in base a quanti ne devo fare). Non so se sia una cosa possibile.

      Per far funzionare il file chiaramente vanno modificati i percorsi di creazione dei file pdf, xlsx e xlsm dove adesso c'è il percorso del mio pc deve essere modificato.

      Grazie a tutti se riuscirete a darmi una mano. Per qualsiasi chiarimento sono a disposizione

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

      alexps81
      Moderatore
        58 pts

        Immagino che se in cella B2 c'è scritto 1 di 5 allora dovrà diventare di volta in volta 2 di 5, poi 3 di 5, fino a 5-5....giusto?

        Ma invece per la cella B1...dov'è che si vede il numero di CAMERE PREVENTIVATE? 

        Poi FABRIZIO chi sarebbe? Un nome statico o cambia di volta in volta? Così com'è codificato, quando lanci la Macro si aspetta una cartella denominata Fabrizio

        #43651 Score: 0 | Risposta

        FROST220684
        Partecipante

          alexps81 ha scritto:

          Immagino che se in cella B2 c'è scritto 1 di 5 allora dovrà diventare di volta in volta 2 di 5, poi 3 di 5, fino a 5-5....giusto?

          si giustissimo

          alexps81 ha scritto:

          Poi FABRIZIO chi sarebbe? Un nome statico o cambia di volta in volta? Così com'è codificato, quando lanci la Macro si aspetta una cartella denominata Fabrizio

          No, allora spiego meglio. Il nome fabrizio è un nome esempio cambia in base al cognome del cliente. 

          Ti do un'altra info, il primo preventivo lo compilo io. Quindi sono io che inserirò un nome (esempio Fabrizio 1) e sono io che inserirò il primo intervallo camere (es: 1 di 5)

          Quello che mi serve è che cliccando il tasto lui mi renda progressiva questa cosa e che lo trasformi in Fabrizio 2 ed intervallo 2 di 5. Poi quando lo premo di nuovo: Trasforma in Fabrizio 3 ed intervallo 3 di 5 e cosi via. 

          Spero di essermi spiegato meglio mi rendo conto che magari non l'ho fatto 🙂

          #43655 Score: 0 | Risposta

          FROST220684
          Partecipante

            alexps81 ha scritto:

            Ma invece per la cella B1...dov'è che si vede il numero di CAMERE PREVENTIVATE? 

            dimenticavo questa domanda. Sono io che immetto per la prima volta i dati quindi:

            Sono io ad inserire Fabrizio 1 e intervallo 1 di 5 (che sarà il numero di camere e cioè 5.) che sta per camera 1 di 5

            #43676 Score: 0 | Risposta

            alexps81
            Moderatore
              58 pts

              Non è che ho inteso molto bene quello che ti serve...cmq proviamo a vedere se funziona con il Campo COMITIVA.

              Fai delle prove e dimmi se così va bene. Tieni presente che il tutto funziona solo se c'è sempre scritto qualcosa come 1 di 5; 10 di 15; 4 di 50....cioè ci devono essere sempre un numero (anche più di una cifra), lo spazio, la dicitura "di", un altro spazio, e infine un numero (anche più di una cifra). Se siamo sulla strada giusta, dovresti spiegarmi meglio il Campo dove c'è scritto Fabrizio 1.

              Forse anche lì metti Fabrizio 1 di 5?

              Se così fosse ti consiglio di mettere 1 di 5 nella cella C1 così è più semplice gestirla.

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

              FROST220684
              Partecipante

                Allora, il file sembra funzionare perfettamente. Mi pare che tu non abbia modificato nulla del codice originale ma aggiunto solo questo: 

                    If .Range("B2") <> "" Then
                        On Error GoTo errore
                            v = Split(.Range("B2"), " ")
                            If CInt(v(0)) >= CInt(v(2)) Then GoTo Salta
                            .Range("B2") = CInt(v(0)) + 1 & " " & v(1) & " " & CInt(v(2))
                        End If

                ti lascio delle impressioni: quando arriva al numero 5 se io provo a fare il 6 lui va in errore debug. Si potrebbe fare invece che esce messaggio alert che ti dice "non puoi andare avanti"? (anche se non ha senso sarebbe un opzione di controllo dell'errore)

                ti spiego meglio l'altro campo:

                1. A me arriva una email di richiesta Preventivo per 3 camere a nome Fabrizio.

                2. Compilo il primo preventivo con campo Fabrizio 1

                3. Premendo il tasto Preventivo Comitive lui mi genera il preventivo Fabrizio 1 e vorrei che in automatico cambiasse in Fabrizio 2 per fare il secondo preventivo e successivamente in Fabrizio 3 per fare l'ultimo.

                Note: Fabrizio è un campo variabile perchè dipende dal nome del cliente, mentre il numero è sempre un progressivo che parte da 1 e finisce al numero di camere richieste. Se ha richiesto 3 camere finirà a 3 se ne chiede 5 finirà a 5.

                Spero di essermi spiegato per qualsiasi cosa a disposizione e grazie mille dell'aiuto sembra che vada molto bene.

                #43693 Score: 0 | Risposta

                alexps81
                Moderatore
                  58 pts

                  Ma se per caso l'intervallo è 1 di 5, dopo che 5 volte che hai avviato la macro, poi bisogna che non ti consente più di avviarla? Ipotizziamo che sei arrivato a 5 di 5 e ripremi sul pulsante PREVENTIVO COMITIVE, la macro non deve partire perché sei arrivato al limite?

                   

                  Quando dici che ti arriva una richiesta di preventivo a nome Fabrizio di 3 camere, dov'è che trovo il dato 3 nel Foglio? Io ho bisogno di appoggiarmi su quel numero per determinare il limite.

                  Ma non è che il numero è quello nella cella delle Comitive?

                  Scusa ma ora sono sprovvisto di PC e non ricordo bene la struttura del Foglio.

                  #43694 Score: 0 | Risposta

                  FROST220684
                  Partecipante

                    alexps81 ha scritto:

                    Ma se per caso l'intervallo è 1 di 5, dopo che 5 volte che hai avviato la macro, poi bisogna che non ti consente più di avviarla? Ipotizziamo che sei arrivato a 5 di 5 e ripremi sul pulsante PREVENTIVO COMITIVE, la macro non deve partire perché sei arrivato al limite?

                    allora il 5 di 5 me lo deve far fare perchè è l'ultimo. finito il 5 potrebbe partire un linguaggio che mi resetta il foglio tipo questo che già fa il suo lavoro:

                    With wb1.Worksheets("Input")
                            ' inizio istruzioni di resettaggio celle
                            .Range("B1,B2,B4,B5,B12:D12,B6:D6,E7,B8:D12,B20:D20,G26,G28:G30,G33,G35,J27,N45,D56,D57,D58,J31:J33,D64").ClearContents
                            .Range("B6:D6") = "8/11/2024"
                            .Range("E7") = "7"
                            .Range("B8:D8") = "2"
                            .Range("B9:D9") = "1"
                            .Range("A56:C56") = "Rigo personalizzabile"
                            .Range("A57:C57") = "Rigo personalizzabile"
                            .Range("A58:C58") = "Rigo personalizzabile"
                            
                            ' istruzione di aggiunta +1 al preventivo
                            .Range("B3").Value = .Range("B3").Value + 1
                        End With

                    Quindi ricapitolando se io ho 1 di 5 camere premero 5 volte sul tasto preventivi per fare tutti e 5 i preventivi. Quando pero premero per la 5 volta si aziona il linguaggio di reset che trovi su. la stessa cosa pero deve succedere con un altro numero tipo 1 di 6 arrivati alla sesta volta che lo premo si resetta tutto.

                    alexps81 ha scritto:

                    Quando dici che ti arriva una richiesta di preventivo a nome Fabrizio di 3 camere, dov'è che trovo il dato 3 nel Foglio? Io ho bisogno di appoggiarmi su quel numero per determinare il limite.

                    il dato sul foglio non lo trovi perchè sono io ad immettere per la prima volta i dati sia Fabrizio 1 che poi dovrà arrivare a Fabrizio 3, sia 1 di 3 che poi dovrà arrivare a 3 di 3.

                    alexps81 ha scritto:

                    Ma non è che il numero è quello nella cella delle Comitive?

                    anche qui certo il numero massimo coincide con il numero nella cella comitive. Ad esempio Fabrizio mi chiede 3 preventivi. io immettero i primi dati che sono Fabrizio 1 e 1 di 3. Poi la macro deve fare il resto e passare di volta in volta a:

                    Fabrizio 2 - 2 di 3

                    Fabrizio 3 - 3 di 3

                    Tranquillo non c'è problema provo a spiegarti e mi rendo conto che io conosco le necessità ed il file. Anzi grazie che mi stai aiutando. spero di aver spiegato meglio

                     

                    #43699 Score: 0 | Risposta

                    alexps81
                    Moderatore
                      58 pts

                      Perdonami, ma da quello che leggo mi sembra che a te serve generare tante stampe in PDF e tante copie in xls e xlsx, quanti sono le richieste dei preventivi che tu indichi nella cella B2 (Comitiva = 1 di 3 vuol dire che ti servono 3 preventivi...giusto?)

                      Sperando di aver capito bene...anziché fare tutti sti giri strani (Fabrizio da 1 diventa 2, poi 3 - Comitiva da 1 di 3, diventa 2 di 3, poi 3 di 3), non facciamo prima a far generare tante stampe e copie quante sono le richieste dei preventivi in un sol colpo?

                      Con un ciclo Do While y<x facciamo tutte le stampe e le copie in un solo click.

                      y = 1 mentre x = al numero che indichi nella cella B2 (Comitiva)

                      Alla fine ti ritroverai nelle cartelle che hai indicato nel codice il nome del file che termina con "Nr. 1.pdf"... "Nr. 2.pdf"... "Nr. 3.pdf" e così anche per le copie in xls e xlsx.

                      Ti giro un esempio.

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

                      FROST220684
                      Partecipante

                        allora purtroppo no, c'è un sistema lavorativo che tutti conoscono e sinceramente far cambiare un po di cose mi porterebbe parecchi pensieri. Sinceramente il codice che hai scritto per 1 di 3, 2 di 3 etc era perfetto bisogna solo trovarlo sul nome ed è fatta. ma mi rendo conto non sia sempre facile o possibile. Con un solo click non sarebbe possibile perchè il numero di ospiti in base al preventivo può cambiare è un po complicato da spiegare ma ti posso assicurare che il file fa perfettamente quello che deve fare volevo solo apportare questa miglioria ed automatismo

                        #43718 Score: 0 | Risposta

                        alexps81
                        Moderatore
                          58 pts

                          Allora...lo ammeto...non mi fa impazzire quello che codificato...ma di più non riesco. Purtroppo mi sono dovuto un po' arrangiare con le mie conoscenze. Spero che qualcun altro sappia fare di meglio.

                          Prova il file che ti allego. Ovviamente funziona purché rispetti lo standard il nome del cliente e il numero. Puoi mettere anche un nome composto...ad esempio Paperon de Paperoni 1. La cosa importante è che ci sia uno spazio tra ogni parola e il numero.

                          Stessa cosa per il campo Comitiva. Deve essere tipo 1 di 3, oppure 1 di 5, o anche 1 di 10, cioè numero (lo spazio) 'di' (lo spazio) numero

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

                          FROST220684
                          Partecipante

                            Ciao Alex,

                            Intanto grazie per l'aiuto anche se non dovesse andare bene sei stato molto gentile. Senti allora io un occhiata già l'ho data ti dico impressioni:

                            1. Il codice è stato un po cambiato anche se ho visto che hai lasciato un po tutto quello che c'era spostando le cose (essendo per lavoro operativo devo testarlo bene per capire se fa tutto quello che faceva prima e ti aggiorno)

                            2. Sicuro c'era un problema sulla cella B3 dove è presente il numero del preventivo e che secondo le istruzioni dovrebbe passare sempre ad ogni click a +1 nel momento in cui si preme il tasto insieme ma questo non avveniva ma l'ho sistemato ti posto il codice cosi te lo aggiorni:

                            Option Explicit
                            Dim sCliente As String, sComitiva As String
                            Dim x As Integer, k As Integer
                            
                            Sub save_ascomitive()
                            Dim ws As Worksheet
                            Dim vCliente As Variant, vComitiva As Variant
                            Dim y As Integer, j As Integer, i As Integer
                            
                            Set ws = ThisWorkbook.Sheets("Input")
                            
                            If ws.Range("B1") = "" Or ws.Range("B2") = "" Then
                                MsgBox "Devi specificare ""Cliente"" e ""Comitiva""", vbCritical, "Attenzione..."
                                Exit Sub
                            End If
                            
                            vCliente = Split(ws.Range("B1"), " ")
                            vComitiva = Split(ws.Range("B2"), " ")
                            
                            i = UBound(vCliente)
                            x = CInt(vCliente(i)) '<-- nr. Cliente
                            
                            i = UBound(vComitiva)
                            y = CInt(vComitiva(i)) '<-- nr. fine Comitiva
                            
                            i = LBound(vComitiva)
                            k = CInt(vComitiva(i)) '<-- nr. inizio Comitiva
                            
                            sComitiva = k & " di " & CInt(vComitiva(2))
                            
                             If x = y Then
                                 MsgBox "Limite raggiunto. Ultima stampa consentita.", vbInformation, "Attenzione..."
                                 Salva_e_Stampa
                                 ResettaFoglio
                            
                                ws.Range("B3").Value = ws.Range("B3").Value + 1
                                 Exit Sub
                             Else
                                sCliente = ""
                                 For j = 0 To UBound(vCliente) - 1
                                     sCliente = sCliente & " " & vCliente(j)
                                 Next j
                                      
                                 ws.Range("B1") = Trim(sCliente) & " " & x + 1
                                 ws.Range("B2") = k + 1 & " di " & CInt(vComitiva(2))
                                 Salva_e_Stampa
                                 ws.Range("B3").Value = ws.Range("B3").Value + 1
                             End If
                            
                            Set ws = Nothing
                            
                            End Sub
                            
                            Sub Salva_e_Stampa()
                            Dim p As String
                            Dim s As String
                            Dim v As Variant
                            Dim i As Integer
                            Dim wb1 As Workbook, wb2 As Workbook
                            
                                'inizio istruzioni cursore mouse
                                With Application
                                    .ScreenUpdating = False
                                    .Cursor = xlWait
                                End With
                                
                                Set wb1 = ThisWorkbook
                                Set wb2 = Workbooks.Add     'in wb2 imposto riferimento a nuovo foglio di lavoro
                                p = "C:\Users\Eurolido\Desktop\Preventivi" 'inserire percorso cartelle preventivi
                                'p = "C:\Users\alebo\Downloads\Lavori in Excel\Preventivi"
                                
                                'variabile per salvataggio con nome
                            '    s = "@A - @B - @C - @D - @E"
                            '    For i = 1 To 5
                            '        'v = Choose(i, "B3", "B1", "B6", "B7")
                            '        v = Choose(i, Trim(sCliente), x, "B1", "B6", "B7")
                            '        s = Replace(s, "@" & Chr$(64 + i), wb1.Worksheets("Input").Range(v))
                            '    Next
                            
                                With wb1.Worksheets("Input")
                                    s = .Range("B3") & " - " & Trim(sCliente) & " " & x & " - " & .Range("B6") & " - " & .Range("B7")
                                End With
                                
                                ' inserire il nome della cartella preventivi excel al posto di Preventivi Excel
                                wb1.Worksheets.Copy before:=wb2.Worksheets(1)
                                
                                'in cella N46 del foglio originale salvo data e ora di creazione del foglio copiato
                                With wb2
                                    .Worksheets("Input").Range("B1") = Trim(sCliente) & " " & x
                                    .Worksheets("Input").Range("B2") = sComitiva
                                    .Worksheets("Input").Range("N46") = "Preventivo creato il " & Date
                                    .SaveAs p & "\excel\" & Replace(s, "/", "-") & ".xlsx", FileFormat:=xlWorkbookDefault
                                    For Each v In .LinkSources(Type:=xlLinkTypeExcelLinks)
                                        .BreakLink Name:=v, Type:=xlLinkTypeExcelLinks
                                    Next
                                    
                                wb1.SaveCopyAs p & "\vba\" & Replace(s, "/", "-") & ".xlsm"
                                    With .Worksheets("Output")
                                        ' inserire il nome della cartella preventivi PDF al posto di Preventivi Excel
                                        .Columns("A:A").ColumnWidth = 44.57
                                         .Select
                                         .Range("$A$5:$C$64").AutoFilter Field:=3, Criteria1:="<>"
                                         wb1.Worksheets("Input").Range("N45").Value = p & "\pdf\" & Replace(s, "/", "-") & ".pdf"
                                        .ExportAsFixedFormat xlTypePDF, p & "\pdf\" & Replace(s, "/", "-") & ".pdf", from:=1, To:=4
                                    End With
                                
                                    .Worksheets("Input").Select
                                    .Close True  'salva e chiude il nuovo foglio creato
                                    
                                End With
                                
                                'fine istruzioni cursore mouse
                                With Application
                                    .ScreenUpdating = True
                                    .Cursor = xlDefault
                                End With
                            
                            Set wb1 = Nothing: Set wb2 = Nothing
                            
                            End Sub
                            
                            Sub ResettaFoglio()
                            Dim ws As Worksheet
                            
                            Set ws = ThisWorkbook.Worksheets("Input")
                            
                                With ws
                                    ' inizio istruzioni di resettaggio celle
                                    .Range("B1:B2,B4,B5,B12:D12,B8:D12,B20:D20,G26,G28:G30,G33,G35,J27,N45,D56,D57,D58,J31:J33,D64").ClearContents
                                    .Range("B8:D8") = "2"
                                    .Range("B9:D9") = "1"
                                    .Range("A56:C56") = "Rigo personalizzabile"
                                    .Range("A57:C57") = "Rigo personalizzabile"
                                    .Range("A58:C58") = "Rigo personalizzabile"
                                    
                                    ' istruzione di aggiunta +1 al preventivo
                                    .Range("B3").Value = .Range("B3").Value + 1
                                        
                                End With
                            
                            Set ws = Nothing
                            
                            End Sub
                            

                            apprezzo molto l'aiuto se poi ci sarà qualcuno che riesca ad ottimizzare che ben venga sicuramente io non sarei riuscito a fare nemmeno 3 righe di codice, sono molto in difficoltà a scrivere da capo mentre a leggere mi trovo meglio.

                            Grazie mille ed appena l'ho testato bene ti aggiorno

                            #43736 Score: 0 | Risposta

                            FROST220684
                            Partecipante

                              Ciao Alex,

                              avrei una necessità, il file sembra andare bene, vorrei pero che il file lavorasse in questo modo:

                              Le comitive possono essere di due tipi:

                              1. Persona singola che richiede più camere (in questo caso si sceglie di mettere Fabrizio 1, Fabrizio 2, Fabrizio 3)

                              2. Persona che richiede più camere dando nominativi diversi es. Fabrizio (Comitiva 1 di 3), Sergio (Comitiva 2 di 3), Francesco (Comitiva 3 di 3) (in questo caso si dovrebbe dire al codice che hai creato se non trovi un numero dopo il nome cambia solo la cella comitiva 1 di 3, 2 di 3, 3 di 3 - in modo che io posso immettere nomi diversi che non hanno numeri)

                              Pensi si posso fare? provandolo abbiamo capito che ci potrebbe essere questa casistica, per quello che hai fatto da quello che ho visto sembra funzionare bene

                              Grazie mille

                              #43748 Score: 0 | Risposta

                              alexps81
                              Moderatore
                                58 pts

                                Ciao,

                                prova questa nuova versione   

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

                                FROST220684
                                Partecipante

                                  Ciao Alex,

                                  Grazie ho guardato il file è sembra fare il suo dovere, lo testo per bene e ti do un feedback. Grazie tante per l'aiuto.

                                  Salutiiiii

                                  #43780 Score: 0 | Risposta

                                  FROST220684
                                  Partecipante

                                    Ciao Alex, devo purtroppo fare un dietro front. Allora in sommi capi il file ha capito cosa deve fare ma probabilmente ci sono alcune scremature che lo portano in errore:

                                    1. Quando finisce una comitiva dovrebbe aumentare il preventivo di + 1 ma in realtà lo aumenta di +2

                                    2. Quando si inizia la seconda comitiva lui subito identifica un fine comitiva (es. ho fatto la prima comitiva, ne inizio un'altra di 3 camere lui già alla prima camera mi segnala il fine comitiva e chiaramente resetta il foglio)

                                    3. Sempre collegato al punto 2, quando mi fa questo preventivo della seconda comitiva i file che crea li crea con il nome del precedente preventivo e non con il nuovo nome.

                                    Ho pensato di farti un video screen per farti vedere bene i movimenti che faccio e gli errori che escono, se ti va di continuare posso mandartelo in privato o posto qui un link wetransfer.

                                    Grazie mille per l'aiuto

                                    #43821 Score: 0 | Risposta

                                    alexps81
                                    Moderatore
                                      58 pts

                                      Ciao @frost220684,

                                      perdonami ma non avevo notato questa tua risposta...solo ora l'ho vista.

                                      Per quanto riguarda ciò che hai evidenziato...hai perfettamente ragione. C'erano un po' di cose da sistemare. Prova questa nuova versione. Dovrebbe funzionare, almeno dai test che ho fatto.

                                      L'unica cosa che devi tenere a mente è che se scrivi comitiva 1 di 3 e non lanci le 3 stampe allora succederà il problema che hai evidenziato ai punti 2 e 3.

                                      2 sono le soluzioni: ho chiudi e riapri il file (soluzione che non mi fa impazzire) oppure prevediamo un pulsante di reset che svuota le celle e resetta il foglio richiamando proprio la Routine che resetta il Foglio. Questo dipende perché ho fatto uso di variabili pubbliche e rimangono valorizzate finché non parte la Routine di reset.

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

                                      alexps81
                                      Moderatore
                                        58 pts

                                        Ciao @frost220684,

                                        poi ci ho ripensato e ho trovato una soluzione riguardo al fatto che potrebbero nascere problemi se interrompi la sequenza di stampa. Devo dire che nel sistemare questo problema, ne avevo scoperto un altro, che ho anche risolto. Ti giro, mi auguro, la versione definitiva.

                                        Fammi sapere se funziona.

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

                                        FROST220684
                                        Partecipante

                                          Ciao Alex, il primo file sembrava funzionare bene avevo fatto alcune modifiche aggiungendo anche un reset parziale durante i preventivi comitiva (avevo bisogno che cancellasse solo alcune celle prima del reset totale). Ad ogni modo provo il nuovo e ti dico. Mi puoi dire solo nello specifico cosa hai sistemato così mi rendo conto meglio.

                                          Grazie ancora per l'aiuto.

                                          #43832 Score: 0 | Risposta

                                          alexps81
                                          Moderatore
                                            58 pts

                                            È un po' lungo il discorso ma in poche parole siccome ho dichiarato delle variabili pubbliche (sCliente, sComitive, x, k), queste vanno azzerate ad ogni lancio della Routine, altrimenti incidono sul proseguo della Routine stessa.

                                            Poi in fase di lancio, c'erano delle istruzioni che si avviavano prima rispetto ad altre. Quindi ho sistemato le varie posizioni delle istruzioni.

                                            #43833 Score: 0 | Risposta

                                            FROST220684
                                            Partecipante

                                              Ciao Alex, allora secondo me ci siamo.

                                              Ti chiedo se possibile solo una correzione:

                                              In pratica se adesso non compilo il campo comitiva lui mi da un messaggio di alert (manca cliente o comitiva) che ho visto hai inserito nel codice. In un vecchio codice nello specifico questo: 

                                              Option Explicit
                                              
                                              Sub save_ascomitive()
                                              Dim p As String
                                              Dim s As String
                                              Dim v As Variant
                                              Dim i As Integer
                                              Dim wb1 As Workbook
                                              Dim wb2 As Workbook
                                              
                                                  'inizio istruzioni cursore mouse
                                                  With Application
                                                      .ScreenUpdating = False
                                                      .Cursor = xlWait
                                                  End With
                                                  
                                                  Set wb1 = ThisWorkbook      'in wb1 imposto riferimento a questo foglio di lavoro
                                                  Set wb2 = Workbooks.Add     'in wb2 imposto riferimento a nuovo foglio di lavoro
                                                  p = "Z:\Altri computer\Il mio computer\Archivio\UFFICO BOOKING" 'inserire percorso cartelle preventivi
                                                  
                                                  'variabile per salvataggio con nome
                                                  s = "@A - @B - @C - @D"
                                                  For i = 1 To 4
                                                      v = Choose(i, "B3", "B1", "B6", "B7")
                                                      s = Replace(s, "@" & Chr$(64 + i), wb1.Worksheets("Input").Range(v))
                                                  Next
                                                  ' inserire il nome della cartella preventivi excel al posto di Preventivi Excel
                                                  wb1.Worksheets.Copy before:=wb2.Worksheets(1)
                                                  'in cella N46 del foglio originale salvo data e ora di creazione del foglio copiato
                                                  
                                              
                                                  With wb2
                                                      .Worksheets("Input").Range("N46") = "Preventivo creato il " & Date
                                                      .SaveAs p & "\1 PREVENTIVI E VOUCHER\PREVENTIVI EXCEL\" & Replace(s, "/", "-") & ".xlsx", FileFormat:=xlWorkbookDefault
                                                      For Each v In .LinkSources(Type:=xlLinkTypeExcelLinks)
                                                          .BreakLink Name:=v, Type:=xlLinkTypeExcelLinks
                                                      Next
                                                      
                                                  wb1.SaveCopyAs p & "\1 PREVENTIVI E VOUCHER\PREVENTIVI Excel VBA\" & Replace(s, "/", "-") & ".xlsm"
                                                      With .Worksheets("Output")
                                                          ' inserire il nome della cartella preventivi PDF al posto di Preventivi Excel
                                                          .Columns("A:A").ColumnWidth = 44.57
                                                           .Select
                                                           .Range("$A$5:$C$64").AutoFilter Field:=3, Criteria1:="<>"
                                                           wb1.Worksheets("Input").Range("N45").Value = p & "\0 OPERATORI\Fabrizio\PREVENTIVI PDF fabrizio\" & Replace(s, "/", "-") & ".pdf"
                                                          .ExportAsFixedFormat xlTypePDF, p & "\0 OPERATORI\Fabrizio\PREVENTIVI PDF fabrizio\" & Replace(s, "/", "-") & ".pdf", from:=1, To:=4
                                                      End With
                                                  
                                                      .Worksheets("Input").Select
                                                      .Close True  'salva e chiude il nuovo foglio creato
                                                  End With
                                                  
                                                  With wb1.Worksheets("Input")
                                                      ' inizio istruzioni di resettaggio celle
                                                      .Range("B12:D12,B8:D12,B20:D20,G26,G28:G30,G33,G35,J27,N45,D56,D57,D58,J31:J33,D64").ClearContents
                                                      .Range("B8:D8") = "2"
                                                      .Range("B9:D9") = "1"
                                                      .Range("A56:C56") = "Rigo personalizzabile"
                                                      .Range("A57:C57") = "Rigo personalizzabile"
                                                      .Range("A58:C58") = "Rigo personalizzabile"
                                                      
                                                      ' istruzione di aggiunta +1 al preventivo
                                                      .Range("B3").Value = .Range("B3").Value + 1
                                                      
                                                      If .Range("B2") <> "" Then
                                                      On Error GoTo errore
                                                          v = Split(.Range("B2"), " ")
                                                          If CInt(v(0)) >= CInt(v(2)) Then GoTo Salta
                                                          .Range("B2") = CInt(v(0)) + 1 & " " & v(1) & " " & CInt(v(2))
                                                      End If
                                              Salta:
                                                  End With
                                                  
                                                  'fine istruzioni cursore mouse
                                                  With Application
                                                      .ScreenUpdating = True
                                                      .Cursor = xlDefault
                                                  End With
                                                  Exit Sub
                                              
                                              errore:
                                              MsgBox "Errore nr.: " & Err.Number & " - " & Err.Description
                                              
                                              End Sub
                                              
                                              
                                              

                                              non funzionava il campo Cliente per come lo hai fatto adesso e sembra andare bene ma mi permetteva di non inserire il campo comitiva. Tu dirai a cosa ti serve?

                                              Se io voglio fare 2 preventivi allo stesso cliente, ma per periodi diversi (quindi non è una comitiva), mi avvalgo di questa macro per non farmi cancellare i dati in quanto il successivo preventivo cambierà solo il periodo, es:

                                              Preventivo 1: Cliente: Salvatore - periodo 11/08 - 18/08

                                              Preventivo 2: Cliente: Salvatore - periodo 04/08 - 11/08

                                              Quindi se possibile vorrei che il campo comitiva non sia obbligatorio ma che funzionasse proprio come lo hai creato ma se non lo metto stampa cmq il preventivo. E' possibile secondo te?

                                              Ti allego una versione 7.0 su cui ho modificato alcune cose, cosi parti da qui.

                                              Grazie mille

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

                                              alexps81
                                              Moderatore
                                                58 pts

                                                Ciao,

                                                dovremmo esserci....prova e fammi sapere

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

                                                FROST220684
                                                Partecipante

                                                  Sembra tutto ok. Grazie milleeeeeeeeeeee

                                                Login Registrati
                                                Stai vedendo 23 articoli - dal 1 a 23 (di 23 totali)
                                                Rispondi a: Modifica nome con numero progressivo e cella con numero progressivo
                                                Gli allegati sono permessi solo ad utenti REGISTRATI
                                                Le tue informazioni: