Mettre les cellules d'une ligne dans un tableau

Bonjour,

Je souhaite récupérer les informations, des cellules d'une ligne, pour les mettre dans un "tableau".

Je joins un fichier pour meilleur compréhension.

En vous remerciant pour votre aide.

Cordialement.

29modification.xlsm (55.73 Ko)

Bonjour,

La première chose à faire c'est de dimensionner votre tableau en partant de la colonne A et pas de la colonne B
ensuite : à quoi sert la colonne W ?

Petit question : vous travaillez sous excel Windows ou MAC ?

Bonjour Dan.

Je suis sous Windows Excel.

La colonne W me sert à mettre les numéros dans l'ordre.

Ci-joint ma formule

If Range("B4") <> "" Or Range("B5") <> "" Or Range("B6") <> "" Then

Range("W4") = 4

Range("W5") = 5

Range("W6") = 6

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

xlFillDefault

End If

Et je la recopie par:

Range("Tabentreprise[[#All],[N°]]").Copy

Sheets("ACCUEIL").Range("A3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Car la colonne A ne fait pas partie de mon tableau.

Si j'incorpore dans mon tableau la colonne A, de la façon que j'ai fait ce programme, cela me pose des problèmes de résultat.

En faisant comme cela, je n'ai pas ces problèmes.

Bonne réception.

Si j'incorpore dans mon tableau la colonne A, de la façon que j'ai fait ce programme, cela me pose des problèmes de résultat.

Afin que je comprenne, quels problèmes de résultats rencontrez-vous ?

C'est juste pour le formulaire je suppose

En gros lorsque cliquez sur le bouton Modif, on doit juste compléter le formulaire sur base du numéro choisi en colonne A via l'inputbox. Correct ?

Pour être franc, je ne m'en rappelle plus.

Tout simplement, je me suis créé ce petit programme il y a quelques années et je l'ai repompé pour en recréer un autre avec le même principe de feuille ACCEUIL et FORMULAIRE.

Mais qu''il y avait une incidence sur le formulaire ne m'étonnerait pas.

Ok. Pas grave

Je suppose que la colonne A n'aura jamais de doublons

Si oui, en premier redimensionnez votre tableau pour qu'il prenne la colonne A en charge
Pour ce faire,
-cliquez dans une cellule du tableau
- aller dans le menu "Création de tableau"
- A gauche, cliquez sur "redimenionner tableau"
- Remplacez $B$3:$W$7 par $A$3:$W$7

Après reste à savoir pourquoi vous voulez supprimer la ligne

Dites moi si ok et je vous donnerai le code.

pour moi, c'est sauf que je n'ai pas de numero en colonne W et A

et lorque je classe par ordre alphabetique j'ai un blocage à:

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

xlFillDefault

pour moi c'est bon sauf que..........

j'ai oublié c'est bon

pour moi, c'est sauf que je n'ai pas de numero en colonne W et A

pas sûr d'avoir compris. J'ai des numéros dans votre fichier en colonne A et W
A quoi cela correspond en fait ? numero de client ?

oui, cela correspond à un numéro client qui correspond également au même numéro de ligne

lorsque je fais une nouvelle saisie, j'insère une ligne dans mon tableau et je colle les données saisies dans le formulaire.

et ensuite je fais un classement par ordre alphabétique des nons et ensuite je colle la colonne W en A pour avoir les chiffres dans l'ordre

lorsque je fais une nouvelle saisie, j'insère une ligne dans mon tableau et je colle les données saisies dans le formulaire.

Je n'ai pas compris. Votre bouton c'est pour modifier ou pour ajouter ?
là je vois Modification et j'ai préparé dans ce sens sur base de vos indications dans la feuille

et ensuite je fais un classement par ordre alphabétique des nons et ensuite je colle la colonne W en A pour avoir les chiffres dans l'ordre

Oui là il faudra juste effectuer un tri après.
La colonne W ne devrait plus servir

oui, cela correspond à un numéro client qui correspond également au même numéro de ligne

Oui mais cela on n'est pas obligé. On peut commencer à 1 en A4

1ere question

De base, mon formulaire me sert à ajouter

Ce que je pensais faire, pour une MODIFICATION, c'était de récupérer les infos de ma feuille d'accueil et les mettre dans le formulaire, de modifier dans mon formulaire ce qui n'allait pas, de supprimer la ligne modifiée, et de valider cette modification comme si c'était une nouvelle saisie.

2eme question

A la validation de la saisie formulaire, j'insère une ligne à la dernière ligne dans le tableau de la feuille ACCUEIL et je recopie les données de la feuille formulaire.

j'ai donc un visuel sur cette ligne de ces nouvelles données dans ma feuille ACCUEIL. Cela me permet de faire encore un contrôle.

Avec une autre macro sur ma feuille accueil, je valide cette saisie en faisant un classement sur la colonne C de façon à avoir un classement par ordre alphabétique par clients.

(ceci est une partie de la macro, j'ai juste mis comment est fait le classement.)

Cette copie se fait sur une feuille nommée COPY CREATION NOM.

If Range("B4") <> "" Or Range("B5") <> "" Or Range("B6") <> "" Then

Range("W4") = 4

Range("W5") = 5

Range("W6") = 6

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

xlFillDefault

End If

Range("Tabentreprise[[#All],[N°]]").Copy

'Sheets("ACCUEIL").Range("W:W").Copy

Sheets("ACCUEIL").Range("A3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Dim LO, cDBR

Set LO = Range("Tabentreprise").ListObject 'votre tableau

If LO.ListRows.Count = 0 Then MsgBox "votre tableau est vide": Exit Sub

Set cDBR = LO.DataBodyRange 'les données du tableau

With Range("Destination") 'plage nommée, maintenant B4 de la "COPY_CREATION_NOM"

.Offset(1).Resize(cDBR.Rows.Count + 1, cDBR.Columns.Count + 1).ClearContents 'vider une plage avec les même nombre de lignes et colonnes +1 comme le tableau

With .Offset(1).Resize(cDBR.Rows.Count, cDBR.Columns.Count) 'maintenant même nombre de lignes et colonnes

.Value = cDBR.Value 'copier&coller les valeurs (sans formats)

.Sort .Range("A1"), Header:=xlNo 'trier selon nom sans entête

End With

End With

'Range("U3").Select

'ActiveCell = "[@[MONTANT H.T.]] - [@PRÉVISIONNEL]"

'Selection.AutoFill Destination:=Range("U3:U1000"), Type:=xlFillDefault

ThisWorkbook.Sheets("COPY_CREATION_NOM").Activate

Range("B3", Range("W3").End(xlDown)).Copy

Sheets("ACCUEIL").Activate

Range("B4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

ce qui fait que si j'ai des lignes vides au départ dans mon tableau de la feuille ACCUEIL, par cette macro elles sont supprimées.

POURQUOI J'AI DES LIGNES VIDES????

J'ai tout simplement pompé des formules sur des forums et je ne sais pas les modifier.

3ème question

A l'heure actuelle c'est la colonnes W qui me sert à détecter la dernière ligne du tableau à recopier dans la feuille COPY CREATION NOM même si j'ai des lignes vides.

Si vous avez une autre solution de formule, pour le même résultat sans aller dans COPY CREATION NOM, cela ne me pose pas de problème

Au départ en colonne A j'avais étirer des nombres jusqu'à la ligne x (disons 500).

Mais j'ai préféré avoir le numéro de la ligne ou de l'entreprise en fonction de la grandeur du tableau. Au départ si j'ai 20 lignes dans mon tableau je n'ai donc que les numéros de 4 + 20 soit ligne 24).

Pour moi, c'était plus joli.

Oui mais cela on n'est pas obligé. On peut commencer à 1 en A4

Oui, tout à fait.

C'est d'ailleurs ce que j'avais fait au départ.

En ce moment j'ai une macro qui me permet de modifier LA LIGNE DESIRÉE mais uniquement sur la feuille ACCUEIL.

Je demande le numéro de la ligne à modifier et cette ligne là est verrouillée et c'est uniquement que celle-ci qui est modifiable.

Je pars de la colonne B et passe sur toutes les colonnes jusqu'à la colonne U de cette ligne.

Lors de la validation formulaire, le calcul de la colonne U et J ce fait tout seul par l'intermédiaire d'une formule. En ce moment si modification colonne G PREVISIONNEL ou H MONTANT H.T. je suis obligé de recalculer la colonne J DIFFERENCE et U DIFFERENCE REELLE en manuel.

Chose que je ne souhaite plus avoir à faire si vous arrivez à recopier ACCUEIL DANS FORMULAIRE (en cas de modification.)

En revanche, je suis revenu de commencer mon calcul à 1 en A4 tout simplement parce que les collaborateurs prenaient le numéro de la ligne, pour la modification, et non le numéro du client.

Donc c'est pour cela que je pars à 4, alors le numéro de ligne correspond au numéro client, ce qui fait que je n'ai plus d'erreur maintenant sur le bon choix du client.

Voilà, je pense avoir tout dit

J'espère ne pas avoir été trop fastidieux.

Bonne réception.

Cordialement.

Je vais déjà vous proposer pour la question 1

Ce que je pensais faire, pour une MODIFICATION, c'était de récupérer les infos de ma feuille d'accueil et les mettre dans le formulaire, de modifier dans mon formulaire ce qui n'allait pas, de supprimer la ligne modifiée, et de valider cette modification comme si c'était une nouvelle saisie.

Voici le code à utiliser

Sub MODIFIER_UN_CLIENT()
Dim code As Integer

On Error Resume Next
code = InputBox("SAISIR LE NUMERO DU CLIENT", "MODIFIER UN CLIENT")

If code = False Then Exit Sub
On Error GoTo 0

Sheets("Formulaire").Range("F4:F36").ClearContents

Dim tb As ListObject
Dim lig As Integer

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

lig = WorksheetFunction.Match(code, tb.ListColumns(1).DataBodyRange, 0)

With Sheets("Formulaire")
    .Range("F4") = tb.DataBodyRange(lig, 2).Value
    .Range("F6") = tb.DataBodyRange(lig, 3).Value
    .Range("F8") = tb.DataBodyRange(lig, 4).Value
    .Range("F10") = tb.DataBodyRange(lig, 5).Value
    .Range("F12") = tb.DataBodyRange(lig, 6).Value
    .Range("F14") = tb.DataBodyRange(lig, 7).Value
    .Range("F16") = tb.DataBodyRange(lig, 8).Value
    .Range("F18") = tb.DataBodyRange(lig, 11).Value
    .Range("F20") = tb.DataBodyRange(lig, 12).Value
    .Range("F22") = tb.DataBodyRange(lig, 13).Value
    .Range("F24") = tb.DataBodyRange(lig, 14).Value
    .Range("F26") = tb.DataBodyRange(lig, 15).Value
    .Range("F28") = tb.DataBodyRange(lig, 16).Value
    .Range("F30") = tb.DataBodyRange(lig, 17).Value
    .Range("F32") = tb.DataBodyRange(lig, 18).Value
    .Range("F34") = tb.DataBodyRange(lig, 19).Value
    .Range("F36") = tb.DataBodyRange(lig, 20).Value
End With

Sheets("Formulaire").Activate
End sub

Il vous suffit de le mettre dans le module à la place de l'autre.

Je pense que si vous utilisez votre formulaire pour ajouter ou modifier vous pourriez mettre vos boutons dans cette feuille plutot que sur la feuille accueil (à voir...)
Le code ne fait que mettre les données dans la feuille Formulaire en fonction du numéro de client choisi.
Il serait d'ailleurs intéressant de reprendre le code client dans votre formulaire. Cela servira de référence pour ajouter ou modifier le tableau en accueil. Donc mon conseil est d'ajouter cette référence en plus (en F38 par exemple)


A la validation de la saisie formulaire, j'insère une ligne à la dernière ligne dans le tableau de la feuille ACCUEIL et je recopie les données de la feuille formulaire.

Non ce n'est pas comme cela que l'on va fonctionner. Vous êtes en tableau au format structuré, on fonctionne différemment et cela va être plus simple au final.
- S'il s'agit d'une modification, on modifiera la ligne existante
- S'il s'agit d'un ajout on ajoutera à la fin du tableau

Mais pour la question d'ajouter je regarderai après si cela vous convient déjà comme ceci.


En revanche, je suis revenu de commencer mon calcul à 1 en A4 tout simplement parce que les collaborateurs prenaient le numéro de la ligne, pour la modification, et non le numéro du client.

Lol ! C'est pas une bonne idée. Si je masque les lignes et colonnes, cela n'a plus de raison et personne ne sait plus.
Ce que vous pouvez faire c'est masquer la colonne A tout simplement
Dans toute base de données on commence à 1.
De plus comme vous êtes avec un tableau au format structuré, excel considère A4 comme la première ligne du tableau

Bien, nous avançons

Vous aviez raisons concernant le tableau avec la colonne W.

Vous m'avez fait mettre le tableau en A et comme en W l'entête de ligne est N° et A est également N°, lorsque je fais la copie de W sur A, W devient N°2 et lorsque je fait le classement il ne connait que N° de W et pas N°2.

je viens d'introduire entre 2 lignes:

Range("A3") = ("N°")

Range("W3") = ("X")

Chose que je ne savais pas faire comme bidouille les années antérieures.

Bref, en changeant quelques positions de cellules dans les macros, en ayant modifier le tableau en A j'arrive dans la saisie et le classement comme avant.

Quant à votre formule, elle fonctionne à MERVEILLE.

SUPER.

MERCI.

Concernant votre dernière question

Ce que vous pouvez faire c'est masquer la colonne A tout simplement

Dans ce cas, comment trouver le N° client??

En se basant sur le N° de la ligne?

Si c'est cela, je n'ai pas besoin de mettre de numéro client. Pour moi, cela ne pose pas de problème.

Bonne réception.

Je vous souhaite une bonne nuit.

Cordialement.

Bonjour Dan.

J'ai un petit problème.

Je vous joins un fichier avec explication.

Bonne réception.

11modification-2.xlsm (57.08 Ko)

Bonjour,

J'ai un petit problème.
Je vous joins un fichier avec explication.

Ou là là, je ne comprends pas comment vous fonctionnez là
1. pourquoi vous faites des changements de couleur ??
2. Il éviter les Select et selection dans les codes. Cela ralentit l'exécution et excel VBA n'a pas besoin de cela pour fonctionner
3. il ne faut pas mélanger les codes. Il vaut mieux avoir de petits codes que vous appelez entre eux. C'est plus facile à modifier et à comprendre

Je pense que si vous voulez avancer il faut se poser et m'expliquer comment vous utilisez le fichier.
Mon conseil actuellement est d'oublier votre code pour le moment (si vous êtes d'accord bien entendu) et d'y aller pas à pas

ce que j'ai pensé :
- mettez une cellule pour le code client dans le formulaire (je vous l'ai expliqué avant). Le code est la référence qui permet de situer la ligne dans votre tableau.
- vous utilisez le formulaire pour ajouter de nouvelle ligne. Si oui mettez un bouton AJOUT.
- vous utilisez le formulaire pour modifier une ligne existante. Le bouton Modification sert à cela actuellement

En premier je vous propose de d'abord figer les infos du tableau dans la feuille Accueil.
1. je voudrais savoir à quoi vous servent les colonnes U et V
2. Je ne comprends pas la colonne i qui renseigne un + sachant que la colonne J mentionne le montant positif ou négatif
3. Colonne J vous complétez manuellement ?
4. Colonne A, mettez N° client en A3 ou Num client

Bonjour Dan,

Le plus simple, je vous joint le fichier complet.

Bonne réception.

11cout-construction.zip (306.99 Ko)

Re

Waouh ! là je comprends mieux... C'est plus compliqué là

Je me demande pourquoi vous faites clignoter vos cellules ????. C'est un peu perte de temps cela

Vous pourriez faire plus simple :
au click sur le bouton Modif

- vous utilisez uniquement le code que je vous ai donné qui remplit directement le formulaire et active la feuille

Ou

Au click du bouton, cela active le formulaire et vous choisissez le client dans la liste déroulante en F6
Une fois le client choisi le code importe les données depuis la feuille Accueil dans le formulaire

NB : mes questions 1 à 4 restent ouvertes.

Rechercher des sujets similaires à "mettre ligne tableau"