EXCEL - Copier et coller une ligne en fonction d'une cellule.
Fermé
-Polito-
Messages postés
3
Date d'inscription
lundi 11 juillet 2016
Statut
Membre
Dernière intervention
19 juillet 2016
-
11 juil. 2016 à 11:28
-Polito- Messages postés 3 Date d'inscription lundi 11 juillet 2016 Statut Membre Dernière intervention 19 juillet 2016 - 19 juil. 2016 à 12:21
-Polito- Messages postés 3 Date d'inscription lundi 11 juillet 2016 Statut Membre Dernière intervention 19 juillet 2016 - 19 juil. 2016 à 12:21
A voir également:
- EXCEL - Copier et coller une ligne en fonction d'une cellule.
- Aller à la ligne dans une cellule excel - Guide
- Fonction si et - Guide
- Copier une vidéo youtube - Guide
- Excel cellule couleur si condition texte - Guide
- Déplacer une colonne excel - Guide
1 réponse
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 750
Modifié par pijaku le 13/07/2016 à 11:32
Modifié par pijaku le 13/07/2016 à 11:32
Bonjour,
Ton idée est bonne mais fortement incomplète.
Il faut également penser aux cas suivants :
> suppression d'une ligne de la feuille devis par remise à 0 d'une des lignes des autres feuilles
> modification d'une quantité.
Le code ci-dessous tient compte de cela.
Pour insérer le code dans ton classeur :
> Alt+F11 (>affichage fenêtre VBE)
> Double clic dans la fenêtre VBA-Project sur ThisWorkbook
> Copier/Coller le code ci-dessous dans la fenêtre centrale.
> Adapter le nom de la feuille. Ici : Const ShDEVIS As String = "Devis"
> fermer VBE et tester.
Ci-joint un fichier exemple
Les suppressions de quantité devront être faites une par une pour supprimer dans la feuille devis la(es) ligne(s) correspondante(s).
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Ton idée est bonne mais fortement incomplète.
Il faut également penser aux cas suivants :
> suppression d'une ligne de la feuille devis par remise à 0 d'une des lignes des autres feuilles
> modification d'une quantité.
Le code ci-dessous tient compte de cela.
Pour insérer le code dans ton classeur :
> Alt+F11 (>affichage fenêtre VBE)
> Double clic dans la fenêtre VBA-Project sur ThisWorkbook
> Copier/Coller le code ci-dessous dans la fenêtre centrale.
> Adapter le nom de la feuille. Ici : Const ShDEVIS As String = "Devis"
> fermer VBE et tester.
Option Explicit Dim Ligne As Integer Dim Trouve As Range Const ShDEVIS As String = "Devis" ' ADAPTER : le nom EXACT de la feuille devis Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = ShDEVIS Or Target.Column <> 1 Or Target.Cells.Count > 1 Then Exit Sub Select Case Target.Value Case Is >= 1 Call AddToDevis(Target.Resize(1, 4)) Case "" Call DeleteToDevis(Target.Resize(1, 4)) Case Else MsgBox "Ne devrait jamais se produire" End Select End Sub Private Sub AddToDevis(Rng As Range) With Sheets(ShDEVIS) Set Trouve = .Columns(2).Cells.Find(Rng.Cells(1, 2)) If Not Trouve Is Nothing Then Ligne = Trouve.Row Else Ligne = IIf(.Range("A41") = "", 41, .Range("A40").End(xlDown).Row + 1) End If .Range("A" & Ligne & ":D" & Ligne).Value = Rng.Value End With End Sub Private Sub DeleteToDevis(Rng As Range) With Sheets(ShDEVIS) Set Trouve = .Columns(2).Cells.Find(Rng.Cells(1, 2)) If Not Trouve Is Nothing Then Ligne = Trouve.Row Else Exit Sub End If .Rows(Ligne).Delete Ligne = IIf(.Range("A41") = "", 41, .Range("A" & Ligne).End(xlDown).Row + 1) .Rows(Ligne).Insert Shift:=xlDown End With End Sub
Ci-joint un fichier exemple
Les suppressions de quantité devront être faites une par une pour supprimer dans la feuille devis la(es) ligne(s) correspondante(s).
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Modifié par -Polito- le 13/07/2016 à 17:01
Je te remercie infiniment pour ton aide, tu me sors d'une impasse monstrueuse ! Je file l'appliquer !
Je souhaiterai savoir si possible quelles sont les données à modifier si jamais je souhaite ajouter de nouvelles cellules à la sélection. (Exemple E1, F1, etc...)
Encore une fois, merci.
Polito
Modifié par pijaku le 13/07/2016 à 21:27
Les lignes de code à modifier, dans ce cas, sont indiquées par un commentaire : A MODIFIER AU CAS OU :
Tout d'abord :
Target est forcément une cellule unique de la colonne A de la feuille active.
Pourquoi?
Parce qu'on a fait ces 2 tests préalablement :
C'est à dire : si la colonne n'est pas la première ou si on a sélectionné plus d'une cellule alors ...on sort de la procédure et on ne fait rien.
Donc Target est une cellule de la colonne A.
sert à redimensionner notre Range. Ici on le redimensionne sur une ligne et quatre colonnes : .
Si l'on considère partir de la colonne A, Resize 1 ligne 4 colonnes, va nous donner un Range de la colonne A à la colonne ....... D !
Par exemple : équivaut à , au même titre que équivaut à : .
Ok?
Donc, Si tu veux copier/coller tes données des colonnes A à F plutôt que de A à D, remplace :
par :
Tout simplement.
Je te laisse deviner ce que tu dois faire de cette ligne :
A mon avis tu devrais trouver par quoi remplacer : ":D" si tu copie/colle jusqu'à F.......
Par contre, qu'elles que soient les modifications, il faut que le nom des "produits" reste en colonne B.
Sinon, il conviendra de modifier les lignes :
deviendrait par exemple si les noms de tes objets étaient en colonne D plutôt qu'en B...
Idem pour qui deviendrait dans un tel cas.
C'est bon?
19 juil. 2016 à 12:21
Pardon de répondre si tardivement. Encore une fois, merci pour ton aide et tes explications on ne peut plus précises, mon problème semble réglé !
Bonne continuation,
Polito