Pagina precedente | 1 2 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

inserire valore tra 2 fogli

Ultimo Aggiornamento: 15/02/2021 08:48
Post: 831
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
21/01/2021 19:25

inserire valore tra 2 fogli
Ciao a tutti.
in foglio "nuovo articolo" scrivere in C2 una lettera in E2 un numero da 1 a 100.
se nel foglio "articolo" questa posizione cella successiva colonna B è libera
inserire C4 foglio "nuovo articolo" in colonna B foglio "articolo"
inserire C5 foglio "nuovo articolo" in colonna G foglio "articolo"
se pos. in foglio "articolo" non è libera msgbox "errore posizione non libera"
se C3 foglio "nuovo articolo" è già presente in foglio "articolo" msgbox "articolo già presente"
spero di essermi spiegato
grazie
max
[Modificato da maxma62 21/01/2021 19:31]
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.066
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
21/01/2021 23:05

I casi sono due:
1) o io non ho capito la tua spiegazione con relative coordinate delle celle;
2) oppure credo che tu abbia fatto un po' di confusione su quale cella va in quale altra cella e che cosa ci va in quell'altra cella.
Per favore, prova a riscrivere la sequenza con i relativo msgbox.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 831
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
22/01/2021 08:54

Ciao rollis
nell'esempio dell' allegato:

inserire C3 foglio "nuovo_articolo" in foglio "articolo" cella B413
inserire C4 foglio "nuovo_articolo" in foglio "articolo" cella G413

se posizione non libera msgbox "posizione non libera"

se C3 foglio "nuovo_articolo" già presente in foglio "articolo" msgbox "articolo fià presente"

spero di esermi spiegato
grazie
max
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.067
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
22/01/2021 10:37

Anche se ora non capisco cosa centrino le celle B413 e G413 (presumo B4 e G4 come indicato nel post #1) continuo a non comprendere la necessità del MsgBox "articolo già presente" quando tutto ruota attorno al fatto che la cella in colonna B (articolo) deve essere vuota e se piena già prevedi il MsgBox "errore posizione non libera".

Per ora prova questa mia macro, mettila in un modulo (del Foglio o Standard che sia) poi la lanci con l' Alt+F8 oppure ti crei un pulsante e vi associ la macro.
Option Explicit

Sub Aggiorna_Articoli()

    Dim sh1    As Worksheet
    Dim sh2    As Worksheet
    Dim cella  As Range
    Dim pos    As String
    Dim articolo As Variant
    Dim quantità As Variant

    Set sh1 = Sheets("nuovo_articolo")
    Set sh2 = Sheets("articolo")
    With sh1
        pos = .Range("C2") & .Range("D2") & Format(.Range("E2"), "00") 'costruisci il codice pos
        articolo = .Range("C3")
        quantità = .Range("C4")
    End With
    With sh2
        Set cella = .Range("A6:A2604").Find(What:=pos, LookIn:=xlValues) 'cerca l'articolo
        If .Cells(cella.Row, 2) = "" Then         'se colonna B è vuota ...
            .Cells(cella.Row, 2) = articolo       '... inserisci l'articolo
            .Cells(cella.Row, 7) = quantità       '... inserisci la quantità
        Else
            MsgBox "posizione non libera"         'la colonna B è già impegnata
        End If
    End With
    
End Sub
[Modificato da rollis13 22/01/2021 10:44]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 832
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
22/01/2021 12:41

Ciao rollis,
ho provato la macro e l'ho inserita in questo workbook.
Dà errore

variabile oggetto o variabile del blocco with non impostata

qui:

If .Cells(cella.row, 2) = "" Then 'se colonna B è vuota ...

____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.068
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
22/01/2021 14:49

Di grazia, hai spostato tutta l'area di input in giù di una riga !
E' chiaro che se sposti tutto in giù devi anche adeguare le coordinate delle celle nella macro (o viceversa).

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 833
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
22/01/2021 15:23

AH...


Option Explicit

Sub Aggiorna_Articoli()

 
    Dim sh1    As Worksheet
    Dim sh2    As Worksheet
    Dim cella  As Range
    Dim pos    As String
    Dim articolo As Variant
    Dim quantità As Variant
    Dim avviso As String
    
    Set sh1 = Sheets("nuovo_articolo")
    Set sh2 = Sheets("articoli")
        
        
    
    With sh1
        pos = .Range("C3") & .Range("D3") & Format(.Range("E3"), "00") 'costruisci il codice pos
        articolo = .Range("C4")
        quantità = .Range("C5")
    End With
    With sh2
        Set cella = .Range("A6:A2604").Find(What:=pos, LookIn:=xlValues) 'cerca l'articolo
        If .Cells(cella.row, 2) = "" Then         'se colonna B è vuota ...
            .Cells(cella.row, 2) = articolo       '... inserisci l'articolo
            .Cells(cella.row, 7) = quantità       '... inserisci la quantità
        Else
            MsgBox "posizione non libera"         'la colonna B è già impegnata
        End If
    End With
    

     
End Sub


grazie rollis.
E' possibile aggiungere se C4 foglio "nuovo articolo" è già presente in foglio "articoli" msgbox "articolo già presente in foglio articoli"
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.069
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
22/01/2021 17:30

Vedi che continuiamo a non capirci però mi sorge un dubbio.

Non capisco a che serve MsgBox "articolo già presente" se poi interrompi la macro per dire MsgBox "posizione non libera".

Il dubbio mi viene pensando che invece vuoi che quando compili l'area di input, se, a prescindere dal 'pos' indicato, vuoi che venga segnalato che l' 'articolo' è già presente nel foglio 'articolo' e/o magari che è già associato ad un altro 'pos'.

Fai sapere perché anche oggi continuo a considerare i due MsgBox un doppione.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 834
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
22/01/2021 17:51

Ciao,
nel esempio dell'allegato

pos A-03
articolo 123456
q.tà 100
clicca inserisci
e nella riga A-03 del foglio "articoli" c'è l'articolo
e fin qui va bene

se in
pos scrivo A-04
questa va nella riga A-04 del foglio "articoli"
ma non va bene: nella colonna "articolo" deve esserci solo un articolo non ripetuto
Spero di essermi spiegato
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.070
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
22/01/2021 20:27

Bastava dirlo: "vorrei verificare se l'articolo esiste"; che ne sappiamo noi se l'articolo può (o non può) essere immagazzinato in diverse posizioni.
Vedi se con queste modifiche va un po' meglio.
Option Explicit

Sub Aggiorna_Articoli()

    ActiveSheet.Unprotect "123456"
    
    Dim sh1    As Worksheet
    Dim sh2    As Worksheet
    Dim cellaPos As Range
    Dim cellaArt As Range
    Dim pos    As String
    Dim articolo As Variant
    Dim quantità As Variant
    
    Set sh1 = Sheets("nuovo_articolo")
    Set sh2 = Sheets("articoli")
    With sh1
        pos = .Range("C3") & .Range("D3") & Format(.Range("E3"), "00") 'costruisci il codice pos
        articolo = .Range("C4")
        quantità = .Range("C5")
    End With
    With sh2
        Set cellaPos = .Range("A6:A2604").Find(What:=pos, LookIn:=xlValues, LookAt:=xlWhole) 'cerca il pos
        Set cellaArt = .Range("B6:B2604").Find(What:=articolo, LookIn:=xlValues, LookAt:=xlWhole) 'cerca l'articolo
        If Not cellaArt Is Nothing Then           ' articolo già presente
            MsgBox "articolo già presente in foglio articoli in Pos. " & .Cells(cellaArt.Row, 1) 'l'articolo già esiste
            Exit Sub
        End If
        If .Cells(cellaPos.Row, 2) = "" Then      'se colonna B è vuota ...
            .Cells(cellaPos.Row, 2) = articolo    '... inserisci l'articolo
            .Cells(cellaPos.Row, 7) = quantità    '... inserisci la quantità
            MsgBox "magazzino aggiornato"         'operazione correttamente completata
        Else
            MsgBox "posizione non libera, trovato articolo " & .Cells(cellaPos.Row, 2) 'la colonna B è già impegnata
        End If
    End With
    
    ActiveSheet.Protect "123456"
    
End Sub
[Modificato da rollis13 22/01/2021 20:36]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 835
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
22/01/2021 21:22

Grazie rollis penso sia esatto.
Devo fare delle prove la prossima settimana in ufficio.
Ti ringrazio tanto
Grazie ancora.
max
[Modificato da maxma62 22/01/2021 21:22]
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.071
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
22/01/2021 21:55

Lo considero un riscontro positivo [SM=g27811] i test li ho fatti io [SM=g27835].

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 836
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
22/01/2021 22:32

[SM=g27811] [SM=g27811] [SM=g27811]
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.072
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
23/01/2021 00:43

Ho notato ora che hai aggiunto una password di protezione; aggiungi questa riga prima dell'interruzione della macro in caso di 'articolo già presente':
...
ActiveSheet.Protect "123456"    '<=AGGIUNTA
Exit Sub
...
[Modificato da rollis13 23/01/2021 10:49]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 837
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
23/01/2021 09:19

Grazie ancora rollis
[SM=g27811]
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 838
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
25/01/2021 22:29

Ciao è possibile aggingere in foglio "nuovo articolo" cella G3 se la posizione è libera o non libera.
Penso che basti una formula
Grazie
max
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.075
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
25/01/2021 23:38

Cioè ? per una semplice formuletta !! Capisco che il VBA può essere ostico ma per una formula con un CERCA.VERT. che è la base dell'Excel ci potevi mettere un po' più d'impegno.

=SE(CERCA.VERT(CONCATENA($D$3;$E$3;TESTO($F$3;"00"));articoli!$A$6:$B$2604;2;FALSO)*1;"";"posizione libera")

PS. dato che ho visto che ora usi anche 'articoli' alfanumerici la formula diventa:

=SE(SE.ERRORE(CERCA.VERT(CONCATENA($D$3;$E$3;TESTO($F$3;"00"));articoli!$A$6:$B$2604;2;FALSO)*1;1);"";"posizione libera")
[Modificato da rollis13 26/01/2021 00:35]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 839
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
26/01/2021 08:34

Ciao rollis, grazie. [SM=g27811]
Ho aggiunto davanti alla formula la posizione.
=CONCATENA($D$3;$F$3;TESTO($H$3;"00")&" "&SE(SE.ERRORE(CERCA.VERT(CONCATENA($D$3;$F$3;TESTO($H$3;"00"));articoli!$A$6:$B$2604;2;FALSO)*1;1);"posizione non libera";"posizione libera")).
Ora di solito per formattare una cella con determinato testo uso:
per esempio =SINISTRA(K3;12)="articolo pre"
ma qui il testo non è sempre uguale.
C'è una formula per una determinata parola, libera/non libera?
max
[Modificato da maxma62 26/01/2021 09:07]
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 840
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
26/01/2021 09:14

Formattazione:

=VAL.NUMERO(RICERCA("posizione libera";K2)) 'verde
=VAL.NUMERO(RICERCA("posizione non libera";K2)) 'rosso
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 841
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
26/01/2021 14:45

Ho aggiunto un'altra informazione:

="articolo inserito "&SE(VAL.NON.DISP(CERCA.VERT(CONCATENA($D$3;$E$3;TESTO($F$3;"00"));articoli!$A$2:$B$3500;2;0));"nessun articolo";CERCA.VERT(CONCATENA($D$3;$E$3;TESTO($F$3;"00"));articoli!$A$2:$B$3500;2;0))

ma se trova l'articolo scrive articolo inserito XXXXXX
se non trova non scrive nessun articolo
Dove sbaglio?
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.076
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
26/01/2021 17:16

Credo sia questa che fa quello che chiedi:

=SE(CERCA.VERT(CONCATENA($D$3;$E$3;TESTO($F$3;"00"));articoli!$A$2:$B$3500;2;0)<>"";"articolo inserito "&CERCA.VERT(CONCATENA($D$3;$E$3;TESTO($F$3;"00"));articoli!$A$2:$B$3500;2;0);"nessun articolo")
[Modificato da rollis13 26/01/2021 17:16]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 842
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
26/01/2021 17:55

Grazie rollis,
ecco cosa mi fregava

3500;2;0)<>"";"articolo inserito
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.077
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
26/01/2021 18:19

Non solo, l'avevi messo in testa [ ="articolo inserito " & ] e messo così compare sempre ... più eventuale resto della formula.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 843
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
26/01/2021 20:23

O.k. rollis
[SM=g27811]
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 844
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
28/01/2021 16:13

Ciao ho aggiunto un avviso/msgbox

avviso = MsgBox("Sign. " & Environ("UserName") & Chr(13) & "inserisco articolo < " & _
num3 & " > in pos. < " & num1 & "-" & num2 & " >?", _
vbInformation + vbYesNo + vbDefaultButton2, "AVVISO")
If avviso = vbNo Then
Exit Sub
End If

ma qui non esce 00/01/02 ma 1/2/3 ecc...

Option Explicit




 
Sub Aggiorna_Articoli()
 
    ActiveSheet.Unprotect "123456"
     
    Dim sh1    As Worksheet
    Dim sh2    As Worksheet
    Dim cellaPos                                  '  As Range
    Dim cellaArt
    Dim pos    As String
    Dim articolo As Variant
    Dim quantità As Variant
    Dim num1, num2, num3 As String
    Dim avviso As String
    
    
    num1 = Foglio8.Range("D3").Value 'pos1
    num2 = Foglio8.Range("F3").Value 'pos2
    num3 = Foglio8.Range("D4").Value 'art
    
    
    avviso = MsgBox("Sign. " & Environ("UserName") & Chr(13) & "inserisco articolo < " & _
    num3 & " > in pos. < " & num1 & "-" & num2 & " >?", _
    vbInformation + vbYesNo + vbDefaultButton2, "AVVISO")
    If avviso = vbNo Then
    Exit Sub
    End If
                                  
        
     
    Set sh1 = Sheets("nuovo_articolo")
    Set sh2 = Sheets("articoli")
    With sh1
        pos = .Range("D3") & .Range("E3") & Format(.Range("F3"), "00") 'costruisci il codice pos
        articolo = .Range("D4")
        quantità = .Range("D5")
    End With
    With sh2
        Set cellaPos = .Range("A6:A2604").Find(What:=pos, LookIn:=xlValues, LookAt:=xlWhole) 'cerca il pos
        Set cellaArt = .Range("B6:B2604").Find(What:=articolo, LookIn:=xlValues, LookAt:=xlWhole) 'cerca l'articolo
        If Not cellaArt Is Nothing Then           ' articolo già presente
        
            MsgBox "articolo già presente in foglio articoli in Pos. " & .Cells(cellaArt.row, 1) 'l'articolo già esiste
            
            ActiveSheet.Protect "123456"    '<=AGGIUNTA
            Exit Sub
            
        End If
        If .Cells(cellaPos.row, 2) = "" Then      'se colonna B è vuota ...
            .Cells(cellaPos.row, 2) = articolo    '... inserisci l'articolo
            .Cells(cellaPos.row, 7) = quantità    '... inserisci la quantità
            MsgBox "magazzino aggiornato"         'operazione correttamente completata
        Else
            MsgBox "posizione non libera, trovato articolo " & .Cells(cellaPos.row, 2) 'la colonna B è già impegnata
        End If
    End With
     
    ActiveSheet.Protect "123456"
     
End Sub

____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 845
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
28/01/2021 16:40

Prova e riprova....

num2 = Foglio8.Range("F3").Text 'pos2
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.078
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
28/01/2021 17:40

Corretto, già in precedenza s'era fatto: Format(.Range("F3"), "00")

Ma perché creare 3 nuove variabili, i dati sono in pratica gli stessi poi utilizzati qui con già anche la variabile 'sh1' già definita:
With sh1
    pos = .Range("D3") & .Range("E3") & Format(.Range("F3"), "00") 'costruisci il codice pos
    articolo = .Range("D4")
    quantità = .Range("D5")
End With
Bastava mettere qui sotto l'avviso e sfruttare anche questi dati.
[Modificato da rollis13 28/01/2021 17:41]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 846
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
28/01/2021 17:59

Ciao,
non mi ero accorto.
Grazie rollis
____________________________
versione excel 365 ufficio
versione excel 2007 casa
Post: 1.079
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
ONLINE
28/01/2021 22:55

Analizzando le tue modifiche noto hai saltato il ActiveSheet.Protect "123456" prima dell' Exit Sub nell' If/Then dell' Avviso.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 847
Registrato il: 28/12/2009
Città: CITTADELLA
Età: 62
Utente Senior
excel 2007/365
OFFLINE
14/02/2021 15:49

Ciao,
ho inserito dei filtri in foglio "articolo" e li ho attivati.
Se poi inserisco un nuovo articolo, con filtri attivati, la macro dà errore:

errore run time 91
variabile oggetto o variabile del blocco with non impostata

qui:

If .Cells(cellaPos.row, 2) = "" Then 'se colonna B è vuota ...

____________________________
versione excel 365 ufficio
versione excel 2007 casa
Vota: 15MediaObject5,00334 3
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 2 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Inserire valore si apre il foglio (18 messaggi, agg.: 08/03/2023 18:48)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 23:47. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com