Enregistrement de données sur un tableau

Bonjour, voici un petit fichier que je vais construire par la suite.

Il s'agit d'un inventaire assez simple avec un bouton sauvegarder. J'ai réaliser un petit programme qui dit que tout ce qu'il y a des cellules 2 à 150 dans la colonne E sera enregistrer dans la colonne D puis la colonne E est effacer. J'aimerais avoir de l'aide sur deux choses, histoire que tout soit propre :

1. J'aimerais ne pas avoir à sélectionner le nbr de cellule et qu'il le prenne directement sur le tableaux vu qu'il s'agrandira avec le temps.

2. J'aimerais faire en sorte que si je n'ai pas tout les champs de la colonne E remplis, que je ne puisse pas sauvegarder et que l'on me dise où j'ai fait des oublis.

Je m'en retourne vers vous car je ne connais pas assez le VBA pour pouvoir faire cela seul. En espérant avoir une aide de votre pars.

Dans tout les cas, merci d'avance à ceux qui liront cette demande et y répondront.

Voici mon fichier :

Et le petit bout de code que j'ai fait :

Sub Save()

          Range("E2:E150").Copy Feuil1.Range("D2:D150")
          Range("E2:E150") = Empty

End Sub

Bonjour, Oops édit en fait il faut 2 boucles une pour vérifier si cellule de la colonne E vide.

Sub Save()
'Sauvegarde de E vers D si cellule E non vide
Dim derligne As Long
derligne = Range("D65536").End(xlUp).Row

For i = 2 To derligne
If Range("E" & i).Value = "" Then
MsgBox "Vous n'avez pas renseigné la ligne" & i
Exit Sub
End If
Next i

For J = 2 To derligne
Range("D" & J).Value = Range("E" & J).Value
Range("E" & J).Value = ""
Next J

End Sub

Bonjour le fil, bonjour le forum,

Une autre proposition :

Sub Save()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)
Dim PL As Range 'déclare la variable PL (PLage)

Set O = Worksheets("Feuil1") 'définit l'onglet O
Set TS = O.ListObjects(1) 'définit le tableau structuré TS
Set PL = TS.DataBodyRange 'définit la plage PL
With PL.Columns(5) 'prend en compte la colonne 5 de la plage PL
    .Copy PL(1, 4) 'copie dans la cellule ligne 1 colonne 4 de PL
    .ClearContents 'efface les données de la colonne 5
End With 'fin de la prise en compte de la colonne 5 de la plage PL
End Sub

Ooops ! Désolé, ne prend pas en compte ta seconde requête...

Merci, cependant le code, fait quand même le remplacement des cellules sauf celle manquante, n'y a t'il pas moyen de faire en sorte que le bouton soit verrouiller jusqu'à ce qu'il est toute les cellule de la colonne E de renseigner ? car comme des collègues pourrait travailler dessus, j'essaie de minimiser le risque d'erreur. Mais sinon c'est pile poil ce que je voulais merci.

Sinon, je ne vous répondrais que demain, ayant finis ma journée, bonne soirée à vous et curieux de voir votre réponse

J'ai corrigé mon code désolé .

La macro s'arrête tant que toutes les cases de la colonne E ne sont pas renseignées.

Re,

Mitou :

Sub Save()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)
Dim PL As Range 'déclare la variable PL (PLage)

Set O = Worksheets("Feuil1") 'définit l'onglet O
Set TS = O.ListObjects(1) 'définit le tableau structuré TS
Set PL = TS.DataBodyRange 'définit la plage PL
If Application.WorksheetFunction.CountBlank(PL.Columns(5)) > 0 Then 'si il y a une ou plusieurs cellules vides
    MsgBox "Vous devez remplir toutes les lignes !" 'message
    Exit Sub 'sort de la procédure
End If 'fin de la condition
With PL.Columns(5) 'prend en compte la colonne 5 de la plage PL
    .Copy PL(1, 4) 'copie dans la cellule ligne 1 colonne 4 de PL
    .ClearContents 'efface les données
End With 'fin de la prise en compte de la colonne 5 de la plage PL
End Sub

Salut,

Si l'on travaille avec des tableaux structurés alors utilisons les fonctionnalités de ses dis tableaux donc j'ai pas testé mais je suis pour la solution de ThauThème, je rajouterais juste le nommage With PL.Columns("Qte Actuelle (kg)2") est plus parlant que With PL.Columns(5) et que Set TS = Range("Tableau1").listObject est aussi plus parlant que Set TS = O.ListObjects(1). Mais comme d'habitude se sont mes réflexions...

Bonjour,

Je viens de voir vos messages et vos codes, merci beaucoup c'est ce qu'il me fallait. En plus le fait qu'il indique les lignes ou il n'y a pas de valeur est arrangeant pour éviter les fautes et c'est super merci encore à vous

Rechercher des sujets similaires à "enregistrement donnees tableau"