erifica ORDINE



  • erifica ORDINE
    di NICOLA (utente non iscritto) data: 24/06/2016 17:55:27

    Ciao,
    avrei bisogno di verificare la presenza di ordini associate a varie commesse che ho in un database.
    Allego un estratto del database come esempio.
    In sintesi (poi ho spiegato anche nel file allegato):
    1) ho una colonna con i codici di Commessa (Colonna A)
    2) ho una colonna con i codici di protocollo (Colonna B), tra i quali è presente anche la sigla ORD relativa agli ordini

    Quello che vorrei è:
    Generare un report in .pdf nel quale vengono riportati in ordine crescente i Codici delle Commesse per le quali non è presente un Ordine, ovvero la sigla ORD nella Colonna B

    Grazie



  • di patel data: 25/06/2016 10:22:32

    perché hai allegato un file con l'intestazione in fondo ?





  • di Nicola (utente non iscritto) data: 25/06/2016 11:08:51

    Scusa ma non ho capito?!



  • di patel data: 25/06/2016 18:43:29

    l'intestazione delle colonne A e B N° COMMESSA e TIPO non sono sulla prima riga.
    comunque metti a posto il file e poi prova questa macro, il risultato è sul foglio 2

     
    Sub ordina()
    Application.ScreenUpdating = False
    LR1 = Sheets(1).Cells(Cells.Rows.Count, "A").End(xlUp).Row
    Sheets(1).Range("A1:B" & LR1).Copy Sheets(2).Range("A1")
    Sheets(2).Sort.SortFields.Clear
    Sheets(2).Select
    With ActiveSheet.Sort
      .SortFields.Add Key:=Range("A2"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
      .SetRange Range("A2:B" & LR1)
      .Header = xlNo
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
       .Apply
    End With
    r1 = 2
    r = r1
    Do While Cells(r, 1) <> ""
      ord = 0
      Do While Cells(r, 1) = Cells(r + 1, 1)
        If Cells(r, 2) = "ORD" Then ord = 1
        r = r + 1
      Loop
      If Cells(r, 2) = "ORD" Then ord = 1
      If ord = 1 Then
        Range("A" & r1 & ":A" & r).EntireRow.Delete
        r1 = r1: r = r1
      Else
        If r > r1 Then
          Range("A" & r1 & ":A" & r - 1).EntireRow.Delete
        End If
        r1 = r1 + 1: r = r1
      End If
    Loop
    Columns(2).Delete
    Application.ScreenUpdating = True
    End Sub
    






  • di NICOLA (utente non iscritto) data: 27/06/2016 13:08:28

    ok.
    Se nel medesimo file excel ho anche altri fogli come devo fare?
    Ho provato a sostituire a Sheets (1) il seguente Sheets (VerificaORD) ed a Sheets (2) il seguente Sheets (ElabORD)... ma non funziona.
    Quale sarebbe la dictura corretta ?

    Grazie



  • di patel data: 27/06/2016 13:17:30

    Sheets ("VerificaORD") e Sheets ("ElabORD")





  • di Cucù data: 28/06/2016 09:14:30

    Non ho capito bene il problema... e il file allegato ha peggiorato la mia confusione soprattutto quando dice "Ad esempio, la prima commessa che non ha un ORD è quella con Codice 006" ma poi andato a vedere il codice 006 ha come ORd "OFF", comunque sia il problema secondo me potrebbe avere le caratteristiche per poter utilizzare bene una Dictionary...
    Cucù



  • di patel data: 28/06/2016 10:32:25

    ci sono parecchi doppioni, cercando bene c'è anche una 006 con ORD.
    Le Dictionary non sono il mio punto forte.





  • di Cucù data: 28/06/2016 10:55:35

    No, non c'è!



  • di patel data: 28/06/2016 12:09:55

    scusa, ho confuso, la 006 è la prima che non ha ORD, le precedenti anno almeno una occorrenza con ORD