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_CliquerCette 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 SubLe 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 SubCe 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 LongJe 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) + 1Ligne 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").selectEn 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) + 1J'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 SubNB : 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 formulaire2. Ajoutez aussi cette ligne juste avant le With tb ->
Sheets("Accueil").UnprotectSi 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
- 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.
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 ?