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.
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 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 subIl 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.
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.
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.