Copier une cellule dans une autre feuille en VB

Bonjour à toutes et tous,

Mon problème est relativement simple mais je débute avec le VB et donc tout devient plus difficile !!

Le but de ma fonction est simple:

Je souhaite que lorsqu'il y a un changement dans une cellule de la colonne A de ma feuille 2 la cellule soit copié dans ma feuille 1. Mais attention, le programme doit copier la cellule au niveau de la première ligne de la feuille 1 qui sera complètement libre.

Je m'explique, dans la feuille 1 il y a déjà une macro qui s'exécute (ce n'est pas moi qui l'ai faite malheureusement) et elle remplis automatiquement plusieurs cellule dans différente colonne !

Un grand merci pour l'aide que vous m'apporterez !

Cordialement

Salut Monsieur gg et bienvenue sur le Forum

Voici ci-dessous une macro qui répond à tes besoins et à tes critères (du moins je l'espère) :

NB : Je ne suis pas sur d'avoir compris où devais se coller la valeur saisie dans la Feuil1 :<

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Cellule As Integer 'Je déclare ma variable Cellule qui prendra la valeur saisie en colonne A de ma Feuil2
Dim DernLigne As Long 'Je déclare ma variable DernLigne qui indiquera la ligne où serra inséré ma var Cellule

Application.EnableEvents = False 'On désactive les évenements le temps que celle-ci tourne

If Target.Cells.CountLarge > 1 Then 'Si l'utilisateur sélectionne plus d'une cellule alors
    Application.EnableEvents = True ' On réactive les événements
    Exit Sub 'On quitte la procédure
End If 'Fin de mon SI

If Not IsNumeric(Target.Value) Then 'Si la valeur saisie en colonne A n'est pas de type numérique alors
    MsgBox "La valeur que vous avez saisie en colonne A de la Feuil2 n'est pas numérique." & vbCr & vbCr & "La valeur ne sera donc pas transférée en Feuil1."
    Application.EnableEvents = True ' On réactive les événements
    Exit Sub 'On quitte la procédure
Else 'Si la valeur saisie en colonne A est de type numérique, alors :

    If Target.Column = 1 Then 'Si il y a une modification dans une cellule de la colonne 1 de la Feuil2, alors
        Cellule = Target.Value 'La variable Cellule prend la valeur de la cellule saisie
        DernLigne = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1 'On recherche la ligne disponible en colonne A de la Feuil1
        Sheets("Feuil1").Range("A" & DernLigne) = Cellule 'On insère la valeur de la varibale Cellule en Feuil1
    End If 'Fin de mon SI

End If

Application.EnableEvents = True 'On réactive les évenements maintenant que celle-ci est terminée

End Sub

Alors j'ai mis beaucoup de description pour que tu comprenne à quoi servent les lignes de ce code ^^

Ce code est à insérer dans la partie Worksheet en Feuil2

Si tu a des modifications à apporter fais nous un retour

Un tout grand merci Juice j'ai fait un pas de géant

J'ai tout de même deux tous petits problèmes :

  • La valeur que j'entre dans la feuille 2 est un code barre
  • C'est toute la ligne qui doit être libre pour insérer la valeur copié

Je joints le fichier fournie avec le code déjà présent dans lequel j'ai ajouté mon code.

En tout cas un très grand merci pour la rapidité de votre réponse !!!

Monsieur gg,

Aaah parfait avec votre fichier je comprend mieux

J'ai fais deux modifications, la première a été d'avoir retiré tout cette partie :

If Not IsNumeric(Target.Value) Then 'Si la valeur saisie en colonne A n'est pas de type numérique alors
    MsgBox "La valeur que vous avez saisie en colonne A de la Feuil2 n'est pas numérique." & vbCr & vbCr & "La valeur ne sera donc pas transférée en Feuil1."
    Application.EnableEvents = True ' On réactive les événements
    Exit Sub 'On quitte la procédure
Else 'Si la valeur saisie en colonne A est de type numérique, alors :

Étant donné que se sont des codes de barres que vous saisissez, les espaces pourraient bloquer la macro, donc autant retirer cette partie ^^

La seconde modification a été de remplacer cette ligne :

DernLigne = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1 

Par cette ligne :

DernLigne = Sheets("Feuil1").Cells.SpecialCells(xlCellTypeLastCell).Row + 1

Qui recherche la première ligne vide et non pas la première cellule vide ^^

Voilà voilà, je vous remet le fichier modifié

Si besoin, faite nous un retour !

C'est top la vitesse à laquelle vous répondez 1000 mercis !!!

Maintenant j'ai un petit problème, le débogueur s'ouvre sur cette ligne :

    Cellule = Target.value 'La variable Cellule prend la valeur de la cellule saisie

La valeur de la cellule (celle du code barre) était 022018087039017. Est-ce possible que le fait qu'il y ait un 0 au début pose problème ? (Je sais que je suis obligé de mettre Shift Lock et la cellule au format Texte)

Normalement tous les codes barre que je vais être amené à scanné seront similaire à celui la

Merci encore pour votre aide !!!

C'est top la vitesse à laquelle vous répondez 1000 mercis !!!

Maintenant j'ai un petit problème, le débogueur s'ouvre sur cette ligne :

    Cellule = Target.value 'La variable Cellule prend la valeur de la cellule saisie

La valeur de la cellule (celle du code barre) était 022018087039017. Est-ce possible que le fait qu'il y ait un 0 au début pose problème ? (Je sais que je suis obligé de mettre Shift Lock et la cellule au format Texte)

Normalement tous les codes barre que je vais être amené à scanné seront similaire à celui la

Merci encore pour votre aide !!!

J'ai déclaré en tant que string la variable Cellule et du coup cela fonctionne !!!!!!!

Maintenant j'ai un dernier bug (mais on y est presque !!!!!!) il faudrait que cela rafraîchisse la macro de la feuille 1 sinon elle ne s'exécute pas

Monsieur gg,

Méaculpa pour le type de variable de "Cellule" et bien joué à vous pour avoir trouver la solution !

Pour que la Private_Sub de la Feuil1 se lance, il faut indiquer que nous souhaitons réactiver les évènement un peu plus tôt dans notre procédure :

If Target.Column = 1 Then 'Si il y a une modification dans une cellule de la colonne 1 de la Feuil2, alors
    Cellule = Target.value 'La variable Cellule prend la valeur de la cellule saisie
    DernLigne = Sheets("Feuil1").Cells.SpecialCells(xlCellTypeLastCell).Row + 1 'On recherche la ligne disponible en colonne A de la Feuil1
    Application.EnableEvents = True 'On réactive les évenements pour raffraîchir la macro 1
    Sheets("Feuil1").Range("A" & DernLigne).value = "0" & Cellule 'On insère la valeur de la variable Cellule en Feuil1
End If 'Fin de mon SI

Par contre, quand je test la procédure, la macro de la Feuil1 me sors une erreur :<

Je te laisse regarder sa

Enfin, pour rajouter un "0" devant les codes barres que tu met dans ta Feuil2 on modifie l'une des lignes comme cela ;D

Sheets("Feuil1").Range("A" & DernLigne).value = "0" & Cellule

Sa c'est pour le cas où tu dois vraiment avoir tes codes barre qui commence par zéro

Voilà voilà, je reste à ta dispo !

Superrrrrr Merci !!!!!!!!!!!!!!!! Tout fonctionne !!

L'erreur venait du fait qu'il essayé de repositionner la sélection cellule sur la feuille 1 or il était sur la feuille 2 voila pourquoi le débogueur s'ouvrait !

Cells(CStr(TargetRow), 1).Select

Je vais voir pour intégrer tout cela au fichier principale maintenant

C'était top merci beaucoup pour l'aide en tout cas !

Je n'hésiterai pas à reposer des questions pour la suite !!!!

Super ^^

Oui n'hésite pas si tu a besoin ! On est là pour sa !

Bonjour Juice,

Je me permet de te poser une petite question. En effet, Je me suis rendu compte d'une chose à l'utilisation de mon fichier, si je supprime des lignes dans la feuille 1, la fonction vb inscrit à la suite comme si les lignes précédentes n'était pas entièrement vide.

Peux tu m'aider ?

Bonjour Monsieurgg !

Peux tu me rappeler ton problème s'il te plaît :0 ?

Le sujet m'est sortie de la tête x)

Et me dire vis-à-vis de ton problème :

  • Quelle action la génère ?
  • Quelle conséquence sur ton fichier tu a et que tu ne veux pas ?
  • Quelle macro est responsable de ton problème ?

Voilà !

Salut Juice,

Pas de problème c'est normal que tu ne te rappel pas

En faite toute la macro s'effectue bien mais si je retire (à la main) des lignes (par exemple parce que j'ai scanné 2 fois le même code barre),

il considère que la prochaine ligne est après celle qui sont supprimée (or ces lignes sont libres...). d'après moi c'est la variable qui est utilisé qui ne fait que s'incrémenté, il ne reprend pas à 0 la vérification des lignes vides.

Encore un grand merci pour toutes ces réponse rapide !!!

PS: De plus j'ai un petit soucis, en imaginant que sur la feuille 2 j'étire les cellules dans la colonne ou il lit les informations à transféré, il ne synchronise pas toutes les cellules (il n'en fait aucune en faite) J'imagine que le trigger n'est pas bon :s

Monsieurgg

J'ai corrigé les deux problèmes

Mais un nouveau est apparu sur lequel je ne peux rien faire, mais on en discutera plus tard.

La on a un autre problème, c'est que les macros déjà existante mette un message d'erreur à la moindre saisie, donc ma Boucle s'arrête à la première valeur.

Je te met en fichier joint, un fichier vierge dans lequel tu peux faire des saisie et faire défiler des valeurs en colonne A de la Feuil2

Essaye d'incrémenter ensuite cela à ton propre fichier, mais personnellement je n'y arrive pas avec l'autre macro :/

Restant à dispo

Rechercher des sujets similaires à "copier feuille"