Bonsoir le fil, bonsoir le forum,
Je n'ai pas remplacé tes tableaux par des tableaux structurés comme 'la fait Chris mais je plussoie complètement sa remarque.
Comme j'y ai travaillé dessus, je me permet d'envoyer ma proposition.
J'ai déplacé le code du bouton Envoie base dans un module (Module1) car il n'avait rien à faire dans le composant Thisworkbook.
Sub trans()
Dim OF As Worksheet 'déclare la variable OF (Onglet Formulaire)
Dim OB As Worksheet 'déclare la variable OB (Onglet Base de données)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim I As Byte 'déclare la variable I (Incrément)
Set OF = Worksheets("Formulaire") 'définit l'onglet OF
Set OB = Worksheets("Base de données") 'définit l'onglet OB
DL = OB.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet OB
Set PL = OF.Range("B5:B22") 'définit la plage PL
For Each CEL In PL 'boucle sur toutes les cellule CEL de la plage PL
I = I + 1 'incrémente I
OB.Cells(DL + 1, I).Value = CEL.Value 'récupère la valeur de la cellule CEL dans la cellule ligne DL + 1, colonne I de l'onglet OB
Next CEL 'prochaine cellue de la boucle
PL.SpecialCells(xlCellTypeConstants).ClearContents 'efface les valeurs constantes de la plage PL (pas les formules)
DL = DL + 1 'redéfinit la variable DL
OF.Range("B5").Value = Application.WorksheetFunction.Max(OB.Range("A3:A" & DL)) + 1 'renvioe dans B5 de l'onglet OF la valeur max de la colonne A plus une
OF.Range("B7").Select 'sélectionne la cellule B7 de l'onglet OF
End Sub
Cependant, dans ce composant j'ai écrit ce petit bout de code pour que le numéro de facture soit toujours incrémenté :
Private Sub Workbook_Open() 'à l'ouverture du classeur
Dim OF As Worksheet 'déclare la variable OF (Onglet Formulaire)
Dim OB As Worksheet 'déclare la variable OB (Onglet Base de données)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Set OF = Worksheets("Formulaire") 'définit l'onglet OF
Set OB = Worksheets("Base de données") 'définit l'onglet OB
DL = OB.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet OB
OF.Range("B5").Value = Application.WorksheetFunction.Max(OB.Range("A3:A" & DL)) + 1 'renvioe dans B5 de l'onglet OF la valeur max de la colonne A plus une
OF.Activate 'active l'onglet Formulaire
End Sub