So how do I go from one navigation to another without loosing all the data I wrote (in case I forgot to click save at the first form)?
I have a lot of logic in the save button and I can't ducplicated it
Therein lies the problem.
NO validation code belongs in the Save button. MOVE the validation code to the Form's BeforeUpdate event. Access will then automatically run the validation code when the form closes or moves focus to a different record. The save button should simply save the record. Once you tell Access to save the record OR Access decides all by itself that the record needs to be saved, Access runs the Form's BeforeUpdate event. That is where all you validation code belongs AND you need to use the Cancel = True whenever there is an error and you want to prevent Access from saving the record.
You are going to have to modify your code to get it to work well on a navigation form. For example, one of the problems will be that you will have to prevent the navigation from happening if an error is discovered in an automatic save.
You don't need to duplicate the code and in fact, that is a pretty poor idea. There are ways to get around this though. As someone mentioned, you can move the validation code to a standard module. To activate the code, you add a call to the procedure in the form's BeforeUpdate event and you can pass in a reference to the current form. As long as all the controls have the same name, this will work. HOWEVER, using this method, you cannot use Cancel = True to stop the save because that only works in the class module of a form. So, that would mean additional code changes.
It looks like your form is NOT an actual navigation form. We need to clear this up because it affects your solution. If each tab has a separate form on it and the forms are always loaded, you don't have the same problem you have with an actual Access navigation form and so the solution is different.
If this is a normal form with a tab control on it, you can add code that runs with the tab gets clicked. That code should just tell the other form to save the record. The code would look at the properties of the other form to determine if it is dirty. If it is dirty, then save. BUT - move all your validation code to the form's BeforUpdate event where it belongs so you can fix this the right way ONCE.