XL 2019 Macro retour à la ligne dans une cellule

netparty

XLDnaute Junior
Bonjour à tous



Je cherche a modifier mon code mais je ne trouve pas la solution.



Via mon formulaire je choisi une référence de matériel et via ma macro il copie mon choix vers mon listing.

Jusque-là tout va bien , mais j’aimerai pouvoir choisir plusieurs fois une référence et l’insérer de nouveau dans la même cellule sans effacer le contenu existant.

Je voudrai que la macro vérifie si la cellule est non vide et si c’est le cas qu’elle fasse un retour à la ligne pour copier la nouvelle valeur choisie.

Ci-joint mon bout de code



Private Sub Frm_Materiel_copier_indiceA_Click()

'---------------------------------------------------------

'Copier matériels vers LISTING_FT

'Bouton Frm_Materiel_copier_indiceA

'---------------------------------------------------------

Dim LigneActive$

LigneActive = ActiveCell.Row

Cells(LigneActive, 10).Value = Me.textbox3.Value 'Description/commentaire

Cells(LigneActive, 11).Value = Me.textbox6.Value 'Marque

Cells(LigneActive, 12).Value = Me.TextBox5.Value 'référence

Cells(LigneActive, 13).Value = Me.textbox7.Value ' Fournisseur

End Sub



Merci d’avance et bonne journée à tous
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Netparty,
essayez cela :
VB:
If Cells(LigneActive, 10) = "" Then
    Cells(LigneActive, 10) = Me.textbox3.Value
Else
    Cells(LigneActive, 10) = Cells(LigneActive, 10) & Chr(10) & Me.textbox3.Value
End If
( Chr(10) peut être remplacé par vbLf qui est la même chose )
 
Dernière édition:

netparty

XLDnaute Junior
Bonjour Netparty,
essayez cela :
VB:
If Cells(LigneActive, 10) = "" Then
    Cells(LigneActive, 10) = Me.textbox3.Value
Else
    Cells(LigneActive, 10) = Cells(LigneActive, 10) & Chr(10) & Me.textbox3.Value
End If
( Chr(10) peut être remplacé par vbLf qui est la même chose )

Bonjour sylvanu

Merci pour ton aide

Bonne journée
 

soan

XLDnaute Accro
Bonjour @netparty, sylvanu,

Attention
Le caractère de déclaration de type est erroné !
Ce n'est pas Dim LigneActive$ mais : Dim LigneActive&
$ : String ; & : Long

Ton code VBA compile, mais il fait une 1ère conversion de type implicite
et inutile avec : LigneActive = ActiveCell.Row ; ensuite, il fait une autre
conversion de type implicite inutile à chaque utilisation de LigneActive,
donc 4 fois.

Mon code VBA n'a pas besoin de LigneActive.
;)
VB:
Private Sub Frm_Materiel_copier_indiceA_Click()
  '---------------------------------------------------------
  'Copier matériels vers LISTING_FT
  'Bouton Frm_Materiel_copier_indiceA
  '---------------------------------------------------------
  Application.ScreenUpdating = 0
  With Cells(ActiveCell.Row, 12)
    .Offset(, -2) = textbox3                  'Description/commentaire
    .Offset(, -1) = textbox6                  'Marque
    If .Value = "" Then
      .Value = textbox5                       '1ère référence
    Else
      .Value = .Value & Chr$(10) & textbox5   'référence suivante
    End If
    .Offset(, 1) = textbox7                   'Fournisseur
  End With
End Sub
soan
 

netparty

XLDnaute Junior
Bonjour @netparty, sylvanu,

Attention
Le caractère de déclaration de type est erroné !
Ce n'est pas Dim LigneActive$ mais : Dim LigneActive&
$ : String ; & : Long

Ton code VBA compile, mais il fait une 1ère conversion de type implicite
et inutile avec : LigneActive = ActiveCell.Row ; ensuite, il fait une autre
conversion de type implicite inutile à chaque utilisation de LigneActive,
donc 4 fois.

Mon code VBA n'a pas besoin de LigneActive.
;)
VB:
Private Sub Frm_Materiel_copier_indiceA_Click()
  '---------------------------------------------------------
  'Copier matériels vers LISTING_FT
  'Bouton Frm_Materiel_copier_indiceA
  '---------------------------------------------------------
  Application.ScreenUpdating = 0
  With Cells(ActiveCell.Row, 12)
    .Offset(, -2) = textbox3                  'Description/commentaire
    .Offset(, -1) = textbox6                  'Marque
    If .Value = "" Then
      .Value = textbox5                       '1ère référence
    Else
      .Value = .Value & Chr$(10) & textbox5   'référence suivante
    End If
    .Offset(, 1) = textbox7                   'Fournisseur
  End With
End Sub
soan

Merci pour votre aide.

Puis-je aussi utiliser ce code pour copier d'un formulaire vers un autre.

Bonne journée
 

soan

XLDnaute Accro
Sans voir le fichier avec tes 2 formulaires, c'est difficile à dire ; mais en
principe, oui : tu dois pouvoir utiliser le même genre de code VBA. ;)


Bonne journée à toi aussi. :)

soan
 

netparty

XLDnaute Junior
Sans voir le fichier avec tes 2 formulaires, c'est difficile à dire ; mais en
principe, oui : tu dois pouvoir utiliser le même genre de code VBA. ;)


Bonne journée à toi aussi. :)

soan
Merci voici le code

Formulaire 1 vers formulaire 2

Private Sub BP_import_Mat_FRM_indA_Click()
If Me.textbox3 <> "" Then
Formulaire_FT.TextBox10 = Me.textbox3 'Description /designation
Formulaire_FT.TextBox11 = Me.textbox6 'Marque
Formulaire_FT.TextBox12 = Me.TextBox5 'reference
Formulaire_FT.TextBox13 = Me.textbox7 'fournisseur

Unload Me
'UserForm1.Show
End If
End Sub

Bonne journée
 

soan

XLDnaute Accro
Ah, non : avec ce code-là, on ne peut pas utiliser le même genre de code VBA
que précédemment ; la seule petite modification qu'on peu faire est :
VB:
Private Sub BP_import_Mat_FRM_indA_Click()
  If Me.textbox3 = "" Then Exit Sub
  Formulaire_FT.TextBox10 = Me.textbox3 'Description /designation
  Formulaire_FT.TextBox11 = Me.textbox6 'Marque
  Formulaire_FT.TextBox12 = Me.TextBox5 'reference
  Formulaire_FT.TextBox13 = Me.textbox7 'fournisseur
  Unload Me
  'UserForm1.Show
End Sub
... ou essaye peut-être :
Code:
Private Sub BP_import_Mat_FRM_indA_Click()
  If Me.textbox3 = "" Then Exit Sub
  With Formulaire_FT
    .TextBox10 = Me.textbox3 'Description /designation
    .TextBox11 = Me.textbox6 'Marque
    .TextBox12 = Me.TextBox5 'reference
    .TextBox13 = Me.textbox7 'fournisseur
  End With
  Unload Me
  'UserForm1.Show
End Sub
(Je ne me rappelle plus si la technique du With
marche avec un nom de formulaire)


soan
 

netparty

XLDnaute Junior
Ah, non : avec ce code-là, on ne peut pas utiliser le même genre de code VBA
que précédemment ; la seule petite modification qu'on peu faire est :
VB:
Private Sub BP_import_Mat_FRM_indA_Click()
  If Me.textbox3 = "" Then Exit Sub
  Formulaire_FT.TextBox10 = Me.textbox3 'Description /designation
  Formulaire_FT.TextBox11 = Me.textbox6 'Marque
  Formulaire_FT.TextBox12 = Me.TextBox5 'reference
  Formulaire_FT.TextBox13 = Me.textbox7 'fournisseur
  Unload Me
  'UserForm1.Show
End Sub
... ou essaye peut-être :
Code:
Private Sub BP_import_Mat_FRM_indA_Click()
  If Me.textbox3 = "" Then Exit Sub
  With Formulaire_FT
    .TextBox10 = Me.textbox3 'Description /designation
    .TextBox11 = Me.textbox6 'Marque
    .TextBox12 = Me.TextBox5 'reference
    .TextBox13 = Me.textbox7 'fournisseur
  End With
  Unload Me
  'UserForm1.Show
End Sub
(Je ne me rappelle plus si la technique du With
marche avec un nom de formulaire)


soan

Merci

Je fais tester cela.
 

netparty

XLDnaute Junior
Bonjour à tous



Je reviens sur le sujet,

Vos réponse mon était d'une grande aide, mais j'ai une autre question,

est-il possible si dans la première cellule il existe déjà une référence identique de ne pas la copier une deuxième fois.



Merci
 

soan

XLDnaute Accro
Bonjour netparty,

C'est possible ; solution n° 1 : regarder si la référence à écrire existe déjà dans la plage
de destination ; si oui, on ne l'écrit pas ; si non, on l'écrit ; solution n° 2 : utiliser la
technique du dictionnaire (Scriptionary) ; mais je ne la connaît pas bien, alors, à toi
de trouver des infos dessus. ;)

soan
 

netparty

XLDnaute Junior
Bonjour netparty,

C'est possible ; solution n° 1 : regarder si la référence à écrire existe déjà dans la plage
de destination ; si oui, on ne l'écrit pas ; si non, on l'écrit ; solution n° 2 : utiliser la
technique du dictionnaire (Scriptionary) ; mais je ne la connaît pas bien, alors, à toi
de trouver des infos dessus. ;)

soan
Bonjour soan

pourrais-tu me montrer un exemple.

Merci
 

soan

XLDnaute Accro
Re,

Voici un exemple : post #2

* le nom de la plante est cherché dans la destination par le .Find
* si la plante n'est pas trouvée, on l'ajoute en fin de tableau
* si la plante est trouvée, on modifie sa ligne

Tu peux lire aussi toute la conversation. ;)

Si ça te convient pour appliquer à ton propre exo : OK ; sinon,
tu devrais joindre un fichier exemple (sans données confidentielles).


soan
 
Dernière édition:

netparty

XLDnaute Junior
Re,

Voici un exemple : post #2

* le nom de la plante est cherché dans la destination par le .Find
* si la plante n'est pas trouvée, on l'ajoute en fin de tableau
* si la plante est trouvée, on modifie sa ligne

Tu peux lire tout ce post, et éventuellement toute la conversation.

Si ça te convient pour appliquer à ton propre exo : OK ; sinon,
tu devrais joindre un fichier exemple (sans données confidentielles).


soan
Ci-joint mon fichier pour y jeter un oeil.
Merci d'avance
 

Fichiers joints

soan

XLDnaute Accro
@netparty

Dans ton post #10, tu as écrit : « est-il possible si dans la première cellule il existe
déjà une référence identique de ne pas la copier une deuxième fois. »


Je crois que pour faire ta demande, il faut utiliser seulement la 1ère feuille "DB_IMPORT",
et donc ne pas utiliser la 2ème feuille "LISTING_FT", ni le UserForm "Recherche_materiel" ;
peux-tu le confirmer ? ou faut utiliser la 2ème feuille et / ou le UserForm ?

Si tout se passe sur la 1ère feuille "DB_IMPORT", ta première cellule est donc sur
cette feuille ; mais où ? indique sa référence, par exemple : B5

J'ai bien vu ta colonne G "Référence(s)".

Tu dois préciser quelle est ta demande ; ta couleur jaune ne suffit pas !

Indique les circonstances ; par exemple : je rentre une référence sur la 1ère feuille,
dans telle cellule ; ou : dans le UserForm, je saisis la référence dans la TextBox5
(qui est pour "Référence").

Et ensuite ? est-ce dans la colonne G de la 1ère feuille qu'il faut vérifier si la
Référence existe ou non ? si la Référence existe déjà, on ne fait rien ; mais
si la Référence n'est pas trouvée, on ajoute les données du formulaire ?
c'est ça ? ou autre chose ?

Si c'est ça, précise aussi quelles données du formulaire doivent être copiées ;
toutes les données du formulaire ? ou seulement quelques unes ? précise
lesquelles ! et où ces données du formulaire doivent être copiées ? quelle
est au juste la destination ? sur quelle feuille ? dans quelles cellules ?

soan
 
Dernière édition:

netparty

XLDnaute Junior
@netparty

Dans ton post #10, tu as écrit : « est-il possible si dans la première cellule il existe
déjà une référence identique de ne pas la copier une deuxième fois. »


Je crois que pour faire ta demande, il faut utiliser seulement la 1ère feuille "DB_IMPORT",
et donc ne pas utiliser la 2ème feuille "LISTING_FT", ni le UserForm "Recherche_materiel" ;
peux-tu le confirmer ? ou faut utiliser la 2ème feuille et / ou le UserForm ?

Si tout se passe sur la 1ère feuille "DB_IMPORT", ta première cellule est donc sur
cette feuille ; mais où ? indique sa référence, par exemple : B5

J'ai bien vu ta colonne G "Référence(s)".

Tu dois préciser quelle est ta demande ; ta couleur jaune ne suffit pas !

Indique les circonstances ; par exemple : je rentre une référence sur la 1ère feuille,
dans telle cellule ; ou : dans le UserForm, je saisis la référence dans la TextBox5
(qui est pour "Référence").

Et ensuite ? est-ce dans la colonne G de la 1ère feuille qu'il faut vérifier si la
Référence existe ou non ? si la Référence existe déjà, on ne fait rien ; mais
si la Référence n'est pas trouvée, on ajoute les données du formulaire ?
c'est ça ? ou autre chose ?

Si c'est ça, précise aussi quelles données du formulaire doivent être copiées ;
toutes les données du formulaire ? ou seulement quelques unes ? précise
lesquelles ! et où ces données du formulaire doivent être copiées ? quelle
est au juste la destination ? sur quelle feuille ? dans quelles cellules ?

soan
Bonjour soan

En fait j'utilise uniquement le formulaire pour entrer les données.

La feuille "DB_IMPORT" ne sert qu'a alimenter le tableau matériel disponible du formulaire.

Donc dans mon formulaire j'ai le choix de choisir plusieurs référence de matériel a intégrer dans mon listing "LISTING_FT", donc je peux avoir des références de matériels qui sont de la même marque et d'autre pas.

Donc dans la case marque il n'y a que les différentes marques mais pas en double puisque je peux avoir 10 références différentes pour la même marque.

Voila je sais pas si c'est claire comme cela.

Merci

Bonne journée
 

soan

XLDnaute Accro
Bonjour @netparty,

La feuille "DB_IMPORT" sert uniquement pour remplir le tableau matériel du formulaire :
ok ; donc je n'ai pas besoin de m'occuper de cette feuille pour faire ta demande.

Sur la feuille "LISTING_FT" :

* en cellule I16, il y a un « point » ; je crois que c'est juste une erreur de frappe, et qu'il
ne sert à rien. ;)

* j'ai vu que c'est en cliquant sur le bouton « Recherche matériel » que le formulaire
correspondant apparaît ; mais c'est quelque chose que tu aurais dû me dire ! pense
bien que toi seul connaît vraiment ton fichier Excel, puisque c'est ton projet ; aussi,
ce qui est évident pour toi (y compris le mode d'emploi et le fonctionnement), n'est
pas évident pour une autre personne qui découvre ton fichier !

* dans ton formulaire, 1ère case du haut, que faut-il mettre ? j'ai mis « prise » ; une
liste apparaît dessous ; je sélectionne par exemple la ligne dont la désignation est :
« Prise simple » ; j'ai vu qu'ça a mis les infos de la ligne sélectionnée dans les cases
du bas (en gris clair) ; ça met : « Gamme : 0 » (mais j'vois pas d'où il sort, ce 0) ;
c'est peut-être vraiment la Gamme 0 ; ou c'est peut-être un bug ? bon, et ensuite ?
je fais quoi, moi, dans ton formulaire ? parce que pour tes infos à droite, le point 1,
je l'ai fait ; mais je bloque sur le point 2 : « Sélectionner la fiche technique dans
le listing fiche technique » ; la fenêtre du formulaire est modale : ok ; donc j'peux
cliquer sur la feuille "LISTING_FT" ; et quelle fiche technique j'suis censé pouvoir
sélectionner, vu qu'le tableau est vide, sans aucune donnée ? j'suis bloqué ! :(

* tu as écrit : « dans mon formulaire, j'ai le choix de choisir plusieurs références » ;
tu n'as pas précisé si c'est en même temps ou non ; j'ai essayé de choisir plus
d'une référence (avec un clic sur une 1ère référence, puis Ctrl clic sur une 2ème
référence) : ça ne marche pas ; donc c'est pour une seule référence à la fois ;
ça aussi, tu aurais dû le préciser, même si c'est évident pour toi !

* « je peux avoir des références de matériel qui sont de la même marque » ; ah oui ?
par rapport à quoi ? est-ce des références de matériel qui sont de la même marque
entre elles ? (donc un « lot » de références de matériel de la même marque) ; ou est-
ce entre la marque de la référence de matériel de la ligne qui est sélectionnée dans
le formulaire et ... quoi d'autre ? la marque de la feuille "LISTING_FT", colonne K,
et pour quelle ligne ? mais si c'est ça, comme le tableau est vide de données, c'est
pas possible d'aller bien loin, hein ?

* note bien que si j'peux même pas faire la 2ème étape de ton formulaire, j'peux
difficilement faire la 3ème étape !!!

* même si tu as écrit : « ... qui sont de la même marque et d'autre pas », j'bloque
de la même façon !

* « Donc dans la case marque » ; laquelle ? celle du coin inférieur gauche du
formulaire, n'est-ce pas ? ou c'est une cellule de la feuille "LISTING_FT", K18
ou en dessous ?

* « Donc dans la case marque il n'y a que les différentes marques » : à supposer
que tu parles de la case « Marque » du formulaire : vu qu'au-dessus on ne peut
sélectionner qu'une seule ligne à la fois, il ne peut donc y avoir dans la case
qu'une seule marque, pas plusieurs !

* « il n'y a que les différentes marques mais pas en double puisque je peux avoir
10 références différentes pour la même marque » : là, j'ai rien compris ! mais
c'est peut-être parce que j'suis fatigué d'essayer de deviner c'que tu as voulu
dire au juste !

J'espère que ton prochain post sur ce sujet apportera plus de précisions, à la fois
sur les emplacements de chaque élément dont tu parles (sur le formulaire ou sur
la feuille "LISTING_FT") et sur le mode d'utilisation (= ton mode d'emploi).

Et aussi : envoie un autre fichier, avec des données dans le tableau de la feuille
"LISTING_FT" : A18:M21 ne doit pas être vide ! et si tu peux mettre un peu plus
de 4 lignes (par exemple une dizaine), ça sera mieux !


soan
 
Dernière édition:

netparty

XLDnaute Junior
Bonjour @soan

Merci pour tes commentaires, voila un peu plus d'explication.

J'utilise unique le formulaire pour chercher le matériel, dans la 1er case du haut tu choisi ton matériel par marque(ex: niko, legrand...) et ensuite tu sélectionne se que tu a besoin dans la liste et quand c'est fait tu confirme avec le bouton A.

J'ai mis un exemple dans le fichier pour que sa soit plus claire.

Bonne journée et merci
 

Fichiers joints

soan

XLDnaute Accro
Bonjour @netparty,

ah oui, cette fois, c'est plus clair ! :)

* j'ai augmenté la hauteur de la ligne 19, car je m'en suis servi pour tester la macro.

* la cellule active est en ligne 19 ; laisse comme c'est, et vérifie que c'est ok.

à te lire pour avoir ton avis. ;)


soan
 

Fichiers joints

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas