Partager via

COPIER ET COLLER LES VALEURSD UNE LIGNE EN VBA

Anonyme
2020-10-24T19:36:11+00:00

Bonjour à tous , je viens ici chercher de l'aide pour corriger une erreur dans le code suivant , je m,explique:

 J'essaye (en vain) d' utiliser une cette macro qui se déclenche en cliquant sur un bouton nommé "Ajouter" et à travers la valeur rentrée dans un champs de formulaire ,cette derniere doit me chercher dans la premiere  colonne  d'une table feuille X (feuille source) la valeur correspondante à la valeur cherchée via le forrmulaire pour copier par la suite   toutes les valeurs se trouvant  dans la meme ligne jusqu à la colonne 48, et les coller par la suite , dans une autre table d une autre feuille XX (feuille déstination), la copie doit se faire aprés la derniere ligne  renseignée, et d'autres valeurs viendront  s'ajouter dans cette meme ligne  sur les colonnes suivantes suivant les valeurs rentrées manuellement dans la suite du formulaire .

La macro fait bien la copie ,toutefois ne se fait pas sur la premiere cellule vide , mais plutot sur la derniere cellule non vide , ce qui vient effacer  ou erroner  les valeurs existantes.

Private Sub BtnAjouter_Click()

'Procedure pour rentrer les donneés du formulaire **********************************************************

'********************************************************************************************************************************

  Dim C As Range, Plage As Range, X As Range, Ligne As Long, Sh As Worksheet

  Set Sh = Sheets("feuille source")

  With Sheets("Nouveaux articles")

    Set Plage = .Range("A4", .Cells(.Rows.Count, 1).End(xlUp))

  End With

  With Sheets("feuille destination")

    Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row

      Set X = Sh.Range("A:A").Find(ComboBox5Articleaajouter.Value, , , xlWhole, xlByRows, xlPrevious)

      If X Is Nothing Then

      Else

        Ligne = Ligne + 1

        X.Resize(, 48).Copy .Cells(Ligne, 1)

      End If

End With

Sheets("feuille destination").Activate

Cells(Rows.Count, 1).End(xlUp)(1).Select

ActiveCell = ComboBox5Articleaajouter.Value

ActiveCell.Offset(0, 72).Value = ComboBox1

ActiveCell.Offset(0, 73).Value = ComboBox3

ActiveCell.Offset(0, 74).Value = ComboBox4

ActiveCell.Offset(0, 62).Value = TextCadenceL1

ActiveCell.Offset(0, 64).Value = TextCadenceL3

ActiveCell.Offset(0, 66).Value = TextCadenceL4

ActiveCell.Offset(0, 68).Value = TextEmpreintes1

ActiveCell.Offset(0, 69).Value = TextEmpreintes3

ActiveCell.Offset(0, 70).Value = TextEmpreintes4

End Sub

Cordialement

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

DanielCo 107.7K Points de réputation
2020-10-27T14:21:45+00:00

C'est très vicieux. La liste des valeurs source du combobox (NouveauxArticles) évolue. Au choix de "21", la liste se présente ainsi :

Note que le choix est le 5e. la propriété ListIndex est positionnée à 4 (premier choix : ListIndex = 0). Au moment de la copie des 48 colonnes, cette liste évolue (elle est en effet composée de formules). La liste source du combo devient :

ListIndex 4 correspond à la valeur suivante (23).

A problème complexe, solution simple. La valeur du combobox a déjà été copiée avec les 48 cellules. Il faut supprimer la ligne :

ActiveCell = ComboBox5Articleaajouter.Value

Daniel

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2020-10-25T08:39:50+00:00

Bonjour

Je n'ai pas détaillé ton code mais vu que tu écrits "la copie doit se faire aprés la derniere ligne  renseignée" et la présence inutile du 1 dans  Cells(Rows.Count, 1).End(xlUp)(1).Select d’où ma proposition.

En te lisant (entre 1er message et 2eme), je ne sais pas si le problème viens :

  • du copier/coller (1ere partie du code : qui me semble correcte) ce que sous entent pour moi ton 1er message.

=> Pb de position de ligne ?

  • de l'affectation de valeurs (2eme partie du code) voir ton 2eme message

=> Pb de position de colonne ?

La situation décrite dans ton 2eme message est avec ma proposition ou sans ? Si oui remet 1 mais alors ou est le problème (la position de colonnes que tu décrit semble correctes) ?

Remarque : En lisant  ActiveCell = ComboBox5Articleaajouter.Value il me semble que cela écrase la valeur de la colonne A.

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2020-10-24T20:07:22+00:00

Bonjour

Sheets("feuille destination").Activate

Cells(Rows.Count, 1).End(xlUp)(2).Select

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

21 réponses supplémentaires

  1. DanielCo 107.7K Points de réputation
    2020-10-25T08:52:07+00:00

    Bonjour,

    j'ai du mal à comprendre. Quels sont les éléments qui se copient mal ? la première copie de 48 colonnes ou les informations du formulaire ?

    Est-ce que ton second message concerne le code initial ou la modification apportée par Arnaud ?

    Cordialement.

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2020-10-24T23:41:29+00:00

    Bonsoir Hecatonchire,merci pour votre reponse.

    Quand j'execute le code  ,la valeur de reference  X dans l'exemple qui suit  (1ere colonne) s'inscrit  bien dans la premiere ligne vide mais seulement avec une partie des valeurs qui sont demandées par copie ( ABCDEFGH  dans l'exemple)   et sans le reste de valeurs rentrées manuellement dans le le meme formulaire  (IJKLMN dans l'exemple) 

    Ex :  je rentre ma valeur cherchée  X dans le forrmulaire  , et je rajoute dans les autres champs les valeurs   I   J   K   L   M  N ,j'execute le code , ca m'affiche ça:

                               1ere Valeur rentrée ------>          X     A   B   C   D   E   F  G  H         

       2emeValeur qui s insere toute seule----->          Y                                              I   J   K   L   M  N  

    Y c'est la valeur qui vient s inserer toute seule ce qui fait le decalage des valeurs de I à N qui doivent apparaitre sur la premiere ligne en suite du H

    Ce que je cherche à obtenir :                    X    A  B  C  D  E  F  G  H  I  J  K  L  M  N  

    Cordialement.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire