Sviluppare funzionalita su Microsoft Office con VBA Macro che archivia e non permette di archiviare duplicati

LoginRegistrati
Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)
  • Autore
    Articoli
  • #17293 Risposta

    valentino
    Partecipante

      Salve ragazzi io avrei un problema non sono molto esperto di macro ma con un po di tutorial o imparato a creare una macro che mi sposta e quindi archivia un codice di prodotto da uno foglio all'altro ora il problema si pone quando vorrei fare in modo che se io scrivo nel 
      foglio 1 un numero di prodotto e che nel foglio due e già presente vorrei che una volta azionata la macro faccia in modo che non mi archivi il codice perche già esiste nel foglio2 e mi mandi un MSGBOX dicendomi lotto gia presente dico e possibile cmq allego il file dimenticavo la macro che ho creato mi archivia fino a 85 lotti in una volta quindi mi chiedo se sia possibile poter avere lo stesso funzionamento con l'aggiunta che vi ho scritto sopra.

      Allegati:
      You must be logged in to view attached files.
      #17299 Risposta

      vecchio frac
      Senior Moderator
      • Sfida #1
        171 pts

        A parte le considerazioni sull'estetica (non serve forzare la formattazione delle celle, perchè PasteSpecial fa già tutto da solo), noto che nella colonna "prodotto" non c'è un "numero" di prodotto ma un codice ("ubda") mentre nella colonna del "lotto" c'è in effetti un numero. Quindi cos'è che devi controllare? che non esista già il numero presente nel lotto o la dicitura del prodotto?

        Tra parentesi anche la formula in C1 ha qualcosa da sistemare: =CONTA.VALORI(A4:A4:A1048575).

        Comunque per aiutarti prova a cercare nella guida cos'è, come funziona e come si applica il metodo Find di un oggetto Range.

        #17300 Risposta

        valentino
        Partecipante

          quando  clicco nella tasto e attivo la  macro  dovrebbe controllare che nel  foglio 2  nella sezione lotto non ci sia lo stesso lotto e se c'e' mi deve impedire di archiviare e inviare un msgbox dicendomi che il lotto e già presente lo so e un po complicato ma o provato in tutti i modi e non mi riesce ovviamente calcola che la macro deve poter archiviare 85 lotti tutti in una volta spero che esista qualcosa  hahahah 

          #17301 Risposta

          vecchio frac
          Senior Moderator
          • Sfida #1
            171 pts

            valentino ha scritto:

            lo so e un po complicato

            Non è affatto complicato 🙂

            valentino ha scritto:

            o provato in tutti i modi

            Bè, non hai mostrato tutti questi tentativi.

            Hai guardato cosa fa e come funziona il metodo Find di un oggetto Range?

            Devi impostare un ciclo che scorra tutte le celle da spostare, che controlli se nel foglio 2 non c'è già lo stesso prodotto, quindi copiare la cella corrente indicata dal ciclo se non c'è, e saltare oltre se c'è. Provaci, su 😉

            #17302 Risposta

            valentino
            Partecipante

              Il problema  che ho sempre fatto  solo macro registrate e non so come applicare il metodo me lo puoi mostrare tu? puoi? perche io non lo so ancora  fare  so  che  serve a ricercare un determinata cosa  che tu vai ad inserire un range di ricerca ma in questo caso non so come inserirla bene credimi 

              #17306 Risposta

              vecchio frac
              Senior Moderator
              • Sfida #1
                171 pts

                Prova questo codice di esempio.

                Option Explicit
                
                Sub archivia()
                Dim j As Long
                Dim ce As Range
                Dim f As Range
                
                    j = Worksheets("foglio2").Cells(Rows.Count, "A").End(xlUp).Row
                    
                    For Each ce In Range("A4:A85")
                        If ce <> "" Then
                            Set f = Worksheets("foglio2").Range("A:A").Find((ce), LookAt:=xlWhole)
                            If Not (f Is Nothing) Then
                                If MsgBox("Attenzione, il lotto " & ce & _
                                " è già presente nel foglio di archivio. " & _
                                "Proseguo l'analisi?", vbInformation + vbYesNo, "Già archiviato") = vbNo Then Exit Sub
                            Else
                                With Range(Cells(ce.Row, "A"), Cells(ce.Row, "D"))
                                    .Copy Worksheets("foglio2").Cells(j, "A")
                                    .ClearContents
                                End With
                                
                            End If
                        End If
                    Next
                    
                    MsgBox "Finito"
                            
                End Sub
              LoginRegistrati
              Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)
              Rispondi a: Macro che archivia e non permette di archiviare duplicati
              Gli allegati sono permessi solo ad utenti REGISTRATI
              Le tue informazioni:



              vecchio frac - 2714 risposte

              albatros54
              albatros54 - 714 risposte

              patel
              patel - 626 risposte

              Marius44
              Marius44 - 542 risposte

              Luca73
              Luca73 - 508 risposte