Mettre les cellules d'une ligne dans un tableau

Re,

Faites un test.

IMPECCABLE.

Après on peut passer au bouton Classement

Par ce bouton, je recherche à faire un classement croissant par DATE. (colonne B).

Et en colonne A, à avoir les numéros qui sont classés de facon croissante.

Lors de (par exemple) la suppression d'une ligne, ce numéro a donc disparu donc je refais le classement sans avoir fait de saisie (pour avoir le classement des chiffres en colonne A).

Par ce bouton, je fais (A L'HEURE ACTUELLE) un classement croissant par DATE. (colonne B)

Lors de la réalisation de mon code, j'ai rencontré le problème suivant à savoir:

Etant donné que j'utilise la fonction:

    ThisWorkbook.Sheets("ACCUEIL").Range("W4:W5").AutoFill Destination:=Range("Tabentreprise[X]"), Type:= _
        xlFillDefault

Si je n'ai pas trois lignes de remplies, j'avais un message erreur sur cette fonction. Elle ne pouvait pas faire autofill.

Pour y remédier j'ai touvé cette "BIDOUILLE":

    If Range("B4") = "" Then Range("B4") = "a"
    If Range("B5") = "" Then Range("B5") = "a"
    If Range("B6") = "" Then Range("B6") = "a"

A partir de là, j'avais en colonne W mes trois chiffres.

De la je copiais le tableau tabentreprise et le collais en COPY_CREATION_NOM.

C'est sur cette feuille que se faisait le tri. La sélection du tri se faisait jusqu'au dernier numéro de la colonne W.

S'il y avait des lignes sans numéro en colonne W, celles ci n'étaient pas prises.

Une fois classé, je le ramenais en feuille ACCUEIL.

Un classement se faisait sur des lettres en majuscules, donc les 3 petits "a" était supprimé.

Et je refaisais un classement des numéros.

Mais pour les 3 premières lignes en fonction des noms, j'étais plus tôt dans le désordre. Ce n'était pas le tiercé gagnant.

Pour avoir le tiercé gagnant, il fallait recliquer une seconde fois sur classement.

J'étais dans l'ordre quand il y avait plus de trois noms ou lignes, donc je n'ai pas trop focaliser la dessus.

Voilà en gros.

Bonne réception.

PS:

En ce moment, j'hésite à faire un classement par NOM (colonne C)

.DataBodyRange(lig, 3) & " - Num enregistrement " & code, vbYesNo + vbDefaultButton2 + vbCritical,

Dans votre formule précedente, vous sélectionner le nom par l'intemédiaire de (lig.3). Si c'est la même méthode ici cela sera (lig.2) pour la date.

Je me dis que par la suite, si je veux changer et ne plus trier sur date mais sur nom, je n'aurais juste qu'à changer 2 par 3.

Ou là là, je ne comprends rien du tout à ce que vous faites pour réaliser un tri et ce via une autre feuille

Par ce bouton, je recherche à faire un classement croissant par DATE. (colonne B).
Et en colonne A, à avoir les numéros qui sont classés de facon croissante.

Si un numéro disparait, il suffit de relancer le tri après suppression. Mais à priori je ne vois pas pourquoi faire un tri à ce moment là puisqu'il suffirait de recliquer sur le bouton Classement.
Donc là oubliez la feuille COPY_CREATION_NOM. Elle sera à supprimer
Idem pour cette colonne W que je vous avais écrit de supprimer précédemment.

Est-ce que le résultat attendu est d'avoir un tri de la feuille Accueil par date croissante et par N° Enr croissant. Vous confirmez ?

Re,

il suffirait de recliquer sur le bouton Classement.

OUI c'est ce que je fais.

Est-ce que le résultat attendu est d'avoir un tri de la feuille Accueil par date croissante et par N° Enr croissant. Vous confirmez ?

OUI.

Bonne réception.

Bonjour

Voici pour le classement
- Supprimez la feuille COPY CREATION NOM que vous utilisiez avant pour le classement
- Allez dans le module Classementnomclient et remplacez tout le code par celui ci-dessous

Sub Trier()

With ThisWorkbook.Worksheets("ACCUEIL").ListObjects("Tabentreprise")
    .Sort.SortFields.Clear
    .Sort.SortFields.Add2 Key:=Range("Tabentreprise[Date]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    .Sort.SortFields.Add2 Key:=Range("Tabentreprise[N° Enr]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With .Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With
End Sub

NB : attention que le titre en A3 doit être "N° Enr".
Si vous mettez autre chose il faut changer le nom dans le code pour qu'il corresponde à la cellule A3

Faites un test

Si ok on peut passer aux 2 derniers boutons qui concernent les segments et la recap.

Bonjour Dan,

Le classement s'effectue bien.

PARFAIT.

En revanche les numéros de la colonne A ne sont pas classés par ordre croissant.

Je sais que vous m'aviez dit qu'il fallait commencer par le N° 1 et non par le 4.

Je sais que l'ordre croissant ne change rien puisqu'en cas de modification, l'on prend le numéro de l'entreprise en colonne A.

En définitif je ne sais plus s'il faut laisser comme ça ou classer par ordre.

Concenant le module:

SAISIR_NOUVELLE_ENTREPRISE

code:

Sub Ajout_Nouvelle_facture()

Je viens de m'apercevoir:

1) Serait t il possible d'avoir la différence entre le prévisionnel et le montant H.T.en colonne J.

2) Serait t il possible d'avoir le + ou le moins en colonne I.

3) Serait t il possible d'avoir les cellules des colonnes K à T en MAJUSCULE.

4) Serait t il possible d'avoir de mentionner TOTAL GÉNÉRAL EN COLONNE V. Cela me sert pour les boutons:

VOIR RÉCAPITULATIF POUR ENTREPRISE et VOIR RÉCAPITULATIF GLOBAL ENTREPRISE.

Si ok on peut passer aux 2 derniers boutons qui concernent les segments et la recap.

Mais comme ces deux boutons n'ont pas été vus, peut être que je n'aurais pas besoin du point 4.

Bonne réception.

En revanche les numéros de la colonne A ne sont pas classés par ordre croissant.
Je sais que l'ordre croissant ne change rien puisqu'en cas de modification, l'on prend le numéro de l'entreprise en colonne A.
En définitif je ne sais plus s'il faut laisser comme ça ou classer par ordre.

Effectivement.
Je pense que le mieux serait de classer par nom client et par num croissant. LA date importe peu puisqu'à chaque date (qui sera croissante) le num enr sera croissant.


Je sais que vous m'aviez dit qu'il fallait commencer par le N° 1 et non par le 4.

Oui je suppose que vous avez changé cela. De toute façon si vous supprimez les lignes comportant les Num enr 1, 2 et 3, on commencera à 4.....


1) Serait t il possible d'avoir la différence entre le prévisionnel et le montant H.T.en colonne J.

Heu... je vous ai dit quoi faire ici --> https://forum.excel-pratique.com/s/goto/1163428


2) Serait t il possible d'avoir le + ou le moins en colonne I.

Oui cette colonne est bizarre mais bon si vous la voulez....
La règle c'est un + lorsque le nombre est négatif en colonne j ?


3) Serait t il possible d'avoir les cellules des colonnes K à T en MAJUSCULE.

Oui allez dans le code "Sub Ajout_Nouvelle_facture()" et pour toutes les références C à K mentionnées en commentaire dans le code, ajoutez l'instruction UCASE.
Je vous donne pour la ligne c

.Item(lig, 12) = UCase(Sheets("FORMULAIRE").Range("F20").Value) 'c

4) Serait t il possible d'avoir de mentionner TOTAL GÉNÉRAL EN COLONNE V.

Oui faites ceci :
- Sélectionnez V4 à Vx (x étant la dernière ligne de votre tableau - la ligne 28 dans votre fichier que j'ai reçu)
- Effacez tout
- Sélectionnez uniquement la cellule V4
- ajoutez cette formule --> ="TOTAL GÉNÉRAL" et cliquez sur la touche ENTER de votre clavier et enregistrez votre fichier

Dites-moi si ok avant de passer sur d'autres points


Re,

Je pense que le mieux serait de classer par nom client et par num croissant.

OK, pas de problème.

Heu... je vous ai dit quoi faire ici --> https://forum.excel-pratique.com/s/goto/1163428

Hummmmm.. J'ai "merdé". En m'excusant.

C'est fait et c'est OK.

La règle c'est un + lorsque le nombre est négatif en colonne j

NON. Lorsque le nombre est négatif c'est un moins.

Mon raisonnement est le suivant:

Si ma facture (donc le montant H.T.) dépasse le prévisionnel (il y a donc + à débourser).

Si le montant H.T. est inférieur au prévisionnel (il y a donc - à débourser).

.Item(lig, 12) = UCase(Sheets("FORMULAIRE").Range("F20").Value) 'c

OK. C'est fait. IMPECCABLE.

- ajoutez cette formule --> ="TOTAL GÉNÉRAL" et cliquez sur la touche ENTER de votre clavier et enregistrez votre fichier

OK. C'est fait. IMPECCABLE.

Voilà pour votre dernier post.

Entre-deux je me suis apercu que dans la feuille FORMULAIRE, les boutons de droite (electricien, plombier, carreleur etc) "bougeaient".

En faisant le code pas à pas

Module

SAISIR_NOUVELLE_ENTREPRISE

code:

Sub Ajout_Nouvelle_facture()

en passant sur:

    Else: .ListRows.Add:

on allait dans la FEUILLE 7 ACCUEIL

Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, [B2:W2000]) Is Nothing Then
    ActiveSheet.Unprotect '"Votre MDP" 'Précisez votre MDP à la place de Votre MDP, laissez les guillemets
    ActiveSheet.Columns("B:W").AutoFit

Et comme l'on est sur la feuille FORMULAIRE, il fait un autofit sur les colonnes B:W de la feuille formulaire alors que cela devrait être la feuille ACCUEIL.

J'ai mis un sheet("ACCUEIL").activate, entre private et if not mais il n'a pas aimé..

Bonne réception.

Bonjour

Mon raisonnement est le suivant:
Si ma facture (donc le montant H.T.) dépasse le prévisionnel (il y a donc + à débourser).
Si le montant H.T. est inférieur au prévisionnel (il y a donc - à débourser).

Ok. C'est moi qui me suis trompé sur le fichier alors que je vous avais donné la bonne info dans un post précédent

Pour la question du + et - :
- Supprimez tous les données depuis i4 à ix (x étant la dernière ligne de votre tableau)
- en i4 mettez cette formule --> =SI(J4>0;"+";"-") puis confirmer par la touche ENTER


Entre-deux je me suis apercu que dans la feuille FORMULAIRE, les boutons de droite (electricien, plombier, carreleur etc) "bougeaient".

Hum... je vous ai écrit à ce sujet... -> https://forum.excel-pratique.com/s/goto/1165484 --> Voir à la ligne NB


J'ai mis un sheet("ACCUEIL").activate, entre private et if not mais il n'a pas aimé

Surtout pas !

Re

Hum... je vous ai écrit à ce sujet... -> https://forum.excel-pratique.com/s/goto/1165484 --> Voir à la ligne NB

Normalement, j'ai tout fait.

En revanche j'ai oublié de préciser, que ce problème survenait en cliquant sur le bouton rouge d'ou mon explication du dessus pas à pas.

Bonne réception.

En revanche j'ai oublié de préciser, que ce problème survenait en cliquant sur le bouton rouge d'ou mon explication du dessus pas à pas.

Oui exact. C'est dû au code qui complète la feuille Accueil depuis la formulaire
Faites ceci :

- Allez dans la feuille ACCUEIL
- supprimez tout et placez ce code :

Option Explicit
Private Sub Worksheet_Activate()
ListObjects(1).Range.Columns.AutoFit
End Sub

NB: la colonne W est considérée comme supprimée

Faites un test avant de passer à autre chose

Re,

- supprimez tout et placez ce code :

IMPECCABLE.

NB: la colonne W est considérée comme supprimée

C'était fait.

********

Dans,

Sub Ajout_Nouvelle_facture()

j'ai rajouté:

    Sheets("FORMULAIRE").Unprotect

entre

        .Item(lig, 20) = UCase(Sheets("FORMULAIRE").Range("F36").Value) 'K
    End With
End With

    'ici         Sheets("FORMULAIRE").Unprotect

    Sheets("FORMULAIRE").Range("F4:F38").ClearContents        

'car bloqué sur cette ligne en jaune

*********

Lorsque je clique sur le bouton (qui n'a pas été vu) RETOUR VERS ACCUEIL dans la feuille FORMULAIRE, depuis que la feuille ACCUEIL a été modifiée depuis votre dernier post j'ai rajouté unproctect car feuille ACCUEIL protégée donc bloqué en jaune:

Option Explicit
Private Sub Worksheet_Activate()
'ici Sheets("ACCUEIL").Unprotect
ListObjects(1).Range.Columns.AutoFit
End Sub

Maintenant OK.

**********

Dans le module

SAISIR_NOUVELLE_ENTREPRISE

Dans le code:

Sub SAISIR_UN_NOUVEAU_CLIENT()

J'ai rajouté pour venir me positionner directement en F4

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

    'ici j'ai ajouté 
Sheets("FORMULAIRE").Range("F4").Activate

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

End Sub

**********

Je suis sur la feuille FORMULAIRE.

Si je clique sur le bouton rouge ENREGISTRER NOUVELLE SAISIE et que toutes les CELLULES SOIENT VIDES, cela me valide quand même l'opération en me mettant une ligne vide dans le tableau de la feuille ACCUEIL.

Est il possible de faire un test en cas de cellule vide, comme j'avais fait dans mon fichier, sur les cellules F4 à F12 (exemple de ce que j'avais fait) en cas de VIDE:

    If Range("F4") = "" Then
    Ouinon = MsgBox("REMPLIR LA DATE.", vbCritical)
    Range("F4").Activate
    Exit Sub
    End If

    If Range("F6") = "" Then
    Ouinon = MsgBox("REMPLIR LE NOM.", vbCritical)
    Range("F6").Activate
    Exit Sub
    End If

Concernant les cellules F14 et F16 en cas de VIDE:

    ElseIf Range("F14") = "" Then
    Ouinon = MsgBox("    LE PRÉVISIONNEL N'EST PAS REMPLI." & _
    "" & Chr(10) & _
    "" & Chr(10) & _
    "                      EST CE NORMAL ?", vbYesNo)
    If Ouinon = vbNo Then
    Range("F14").Activate
    Exit Sub
    End If

    If Range("F14") = "" Then
    Range("F14") = 0
    End If: End If:

Concernant les cellules F14 et F16 en cas de LETTRE à la place de CHIFFRE: (cellule G4 = cellule de test)

    'SI LETTRE DANS PRÉVISIONNEL.
    If Range("G14") = 1 Then
    Ouinon = MsgBox("      METTRE DES CHIFFRES" & _
    "" & Chr(10) & _
    "" & Chr(10) & _
    "     DANS LE PRÉVISIONNEL" & _
    "" & Chr(10) & _
    "" & Chr(10) & _
    "       ET NON DES LETTRES !", vbCritical)

    Range("F14").Activate

    Exit Sub

**********

Est il possible de supprimer les lignes vides crées par inadvertance dans le tabentreprise de la feuille d'ACCUEIL.

Bonne réception

Sub Ajout_Nouvelle_facture()

j'ai rajouté:

Non cela ne sert à rien de faire cela.
Dans le code que je vous ai donné ici https://forum.excel-pratique.com/s/goto/1164330 il n'y a pas de clearcontents et il ne faut pas en mettre là.
Pourquoi faites-vous cela ?


Lorsque je clique sur le bouton (qui n'a pas été vu) RETOUR VERS ACCUEIL dans la feuille FORMULAIRE, depuis que la feuille ACCUEIL a été modifiée depuis votre dernier post j'ai rajouté unproctect car feuille ACCUEIL protégée donc bloqué en jaune:

Non, il faut aller dans le code Sub Ajout_Nouvelle_facture(), et à la fin enlever la ligne .PROTECT et modifier le code ci-dessous

Option Explicit
Private Sub Worksheet_Activate()
UnProtect
ListObjects(1).Range.Columns.AutoFit
Protect
End Sub

Il faudra revoir le bouton. Cela fait partie des points suivants. Du coup le code risque de changer


J'ai rajouté pour venir me positionner directement en F4

Non. Il faut rajouter juste ceci avant le END WITH dans le code "Saisir Nouveau client"

.Range("F4").Select

Si je clique sur le bouton rouge ENREGISTRER NOUVELLE SAISIE et que toutes les CELLULES SOIENT VIDES, cela me valide quand même l'opération en me mettant une ligne vide dans le tableau de la feuille ACCUEIL.

Ok. Est-ce que toutes les cellules de la feuille Formulaire doivent toujours être remplies ?
Si ce n'est qu'entre F4 et F16, on peut faire plus simple
On vérifie que les cellules sont vides et si une cellule est vide, on le spécifie en prenant le nom du libellé en colonne D


Evitez de modifier sur des propositions que je vous ai faites sans quoi on risque de tourner en rond dans votre projet
Dites moi ce qui ne va pas avant. De cette manière je peux regarder les soucis et corriger

Re,

Dans le code que je vous ai donné ici https://forum.excel-pratique.com/s/goto/1164330 il n'y a pas de clearcontents et il ne faut pas en mettre là.

Si, il y a eu un rajout.

https://forum.excel-pratique.com/s/goto/1164506

Pourquoi faites-vous cela ?

Oui vous avez raison. Erreur de ma part.

Non, il faut aller dans le code Sub Ajout_Nouvelle_facture(), et à la fin enlever la ligne .PROTECT et modifier le code ci-dessous

OK. Fait.

Non. Il faut rajouter juste ceci avant le END WITH dans le code "Saisir Nouveau client"

OK. Fait.

Si ce n'est qu'entre F4 et F16, on peut faire plus simple

OUI, cela concerne principalement F4 à F16.

Evitez de modifier sur des propositions que je vous ai faites

OK.

Bonne réception et bonne fin de soirée.

Cordialement.

Bonjour Dan,

Lorsque je clique sur ajouter une facture, je vais en F4 feuille formulaire.

Il s'avére que par l'auto fit, en n'ayant aucune donné de rentrer dans la colonne F, celle-ci est étroite.

Pas de problème, je rentre la date et la colonne passe en largeur à 9,14.

Mon soucis vient du fait qu'en ce positionnant en F6, je ne vois pas tous les NOMS des entrepreneurs.

Y a t-il une solution pour élargir à ce niveau là, la largeur de la liste déroulante.

Ceci peut être valable pour les cellules F8 à F12.

Et une autre question,

La liste déroulante contient huit lignes en hauteur.

Est il possible de la rallonger à 15 20 ou plus (en nombre de lignes).

Cela éviterait de "prendre l'ascenseur".

Bonne réception.

Bonjour,

je réponds à vos deux derniers posts :

Si, il y a eu un rajout. --> https://forum.excel-pratique.com/s/goto/1164506

- Désolé pour l'ajout concernant ce post. J'avais zappé en vérifiant avant de vous répondre

La liste déroulante contient huit lignes en hauteur.
Est il possible de la rallonger à 15 20 ou plus (en nombre de lignes).

- Non car la liste de validation fige le nombre de lignes visibles à 8.


Voici les modifications à effectuer

1. Module SAISIR_NOUVELLE_ENTREPRISE
Pour faire plus simple, remplacez les 2 codes par ceux dans le fichier joint.

Explications :
a.
Au click sur le bouton "Ajout une facture" sur la feuille ACCUEIL
-- Les données dans la colonne F dans la feuille formulaire seront effacées.
-- La largeur de la colonne F dans la feuille Formulaire sera de 20. Dans votre cas, c'est en effet plus simple de prévoir une largeur fixe plutôt que
de jouer avec des largeurs qui s'adaptent automatiquement via l'instruction Autofit.

b.
Lorsque vous cliquerez sur le bouton Rouge, le code vérifiera si toutes les cellules entre F4 et F16 sont complétées.
Si tel n'est pas le cas un message vous sera envoyé en précisant la référence de la cellule et la rubrique à compléter.

2. Feuille Formulaire

-
clic droite sur l'onglet Formulaire, choisir l'option "visualiser le code" et là supprimez tous les codes !

NB : dommage pour cette colonne C vide dans la feuille Formulaire qui, en fait, ne sert à rien. On aurait pu la supprimer au début des modifications.

Vérifiez si tout fonctionne avant de passer à autre chose.

Bonjour Dan,

IMPECCABLE.

J'ai juste rajouter un

.protect dans le code:

Sub SAISIR_UN_NOUVEAU_CLIENT()
    .Shapes("ROUGE").OnAction = "Ajout_Nouvelle_facture" 'enlever action de code sur bouton rouge sur feuille formulaire
    .Range("F4").Select
    'ici    .Protect
End With

2. Feuille Formulaire

- clic droite sur l'onglet Formulaire, choisir l'option "visualiser le code" et là supprimez tous les codes !

OK fait.

Bonne réception.

Ps:

Dans le code joint, si une cellule n'est pas remplie il est bien précisé la cellule à remplir.

Est il possible de venir se positionner sur cette cellule en plus de ce commentaire.

re,

1. Ok pour l'ajout du ".protect" dans le code Saisir nouveau client

2. PS

Dans le code joint, si une cellule n'est pas remplie il est bien précisé la cellule à remplir.
Est il possible de venir se positionner sur cette cellule en plus de ce commentaire.

Oui absolument.
Dans la boucle For i= 4 to 16.... du code Sub Ajout_Nouvelle_facture(), mettez l'instruction ci-dessous entre la ligne Msgbox ..... et la ligne Exit Sub

.Cells(i, "F").Select

Oubliez pas le point devant cells.

Re,

OK, c'est tout bon.

Cordialement.

Bonjour

Ok. Parfait donc !

Je vous propose :
- de finaliser les boutons de la feuille Accueil et notamment les deux boutons de droite qui concernent le récapitulatif.
- de passer en revue chaque bouton sur les feuilles récapitulatifs
- de supprimer les feuilles Calculs, Visualisation Nom etCopy Creation Nom. Si je ne me trompe cela ne sert plus

Bonjour Dan,

Je vous propose :

OK.

de supprimer les feuilles Calculs, Visualisation Nom etCopy Creation Nom. Si je ne me trompe cela ne sert plus

Vous avez tout à fait raison.

Bonne réception.

Rechercher des sujets similaires à "mettre ligne tableau"