Modification du code VBA d'un modèle déjà proposé

bonjour,

et tout d'abord merci ! car grâce à vous j'ai déjà avancé dans ces dédales Excelliens... Mais j'avoue que je vois flou...

Je me suis servi d'une base proposée sur un autre sujet de ce forum pour tenter de créer le fichier dont j'ai besoin. Je l'ai adapté comme j'ai pu, y suis presque parvenu mais je flanche...

Il s'agit d'un formulaire feuille "Interface" qui remplit un tableau sur la feuille "liste"

Mon Pb est que 4 lignes sont sytématiquement copiées lorsque je remplit ma fiche, au lieu d'une seule. Sans doute enfantin, et pourtant j'y ai passé des heures à chercher..

Et ensuite j'ai cru comprendre que dans le code le fichier s'ouvrait toujours sur la feuille Interface, ce qui est parfait, mais peut-on également choisir la cellule ciblée ? J'aimerais avec ma douchette pouvoir scanner un code à barre, pour remplir automatiquement chaque cellule. (en revanche pour "valider" je risque d'avoir un soucis... autant chercher tout de suite le forum des codes à barres !! ;))

Un grand merci à vous tous car ce logiciel magique qu'est excel demande pas mal de connaissances pour s'en servir un tout petit peu, et grace à vous je m'éveille et mélève un peu

17pile-copie.xlsm (112.23 Ko)

Bonjour,

j'espère que votre absence de réponse n'illustre pas un mauvais comportement de ma part.

J'essaye vraiment de corriger mes lacunes (immenses) mais je pars de trop loin pour parvenir à corriger ce code dans des délais décents...

C'est pour cela que je me permets de faire appel à vous.

Le code est le suivant:

Sub CpyData()
If ActiveSheet.Name <> "Interface" Then Exit Sub
If IsEmpty([E4]) Or [C4] = "" Or [C5] = "" Or [C6] = "" Or [C7] = "" Then Exit Sub
Dim celX As Range, dlig As Byte, lig&, dv&: Application.ScreenUpdating = 0
With Worksheets("Liste")
lig = 7 + .ListObjects(1).ListRows.Count: Set celX = .Cells(lig, 1)
End With
dlig = [B250].End(xlUp).Row
For lig = 7 To dlig
dv = lig - 7
celX.Offset(dv) = [E4] 'Date
celX.Offset(dv, 1) = [C4] 'Type de piles
celX.Offset(dv, 2) = [C5] 'Quantité
celX.Offset(dv, 3) = [C6] 'Site
celX.Offset(dv, 4) = [C7] 'Localisation*
Next lig
Range("C4:C6" & dlig).ClearContents
End Sub

Je souhaite copier E4, C4:C7 à la suite (même ligne) dans le tableau situé sur la feuille "liste", en s'incrémentant au fur et à mesure dans le tableau.

Il y a une boucle qui écrit autant de fois qu'il y a de lignes dans le formulaire situé dans "Interface", et c'est cette boucle que j'aimerais tuer !!

Le mieux que j'ai réussi à faire c'est d'écrire une seule ligne, ok, mais hors tableau et toujours la-même, donc chaque saisie écrasant la précédente...

Cette nuance oblige-t-elle à réécrire tout le code ?

Merci à vous.

Bonjour et bienvenue sur le forum

Tu écris :

Il y a une boucle qui écrit autant de fois qu'il y a de lignes dans le formulaire ...

En effet ! Il te suffit de supprimer la boucle "For lig = 7 To dlig" car tu remplis chacune des 4 cellules concernées...

Sub CpyData()
If ActiveSheet.Name <> "Interface" Then Exit Sub
If IsEmpty([E4]) Or [C4] = "" Or [C5] = "" Or [C6] = "" Or [C7] = "" Then Exit Sub
Dim celX As Range, dlig As Byte, lig&, dv&: Application.ScreenUpdating = 0
With Worksheets("Liste")
lig = 7 + .ListObjects(1).ListRows.Count: Set celX = .Cells(lig, 1)
End With
dlig = [B250].End(xlUp).Row

dv = lig - 7
celX.Offset(dv) = [E4] 'Date
celX.Offset(dv, 1) = [C4] 'Type de piles
celX.Offset(dv, 2) = [C5] 'Quantité
celX.Offset(dv, 3) = [C6] 'Site
celX.Offset(dv, 4) = [C7] 'Localisation*

Range("C4:C6" & dlig).ClearContents
End Sub

Bye !

bonjour,

Moi je trouve que toussa est bien compliqué ! Tu pourrais peut-être simplifier ?

cf p jointe (supprimée : boguée)

A+

Hello,

Merci Galopin01 & GMB pour votre aide !

@GMD J'avais déjà essayé de supprimer la boucle de cette façon, mais avec pour résultat : la ligne écrite est toujours sur la même ligne 11, hors du tableau généré automatiquement. Bilan les lignes se remplacent au fur et à mesure, au lieu de se succéder... :/ j'obtiens invariablement la même chose...

Quant au fichier simplifié j'avoue que je n'ai pas (encore) le niveau... Seulement quand je lance ta version @Galopin1 j'obtiens un msg d' "erreur de compilation" Variable non définie (sur le worksheet liste)... message pour le coup que je connais bien ! :D

passez une bonne journée et encore merci pour votre gentillesse.

Bonjour à toux

Nouvelle version... à ma sauce !

13pile-v1.xlsm (118.59 Ko)

Bye !

C'est impeccable !

Qu'est-ce que j'ai hâte de savoir faire ça !

Merci à toi gmb, ça commençait vraiment à me prendre la tête !! :D

J'ai oublié les guillemets sur Liste mais ça ne change rien : Ça ne marche que de temps en temps.

Ces foutus tableaux structurés m'échappent autant qu'à toi... Quand tu crois les tenir par un bout ça fout le camp d'un autre coté...

Version corrigée :

6pile-copie-vg.xlsm (108.51 Ko)

A+

Merci Galopin, chez moi ta version semble fonctionner correctement pourtant ? Pourquoi dis-tu qu'elle ne fonctionne que de temps en temps ?

@gmb : j'essaie de comprendre ton code, (galère :D), et ne vois pas à quelle moment tu indiques à la machine de commencer à compter pour calculer la dernière ligne où écrire (dans mon cas à partir de la ligne 7 de la page Liste). Comment fais tu pour qu'elle sache où écrire sur cette feuille Liste ?

C'est comme les voitures après révision ça fonctionne mieux...

Je lui ai mis un petit additif !

A+

Le même avec macro commentée;

8pile-v2.xlsm (119.15 Ko)

Bye !

Rechercher des sujets similaires à "modification code vba modele deja propose"