Sviluppare funzionalita su Microsoft Office con VBA indice confronta con vba

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

    RickyZ
    Partecipante

      Buona sera a tutti e grazie in anticipo a chi avrà voglia e soprattutto tempo per aiutarmi.

      Sul file allegato, ho provato ad inserire delle macro "pescate" sul web e da me adattate per poter utilizzare in maniera "ordinata" dei dati relativi ad ordini (frutta e verdura) estrapolati da files excel ricavati da un gestionale.

      Questi files "sorgente" presentano i dati relativi ad ordini univoci che però sono distribuiti su più righe, così, dopo essere riuscito ad ordinare con una macro i numeri d'ordine incolonnati senza righe vuote, mi sono avvalso di formule (per l'appunto "indice confronta") per recuperare gli altri dati (data ordine; articolo; data scadenza; quantità etc.).

      Mi piacerebbe capire come ottenere tutti i dati legati ad i vari ordini, senza avvalermi di formule.

      Grazie in ogni caso

      Ricky (utente inesperto)

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

      Mister_x
      Partecipante
        2 pts

        ciao

        e' abbastanza una semplice sub() o Macro

        ti riallego il tuo file dove nel foglio dati trovi questa

        Option Explicit
        Sub Da_Sheetnov4_a_dati()
        Dim i As Long
        Dim Nriga As Long
        Dim sh4 As String
        Dim shD As String
        sh4 = "Sheetnov4"
        shD = "dati"
        Nriga = 4
        For i = 20 To Sheets(sh4).Cells(Rows.Count, 3).End(xlUp).Row
         If IsDate(Sheets(sh4).Cells(i, 3)) = True Then
           Sheets(shD).Cells(Nriga, 1) = Sheets(sh4).Cells(i + 2, "F")
           Sheets(shD).Cells(Nriga, 2) = Trim(Mid(Sheets(sh4).Cells(i, "D"), 12, 10))
           Sheets(shD).Cells(Nriga, 3) = Sheets(sh4).Cells(i, "L")
           Sheets(shD).Cells(Nriga, 4) = Sheets(sh4).Cells(i + 3, "AD")
           Sheets(shD).Cells(Nriga, 5) = Sheets(sh4).Cells(i + 3, "C")
           Sheets(shD).Cells(Nriga, 6) = Sheets(sh4).Cells(i, "C")
           Nriga = Nriga + 1
         End If
        Next i
        End Sub
        Allegati:
        You must be logged in to view attached files.
        #21387 Risposta

        RickyZ
        Partecipante

          Grazie 1000 Mr. X

          ho scaricato ora il file.

          Lo provo e ti faccio sapere.

          Ricky

          #21447 Risposta

          RickyZ
          Partecipante

            Ciao Mr. X

            sto provando ad integrare il codice che mi hai fornito con il modulo 2 "copia Macro"
            ' Scelta rapida da tastiera: CTRL+p   che avevo impostato per ricavare i numeri d'ordine in colonna senza celle vuote.

            Non ci riesco

            Puoi aiutarmi per cortesia?

            nel frattempo provo ad insistere

            RickyZ

            #21448 Risposta
            albatros54
            albatros54
            Moderatore
            • Sfida #2
              42 pts

              Se ho capito.

              Vai nel menu sviluppo scegli macro nella finestra che si apre evidenzia la macro che ti interessa , tasto opzioni è trovera la combinazione di tasti conferma.

               

              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 )
              #21449 Risposta

              RickyZ
              Partecipante

                Ciao Albatros e grazie x l'interessamento

                Non penso tu abbia capito la mia esigenza, ma penso di non essermi spiegato bene.

                Penso di aver risolto "unendo" i codici in questo modo:

                Sub copia()
                ' copia Macro
                ' Scelta rapida da tastiera: CTRL+p

                Dim i As Integer
                Dim ur As Long
                Dim lr As Long
                Dim rng As Range
                Dim cel As Range

                Dim Nriga As Long
                Dim shX As String
                Dim shD As String
                shX = Sheets("dati").Range("A1").Value
                shD = "dati"
                Nriga = 4

                ur = Sheets(Range("A1").Value).Cells(Rows.Count, "F").End(xlUp).Row

                Set rng = Sheets(Range("A1").Value).Range("F2:f" & ur)

                For Each cel In rng

                lr = Sheets("dati").Cells(Rows.Count, "A").End(xlUp).Row

                If cel.Value <> "" Then
                For i = 1 To 1
                Sheets("dati").Cells(lr + 1, i).Value = cel.Offset(0, i - 1)
                Next i
                End If
                Next cel

                For i = 1 To Sheets(shX).Cells(Rows.Count, 3).End(xlUp).Row
                If IsDate(Sheets(shX).Cells(i, 3)) = True Then
                Sheets(shD).Cells(Nriga, 1) = Sheets(shX).Cells(i + 2, "F")
                Sheets(shD).Cells(Nriga, 2) = Trim(Mid(Sheets(shX).Cells(i, "D"), 12, 10))
                Sheets(shD).Cells(Nriga, 3) = Sheets(shX).Cells(i, "L")
                Sheets(shD).Cells(Nriga, 4) = Sheets(shX).Cells(i + 3, "AD")
                Sheets(shD).Cells(Nriga, 5) = Sheets(shX).Cells(i + 3, "C")
                Sheets(shD).Cells(Nriga, 6) = Sheets(shX).Cells(i, "C")
                Nriga = Nriga + 1
                End If
                Next i

                'ora copio il foglio dati e lo rinomino con il valore posto nella cella F1

                Sheets("dati").Copy After:=Sheets(Sheets.Count)
                ActiveSheet.Name = Range("g1").Value

                ActiveSheet.Range("A4:F300").Select
                Selection.Copy
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
                Application.CutCopyMode = False

                Range("M1,N1,O1").Select
                Selection.ClearContents
                Range("P1:Q1").Select
                Range("Q1").Activate
                Selection.Cut Destination:=Range("M1:N1")
                Range("M1:N1").Select
                Range("L1").Activate

                End Sub

                Immagino si possa snellire.

                Grazie ancora a tutti

                RickyZ

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

                RickyZ
                Partecipante

                  Ciao a tutti

                  Passo e chiudo

                LoginRegistrati
                Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
                Rispondi a: indice confronta con vba
                Gli allegati sono permessi solo ad utenti REGISTRATI
                Le tue informazioni:



                vecchio frac - 2748 risposte

                albatros54
                albatros54 - 735 risposte

                patel
                patel - 636 risposte

                Marius44
                Marius44 - 557 risposte

                Luca73
                Luca73 - 523 risposte