Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 VBA copier des lignes dans une autre feuille

Testigo

XLDnaute Nouveau
Bonjour,

Je souhaite utiliser VBA pour pouvoir copier une ligne d’une feuille sur une autre lorsque les colonnes A, B et C de celle-ci sont remplies. Dans l’idéal, il faudrait que cette ligne soit supprimée de la première feuille, que les autres lignes remontent et que les lignes se copient à la suite sur la 2ème feuille. Les lignes qui m’intéressent commencent à la ligne n°7


Pour résumer :

-SI A, B et C non vides (à partir de la ligne 7) alors on copie colle la ligne sur la 2ème feuille

-on supprime la ligne de la 1ère feuille

-on fait remonter les autres lignes

-Les lignes se copient les une à la suite des autres sur la 2ème feuille.

Ci joint la feuille en question!

Merci par avance pour votre aide!
 

Pièces jointes

  • VBA.xlsx
    21.7 KB · Affichages: 24

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Testigo

Testigo
Pré-requis: par commodité d'usage, j'ai dé fusionné les cellules.
Code à mettre dans le code de la feuille : à valider
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim t
If Target.Row <= 6 Then Exit Sub
If Target.Column = 3 Then
If Application.CountA(Cells(Target.Row, 1).Resize(, 3)) = 3 Then
t = Cells(Target.Row, 1).Resize(, 14).Value
Target.EntireRow.Delete
Feuil2.Cells(Rows.Count, 1).End(3)(2).Resize(UBound(t, 1), UBound(t, 2)) = t
End If
End If
End Sub
PS: test OK sur ton fichier exemple
 

Testigo

XLDnaute Nouveau
Bonsoir Staple1600,

Merci pour ta réponse rapide!

Je dois t'avouer que je n'ai absolument pas compris ton programme...
Et comment est-ce qu'on le met dans le code de la feuille exactement? J'ai essayé mais apparemment je n'ai pas la bonne méthode, je n'arrive pas à le faire fonctionner. (Je viens de découvrir VBA, je n'y connais vraiment pas grand chose...)
 

Staple1600

XLDnaute Barbatruc
Re

1) Tu dois dé fusionner les cellules sur les deux feuilles
2) Clic-droit sur l'onglet [à valider] => Visualiser le code
3) Dans le grand rectangle blanc qui apparaît, tu copies/colles mon code VBA
4) ALT+F11 (pour revenir sur la feuille)
5) Sur la feuille [à valider] , tu saisis une valeur en A7 puis en B7 et enfin C7 puis ENTER
Va voir alors sur la feuille [validé], la copie aura été effectuée.
 

job75

XLDnaute Barbatruc
Bonsoir Testigo, bienvenue sur XLD, salut JM,

Autre solution, placez dans le code de la 1ère feuille (clic droit sur l'onglet et visualiser le code) :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row < 7 Then Exit Sub
Dim F As Worksheet, c As Range
Set F = Feuil2 'CodeName de la feuille de destination
Cancel = True
With Target.EntireRow
    Set c = .Rows(1).Resize(, 3).Find("", .Cells(1, 3), xlValues)
    If Not c Is Nothing Then MsgBox "Renseignez la cellule " & c.Address(0, 0): Exit Sub
    .Copy F.[A:A].Find("", F.[A6])
    .Delete
End With
End Sub
La macro s'exécute automatiquement quand on double-clique sur une ligne.

Les cellules fusionnées ne posent aucun problème.

A+
 
Dernière édition:

Jacky67

XLDnaute Barbatruc
Bonjour à tous
Autre proposition par un bouton qui traite toute la feuille
 

Pièces jointes

  • VBA.xlsm
    30.7 KB · Affichages: 28

Testigo

XLDnaute Nouveau
Merci à tous les deux pour vos réponses! J'ai testé ça fonctionne parfaitement!
Dernière petite question, sous quel format faut-il sauvegarder le fichier pour garder la macro enregistrée? (il me semble que c'est classeur excel prenant en charge les macros)

Encore merci et bonne journée !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…