VBA - Copier/coller d'une ligne dont une cellule a été modifiée
Fermé
einahpets31
Messages postés
4
Date d'inscription
mercredi 12 avril 2017
Statut
Membre
Dernière intervention
12 avril 2017
-
12 avril 2017 à 10:09
einahpets31 Messages postés 4 Date d'inscription mercredi 12 avril 2017 Statut Membre Dernière intervention 12 avril 2017 - 12 avril 2017 à 17:34
einahpets31 Messages postés 4 Date d'inscription mercredi 12 avril 2017 Statut Membre Dernière intervention 12 avril 2017 - 12 avril 2017 à 17:34
A voir également:
- VBA - Copier/coller d'une ligne dont une cellule a été modifiée
- Aller à la ligne dans une cellule excel - Guide
- Comment copier une vidéo youtube - Guide
- Copier coller pdf - Guide
- Historique copier-coller android - Guide
- Style d'écriture a copier coller - Guide
1 réponse
thev
Messages postés
1931
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
5 janvier 2025
692
12 avril 2017 à 12:53
12 avril 2017 à 12:53
Bonjour,
Ce code devrait fonctionner
Ce code devrait fonctionner
--
Private Sub Worksheet_Change(ByVal Target As Range)
Dim keycells As Range, cell As Range
Set keycells = Columns("S")
If Not Intersect(Target, keycells) Is Nothing Then
If Target.Value = "Cancelled" Then
Set cell = Sheets("DG1 archives").Columns("A").Find(Null, SearchDirection:=xlPrevious)
Target.EntireRow.Resize(, keycells.Column - 1).Copy cell
Application.EnableEvents = False
Target.EntireRow.Delete
Application.EnableEvents = True
End If
End If
End Sub
12 avril 2017 à 15:33
La macro fonctionne dans le sens où :
- ça copie la ligne
- ça supprime la ligne de DG1 (c'est parfait!!)
Par contre, en "DG1 archives" la macro colle la ligne à partir de la ligne 37 et je n'ai rien d'autre sur cet onglet, je ne vois pas où ça va pas :-(
Modifié le 12 avril 2017 à 16:25
Les lignes 1 à 36 ont dû être utilisées. Supprime-les même si elles sont vides et enregistre à nouveau ton classeur.
Et pour ma compréhension, comment fonctionne la ligne suivante?
"Target.EntireRow.Resize(, keycells.Column - 1).Copy cell"
Target.EntireRow correspond à toute la ligne de la cellule où a été opéré le changement.
La méthode .Resize(nb_lignes, nb_colonnes) retaille le nombre de colonnes de cette ligne à keycells.Column - 1, (c'est à dire à 18) , le nombre de lignes n'étant pas modifié car non mentionné (donc égal à zéro par défaut).
Si par exemple, la ligne est égale à 3, Target.EntireRow.Resize(, keycells.Column - 1) correspond à Range("$A3:$R3").
"cell" correspond à la cellule de la colonne A relative à la première ligne non utilisée de la feuille. Ce n'est pas forcément la première cellule non utilisée de la colonne A si d'autres colonnes utilisent des lignes en dessous de cette cellule.
12 avril 2017 à 15:39
"Target.EntireRow.Resize(, keycells.Column - 1).Copy cell"
12 avril 2017 à 17:34