Mettre les cellules d'une ligne dans un tableau

Re,

Vous cliquez sur quel bouton en cas de nouvelle Saisie ?

Sur le bouton noir:

Pour moi au départ, je supprimais la ligne modifiée et en cliquant sur le bouton noir, cela me donnait une nouvelle saisie en cas de modification.

Et dans le cas d'une nouvelle saisie, c'était toujours le bouton noir.

Maintenant, je comprends.

Il faut soit rajouter un nouveau bouton pour enregistrer une modification

ou,

Neutraliser la fonction:

lig = WorksheetFunction.Match(.Range("F38").Value, tb.ListColumns(1).DataBodyRange, 0)

En disant que si la cellule F38 de la feuille FORMULAIRE est 'égale" = à vide on passe à:

tb.DataBodyRange(lig, 2) = .Range("F4").Value

et si:

La cellule F38 de la feuille FORMULAIRE est (diffèrent) <> de vide on passe sur:

lig = WorksheetFunction.Match(.Range("F38").Value, tb.ListColumns(1).DataBodyRange, 0)

tb.DataBodyRange(lig, 2) = .Range("F4").Value

Mais je ne sais pas si c'est possible.

Bonne réception.

Pour moi au départ, je supprimais la ligne modifiée et en cliquant sur le bouton noir, cela me donnait une nouvelle saisie en cas de modification.

Et dans le cas d'une nouvelle saisie, c'était toujours le bouton noir.

Non du tout, oubliez cela.
Faire une nouvelle saisie ce n'est pas une modification de ligne. Pour moi nouvelle saisie = ajouter une ligne. Donc on repart de la feuille Accueil en cliquant sur le bouton Ajouter (là ce sera le bouton rouge et plus le bouton Noir)


Je vous réexplique :
Vous partez toujours de la feuille ACCUEIL
vous cliquez sur le bouton "Modifier une ligne", cela vous demande de choisir le code client
Une fois le code client correct, le code reprend les données de la ligne code client et vous envoie sur la feuille Formulaire
Ensuite vous modifiez les données dans la feuille Formulaire et une fois vos modifications terminées vous cliquez sur le bouton NOIR pour modifiez la ligne dans la feuille ACCUEIL

Une fois fait le code vous renvoie sur la feuille Accueil


Il faut soit rajouter un nouveau bouton pour enregistrer une modification ou Neutraliser la fonction:

Non, vous ne devez pas changez quoi que ce soit avec F38 et d'ailleurs je vous ai dit plusieurs fois que la ligne doit être masquée. Cette ligne est chargée lors du choix du code client dans l'inputbox
il n'y a rien à neutraliser et pas à ajouter un bouton

Je vous ai déjà expliqué ici comment cela fonctionne --> https://forum.excel-pratique.com/s/goto/1163375

OK.

Pas de problème.

Bonjour

En repensant à ce que vous disiez au sujet d'une nouvelle Modification à effectuer:

si vous voulez vous éviter d'aller recliquer sur le bouton "Modifier ligne entreprise" dans la feuille Accueil parce que vous avez plusieurs modifications à faire et éviter donc de repasser par la feuille Accueil, vous pourriez aussi rajouter ceci à la fin du code Sub Modification_ligne_entreprise() juste avant la ligne With Sheets("ACCUEIL") :

Call ACCUEIL_Bouton4_Cliquer

Cette ligne relancera le code initial et vous permettra de modifier à nouveau une ligne sans repasser par la feuille Accueil.

Dites si je dois passer au code suivant qui je suppose est Ajouter Facture

Bonjour Dan,

"Cette ligne relancera le code initial et vous permettra de modifier à nouveau une ligne sans repasser par la feuille Accueil."

Super Génial et les explications qui vont avec.

"Dites si je dois passer au code suivant qui je suppose est Ajouter Facture"

Oui, tout à fait.

J'ai saisi le numéro de l'entreprise pour aller dans le formulaire, je fais la modification nécessaire, la modification reprend bien le numéro de l'entreprise et les modIfications sont bien effectuées.

Que du bonheur.

L'opération suivante est la saisie d'une nouvelle facture entreprise par l'intermédiaire du bouton AJOUTER UNE FACTURE.

Avant d'envoyer ce document, j'ai refait un essai complet.

Je clique sur le bouton jaune, fais modification et clique sur le noir. Reviens la message box.

Il s'avére que lorsque je ressaisis un nouveau numéro, je REPARS directement dans la feuille ACCUEIL sans avoir pu modifier et sans cliquer sur le bouton noir.

En manuel ou ligne par ligne, il n'y a pas de problème, tout s'effectue normalement.

Bonne réception.

PS Je vais être absent une grosse partie de l'après midi. Retour fin d'aprés midi.

Bonne réception.

Re

Rem : essayez d'utiliser l'icone Citation lorsque vous reprenez ce que je vous ai écrt dans un post précédent. C'est facile de comprendre.
J'ai corrigé sur votre post. Les citations apparaissent en grisé comme vous voyez

Si j'ai bien compris le souci : Déplacez l"instruction Call ACCUEIL_Bouton4_Cliquer juste entre le ACTIVATE et le PROTECT
Là ce sera bon je pense.
Lorsque vous n'aurez plus rien à modifier, il suffira de cliquer sur ANNULER dans l'inputbox

Re

Vu pour le grisé.

Je l'ai inseré comme ca.

With Sheets("ACCUEIL")

.Activate

Call ACCUEIL_Bouton4_Cliquer

.Protect

Je saisis le N°, et là, je vais en feuille d'ACCUEIL, je retape le numéro et là, je vais bien en FORMULAIRE.

Je tape deux fois le numéro mais cela ne me pose aucun problème.

C'est très bien.

Merci.

Bonne réception.

Bonjour

Pour que l'on soit bien ne phase sur le processus d'ajout :

- Click sur le bouton Ajout facture en feuille Accueil --> code "Saisir nouveau client"
- On se déplace dans la feuille Formulaire
- On complète les données en feuille Formulaire
- une fois terminé, click sur le bouton Rouge pour ajouter une nouvelle ligne contenant le nouvelles données en feuille Accueil (nom du code sera Ajout_nouvelle_facture)

Votre avis ?

Bonjour Dan,

En m'excusant de répondre aussi tardivement, mais absent aujourd'hui.

(nom du code sera Ajout_nouvelle_facture)

OUI.

Pas de problème.

C'est très bien.

Bonne réception.

Bonne soirée.

Cordialement.

Bonjour

Voici les deux codes à placer pour l'ajout de facture :
1. Bouton Ajouter Facture

Sub SAISIR_UN_NOUVEAU_CLIENT()

With Sheets("Formulaire")
    .Activate
    .Unprotect
    .Range("F38") = WorksheetFunction.Max(Sheets("Accueil").ListObjects("Tabentreprise").ListColumns(1).Range) + 1 'correctif worksheetfunction
    .Shapes("NOIR").OnAction = "" 'code au bouton noir sur feuille formulaire
    .Shapes("ROUGE").OnAction = "Ajout_Nouvelle_facture" 'ajouter action de code sur bouton rouge sur feuille formulaire
End With
End Sub

Le code est à associer au bouton Ajout Facture qui se trouve dans votre feuille Accueil

2. Bouton Rouge dans feuille Formulaire

Sub Ajout_Nouvelle_facture()
Dim tb As ListObject
Dim lig As Integer

Set tb = Sheets("Accueil").ListObjects("Tabentreprise")

With tb
    If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    End If

    With .DataBodyRange
        .Item(lig, 1) = Sheets("FORMULAIRE").Range("F38").Value 'num enr
        .Item(lig, 2) = Sheets("FORMULAIRE").Range("F4").Value 'Date
        .Item(lig, 3) = Sheets("FORMULAIRE").Range("F6").Value 'nom
        .Item(lig, 4) = Sheets("FORMULAIRE").Range("F8").Value 'activite
        .Item(lig, 5) = Sheets("FORMULAIRE").Range("F10").Value 'localisation
        .Item(lig, 6) = Sheets("FORMULAIRE").Range("F12").Value 'Travaux
        .Item(lig, 7) = Sheets("FORMULAIRE").Range("F14").Value 'Previsionnel
        .Item(lig, 8) = Sheets("FORMULAIRE").Range("F16").Value 'Montant HT
        .Item(lig, 11) = Sheets("FORMULAIRE").Range("F18").Value 'commentaire
        .Item(lig, 12) = Sheets("FORMULAIRE").Range("F20").Value 'c
        .Item(lig, 13) = Sheets("FORMULAIRE").Range("F22").Value 'D
        .Item(lig, 14) = Sheets("FORMULAIRE").Range("F24").Value 'E
        .Item(lig, 15) = Sheets("FORMULAIRE").Range("F26").Value 'F
        .Item(lig, 16) = Sheets("FORMULAIRE").Range("F28").Value 'G
        .Item(lig, 17) = Sheets("FORMULAIRE").Range("F30").Value 'H
        .Item(lig, 18) = Sheets("FORMULAIRE").Range("F32").Value 'I
        .Item(lig, 19) = Sheets("FORMULAIRE").Range("F34").Value 'J
        .Item(lig, 20) = Sheets("FORMULAIRE").Range("F36").Value 'K
    End With
End With
With Sheets("ACCUEIL")
    .Activate
    .Protect
End With
End Sub

Ce code ne doit pas être associé à un bouton. C'est le code "Saisir nouveau client" qui attribue le code à exécuter au bouton Rouge

Pour l'instant, j'ai placé les deux codes dans le module SAISIR_NOUVELLE_ENTREPRISE. Correct ou pas ?

Faites un test.

Si ok, dites moi ce que je dois regarder.

NB : De mon coté j'ai vu pas mal de choses à revoir et faire un peu de ménage dans le fichier pour accélérer. A discuter si vous le voulez

Bonjour Dan,

En vous remerciant pour ces deux nouveaux codes.

J'ai inseré le premier dans macro: "SAISIR_UN_NOUVEAU_CLIENT" à ce niveau:

    Sheets("FORMULAIRE").Activate

    'ThisWorkbook.Sheets("FORMULAIRE").Unprotect

    Range("A1").Activate

    Range("F4").Activate

    '**********************************************************************************************

    'NOUVELLE FONCTION DE DAN

    With Sheets("Formulaire")

    .Activate

    .Unprotect

    .Range("F38") = worksheetfuction.Max(Sheets("Accueil").ListObjects("Tabentreprise").ListColumns(1).Range) + 1

    .Shapes("NOIR").OnAction = "" 'code au bouton noir sur feuille formulaire

    .Shapes("ROUGE").OnAction = "Ajout_Nouvelle_facture" 'enlever action de code sur bouton rouge sur feuille formulaire

    End With

    '****************************************************************************************

    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

    End Sub

    Public Function Increment() As Long

    Dim lgCounterMax As Long

Je pense que c'est au bon endroit.................mais j'ai ce message au niveau de:

.Range("F38") = worksheetfuction.Max(Sheets("Accueil").ListObjects("Tabentreprise").ListColumns(1).Range) + 1

Ligne en surbrillance jaune avec message:

Erreur d'exécution '424':

Objet requis

.**************************************************************************************************************************

J'ai crée un bouton avec uniquement votre instruction, et c'est le même message.

Lorsque je vais chercher mon "Tabentreprise", il le sélectionne bien.

$A$3:$W$30

Les feuilles ne sont pas verrouillées.

Il n'y a aucune saisie (dans la colonne F) de la feuille formulaire.

Vous est il possible de me dire ou je

Bonne réception.

Vous utilisez mal les icones dans la barre de menu..

--> </> pour le code
--> "
pour les citations
en utilisant le " pour les code cela met plein d'espace entre les lignes de code.


J'ai inseré le premier dans macro: "SAISIR_UN_NOUVEAU_CLIENT" à ce niveau:

Mais c'est pas bon ce que vous faites là. Vous activez deux fois la feuille Formulaire puis vous allez sur A1 puis sur F4. Pourquoi ?
Si vous voulez allez directement sur F4, dans mon code ajoutez ceci en dessous de ACTIVATE et supprimez les 4 lignes au dessus de **************

.range("F4").select

En dessous, nul besoin d'ajouter la ligne PROTECT. Si vous voulez que la feuille Formulaire soit protégée, enlevez la ligne .UNPROTECT au début du code.


Ligne en surbrillance jaune avec message:
Erreur d'exécution '424

Juste ! désolé
Dans la ligne à souci, c'est WORKSHEETFUNCTION et pas ce que j'ai indiqué où il manque un N à FUNCTION. Donc la ligne comme ceci

.Range("F38") = WorksheetFunction.Max(Sheets("Accueil").ListObjects("Tabentreprise").ListColumns(1).Range) + 1

J'ai corrigé dans mon post précédent

NB : pourquoi vous mettez Public function....

Collez les codes comme je vous les donne et supprimez ceux que vous avez sans quoi vous allez avoir des erreurs sans que l'on comprenne pourquoi. Evitez d'aller arranger ou d'insérer dans un code existant.

Re,

Evitez d'aller arranger ou d'insérer dans un code existant.

Quand j'étais jeune, mon pére me disait: mon fils il faut toujours tout garder.

Cela peut servir un jour. Depuis, je suis un conservateur. Je garde tout.

Je ne vous dit pas l'état de mon garage.

Mais suivant vos conseils, j'ai fait le MÉNAGE dans la macro.

Autrement, j'ai fait plusieurs "ajouter une facture" et tout se déroule bien.

Tout est bien retranscrit dans la feuille accueil.

IMPECCABLE.

Le seul problème est lors d'une nouvelle "ajouter une facture" il y a les données de l'opération précédente qui sont toujours présentes.

La remise à zéro ne s'est pas faite dans la colonne F de la feuille formulaire.

pourquoi vous mettez Public function....

Je l'ai "POMPÉE". Je ne sais pas ce que cela veut dire mais avant d'aller en formulaire, cela m'ajoute une ligne vierge à la dernière ligne du tableau et me met un numéro incrémenté de 1 dans la colonne A.

Si je supprime public function jusqu'au end function, je n'ai plus le numéro dans la colonne A

La formule complète est la suivante:

    Public Function Increment() As Long
    Dim lgCounterMax As Long
    lgCounterMax = Application.WorksheetFunction.Max(Range("Tabentreprise[N°]"))
    Increment = lgCounterMax + 1

    End Function
Sub AddRow(Tablename, Values, Optional Position As Long)
    Dim r As ListRow
    Dim l As ListObject
    Dim i As Long

    Set l = Range(Tablename).ListObject
    If Position = 0 Or Position > l.ListRows.Count Then Position = l.ListRows.Count + 1
    Set r = l.ListRows.Add(Position)
    For i = LBound(Values) To UBound(Values) Step 2
    ActiveSheet.Unprotect
    r.Range(l.ListColumns(Values(i)).Index).Value = Values(i + 1)

    Next
End Sub

NB : De mon coté j'ai vu pas mal de choses à revoir et faire un peu de ménage dans le fichier pour accélérer. A discuter si vous le voulez

Pourquoi pas. Si vous voulez, mais à condition que cela ne vous prenne pas trop de votre temps.

Bonne soirée.

Bonne réception.

Cordialement.

PS Merci pour les explications:

--> </> pour le code
--> "
pour les citations

Je ne connaissais pas les différences.

Le seul problème est lors d'une nouvelle "ajouter une facture" il y a les données de l'opération précédente qui sont toujours présentes.

Dans le code Ajout_Nouvelle_facture,

1. ajoutez cette ligne juste avant le with sheets("Accueil")

Sheets("FORMULAIRE").Range("F4:F38").ClearContents 'remise a zero formulaire

2. Ajoutez aussi cette ligne juste avant le With tb ->

Sheets("Accueil").Unprotect

Si je supprime public function jusqu'au end function, je n'ai plus le numéro dans la colonne A
La formule complète est la suivante:

Non absolument pas. C'est impossible.
Si vous n'avez pas de numéro, c'est que votre tableau structuré ne commence pas en colonne A

Dans la sub ajout Nouvelle Facture, c'est la ligne --> .Item(lig, 1) = Sheets("FORMULAIRE").Range("F38").Value 'num enr qui vous ajoute le numéro en colonne A

Je ne sais pas ce que vous faites mais les deux codes Incrément et addrwow doivent être supprimés.

Dans la feuille Accueil, pensez à associer votre bouton "Ajouter une facture" au code Sub SAISIR_UN_NOUVEAU_CLIENT(), évidemment

Re,

Si vous n'avez pas de numéro, c'est que votre tableau structuré ne commence pas en colonne A

Cela me servait avant que vous ne me fassiez VOS modifications.

Exact. Il commencait à cette époque en colonne B

Je ne sais pas ce que vous faites mais les deux codes Incrément et addrwow doivent être supprimés.

Dans le post précedent, je vous ai dit que j'avais supprimé toutes MES anciennes instructions.

pensez à associer votre bouton "Ajouter une facture" au code Sub SAISIR_UN_NOUVEAU_CLIENT()

C'est fait.

J'ai remis les modifications 1 et 2 de votre post précedent.

C'est TOUT BON.

Exactement ce que je voulais.

Un grand merci.

Le blocage du bouton rouge ou noir en fonction du choix de la feuille accueil.

VOUS M'AVEZ FAIT UN TRUC GÉNIAL.

Bonne réception.

Cordialement.

Bonjour,

Ok. Si vous voulez on peut passer en revue les différents boutons de gauche à droite.

- En premier je regarderais, les boutons flèches que vous avez placés en colonnes A et i et qui concerne le déplacement vers le haut ou vers le bas.
Vous pourriez n'avoir que deux boutons et un seul code par bouton. Là vous en avez 25 !
Que pensez-vous de placer deux boutons dans la ligne 1, comme ceci

Bien entendu les deux boutons feront ce que vous faites avec tous les autres, à savoir monter au descendre par lot de lignes dans la feuille

image

- En deuxième, le bouton "Tout afficher", que doit-il faire ? Je ne sais pas l'utilité de code.

Bonjour Dan,

Que pensez-vous de placer deux boutons dans la ligne 1, comme ceci

Oui, cela me va très bien.

Mon problème est que je ne connais pas la fonction qui me permet de descendre d'environ 27 lignes chaque fois que l'on clique sur le bouton descente.

Et tout cela dans le même code.

- En deuxième, le bouton "Tout afficher", que doit-il faire ? Je ne sais pas l'utilité de code.

J'ai "figé" la feuille.

Si l'on prend par exemple le fait que je veux voir une information dans la colonne T, je vais donc sur la droite avec la flèche qui est en bas du classeur excel.

image2

Lorsque j'ai vu ce que je voulais voir, et si je veux revenir en colonne A1, au lieu de cliquer sur la flèche du bas plusieurs fois pour revenir à gauche, je clique directement sur le bouton:

TOUT AFFICHER et je retourne directement sur la gauche.

J'ai mis 2 boutons AFFICHER. Le deuxième est tout à droite (lorsque l'on est au environ de la colonne T). A la limite, il ne me sert pas puisque j'ai toujours celui qui est en colonne A1 et qui lui, est toujours visible.

Bonne réception.

J'essaie d'alléger votre fichier donc pensez à ne pas conserver tout ce qui ne sert plus. Eventuellement faites un fichier archive

Voici pour les deux boutons flèches tels que montré dans ma vue de mon post précédent.

- Sur votre feuille Accueil :
1. Supprimez toutes les flèches en colonne A et I
2. Mettez les deux flèches en ligne 1 via le menu Insertion -> Formes

- Supprimez tous les codes dans les modules Remonter et Descendre
- Supprimez aussi un des deux modules. 1 seul suffit et il est préférable d'y rassembler tous les codes de déplacement.
- Renommez le module restant --> "Monter_descendre" (c'est un exemple) ou "Deplacement"
- Dans ce module ainsi renommé, ajoutez les deux codes ci-dessous

Option Explicit
Sub monter()
Dim nblignes As Integer

With ActiveWindow
    nblignes = .VisibleRange.Rows.Count
    If .ScrollRow - nblignes < 0 Then
        .ScrollRow = 4
    Else: .ScrollRow = .ScrollRow - nblignes
    End If
End With
End Sub

Sub descendre()
Dim nblignes As Integer
With ActiveWindow
    nblignes = .VisibleRange.Rows.Count
    .ScrollRow = .ScrollRow + nblignes - 1
End With

- Associez chaque code au bouton adéquat

Faites un test


J'ai mis 2 boutons AFFICHER. Le deuxième est tout à droite (lorsque l'on est au environ de la colonne T). A la limite, il ne me sert pas puisque j'ai toujours celui qui est en colonne A1 et qui lui, est toujours visible.

Ok.
- supprimez le bouton de droite
- Dans le module des deux autres boutons, ajoutez ce code pour "Tout Afficher"

Sub TOUT_AFFICHER()
Dim nbcolumns As Integer

With ActiveWindow
    nbcolumns = .VisibleRange.Columns.Count
     If .ScrollColumn - nbcolumns <= 0 Then
        .ScrollColumn = 1
    Else: .ScrollColumn = .ScrollColumn - nbcolumns
    End If
End With
If ActiveSheet.Protect = False Then ActiveSheet.Protect
End Sub

- Associez le code au bouton "Tout Afficher" de gauche

NB : je ne vois pas l'utilité de protéger la feuille dans ce code mais j'ai tout de même laissé l'instruction

Donnez-moi le nom que vous avez mis au module afin que j'actualise le fichier de travail

Re,

J'essaie d'alléger votre fichier donc pensez à ne pas conserver tout ce qui ne sert plus

Ok. Je le fais maintenant systématiquement.

Votre fonction "descendre" comporte 5 lignes.

Et en plus, elle est valable à l'infini pour toute la feuille de calcul.

Huuummmmm et bien moi je dis: CHAPEAU BAS.

J'en suis en EMMERVEILLEMENT.

Donnez-moi le nom que vous avez mis au module afin que j'actualise le fichier de travail

"Deplacement"

Pour la fonction Sub TOUT_AFFICHER()

Après avoir inseré votre code, j'ai pris la molette de la souris et je suis descendu. En cliquant sur tout afficher, rien ne se passé. C'est par la suite, en relisant votre code que j'ai compris que si je clique 5 fois à droite, il fallait cliquer 5 fois sur tout afficher pour revenir au point de départ et cliquer sur la flèche "remonter" pour retrouver la ligne 4.

L'avantage de votre code est que l'on repasse sur toutes les données en long et en large.

C'est pas plus mal.

Les deux codes fonctionnent PARFAITEMENT.

Bonne réception.

en relisant votre code que j'ai compris que si je clique 5 fois à droite, il fallait cliquer 5 fois sur tout afficher pour revenir au point de départ et cliquer sur la flèche "remonter" pour retrouver la ligne 4.

Tout afficher --> Oui et non, ce n'est pas le fait de cliquer 5x à droite mais ce que vous avez à l'écran comme nombre de colonnes.
Exemple: si vous ne voyez plus la colonne W (donc vous voyez X mais cette colonne ne sert pas puisqu'il n'y a rien comme données). Vous cliquez deux fois sur Tout afficher et votre tableau est complet.
Maintenant si vous vouliez afficher tout le tableau sans devoir cliquer plusieurs fois, le code sera encore plus court car dans ce cas il n'y a besoin que d'une seul ligne.

Pour les lignes, oui vous cliquez plusieurs fois pour remonter ou descendre. Mais là cela a du sens si vous voulez vérifier les données à certains endroit.

Maintenant si le bouton Tout afficher supposait d'afficher le tableau entier avec la ligne 4, cela peut se faire. Dites-moi si intérêt

Quel nom de module avez-vous donné pour les trois codes ?

Rechercher des sujets similaires à "mettre ligne tableau"