VBA : Copier/coller sur condition
Fermé
Camille
-
28 juin 2019 à 21:46
danielc0 Messages postés 1352 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 25 décembre 2024 - 12 août 2019 à 16:19
danielc0 Messages postés 1352 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 25 décembre 2024 - 12 août 2019 à 16:19
A voir également:
- VBA : Copier/coller sur condition
- Mkdir vba ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Autofill vba ✓ - Forum Excel
2 réponses
danielc0
Messages postés
1352
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
25 décembre 2024
155
29 juin 2019 à 10:43
29 juin 2019 à 10:43
Bonjour,
Essaie ces trois macros :
Pose des questions sur ce que tu ne comprends pas.
Cordialement.
Daniel
Essaie ces trois macros :
Sub Copie() Dim C As Range, Col As Integer 'trouve la colonne à utiliser Col = Cells(3, Columns.Count).End(xlToLeft).Column + 1 For Each C In Range("H3", Cells(Rows.Count, 8).End(xlUp)) 'Sélectionne la plage H3 à la dernière cellule remplie de la colonne H If C.Offset(, -4) = 0 Then Cells(C.Row, Col).Value = C.Value 'recopie valeurs ElseIf C.Offset(, -4) = 1 Then C.Copy Cells(C.Row, Col) 'collage standard End If Next C End Sub Sub RAZ() Dim C As Range For Each C In Range("H3", Cells(Rows.Count, 8).End(xlUp)) 'Sélectionne la plage H3 à la dernière cellule remplie de la colonne H If C.Offset(, -5) = 1 Then C.ClearContents 'efface la cellule End If Next C End Sub Sub MarcheArriere() Dim C As Range, Num As Variant, Col As Variant 'Saisie du numéro de projet Num = InputBox("Entrez le numéro de projet") If Num = "" Then Exit Sub Col = Application.Match("Projet " & Num, [2:2], 0) If Not IsNumeric(Col) Then MsgBox "Projet " & Num & " non trouvé" Exit Sub End If For Each C In Range("H3", Cells(Rows.Count, 8).End(xlUp)) 'Sélectionne la plage H3 à la dernière cellule remplie de la colonne H If C.Offset(, -5) = 1 Then C.Value = Cells(C.Row, Col).Value End If Next C End Sub
Pose des questions sur ce que tu ne comprends pas.
Cordialement.
Daniel
Bonjour Daniel, bonjour le forum,
Je revient sur ce topic parce que j'ai remarqué un petit problème sur une des macros.
Le code est le suivant :
Le problème c'est qu'il copie précisément le contenu de la formule donc le décalage ne prend pas.
Si je fais un retour en étude de la colonne N à la colonne H, les formules qui prenaient N garde N alors qu'elle devrait passer sur H comme les autres macros.
j'ai essayer de remplacer C.Value = Cells(C.Row, Col).Formula
par C.Copy
Cells(C.Row, Col).PasteSpecial xlPasteFormulas
Qui est utilisait dans les autres macros mais ça ne fonctionne pas.
Un idée ? :')
Je revient sur ce topic parce que j'ai remarqué un petit problème sur une des macros.
Le code est le suivant :
Sub Retour_en_etude()
Dim C As Range, Num As Variant, Col As Variant
Num = InputBox("Entrez le numéro de projet") 'Saisie du numéro de projet
If Num = "" Then Exit Sub
Col = Application.Match("Projet " & Num, [2:2], 0)
If Not IsNumeric(Col) Then
MsgBox "Projet " & Num & " non trouvé"
Exit Sub
End If
For Each C In Range("H3", Cells(Rows.Count, "H").End(xlUp)) 'Sélectionne la plage H3 à la dernière cellule remplie de la colonne H
If C.Offset(, -4) = 1 Then '"-4" est le décalage vers la gauche entre les colonnes H et D
C.Value = Cells(C.Row, Col).Formula
End If
Next C
End Sub
Le problème c'est qu'il copie précisément le contenu de la formule donc le décalage ne prend pas.
Si je fais un retour en étude de la colonne N à la colonne H, les formules qui prenaient N garde N alors qu'elle devrait passer sur H comme les autres macros.
j'ai essayer de remplacer C.Value = Cells(C.Row, Col).Formula
par C.Copy
Cells(C.Row, Col).PasteSpecial xlPasteFormulas
Qui est utilisait dans les autres macros mais ça ne fonctionne pas.
Un idée ? :')
danielc0
Messages postés
1352
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
25 décembre 2024
155
12 août 2019 à 14:31
12 août 2019 à 14:31
Bonjour,
Il faut que tu ouvres un nouveau fil de discussion avec le classeur actuel. Il y a eu beaucoup de modifications depuis le début. Si tu veux que je le suive, poste l'adresse du nouveau fil dans cette discussion.
Daniel
Il faut que tu ouvres un nouveau fil de discussion avec le classeur actuel. Il y a eu beaucoup de modifications depuis le début. Si tu veux que je le suive, poste l'adresse du nouveau fil dans cette discussion.
Daniel
Ca va être assez long pour moi de recréer un fichier exemple. :S
Toute les autres macro sont bonnes, y a que ce bout là C.Value = Cells(C.Row, Col).Formula
qu'il faudrait pouvoir modifier comme les autres macros
Par exemple une de tes autres macro ressemblait à ça
Toute les autres macro sont bonnes, y a que ce bout là C.Value = Cells(C.Row, Col).Formula
qu'il faudrait pouvoir modifier comme les autres macros
Par exemple une de tes autres macro ressemblait à ça
Sub Copie()
Dim C As Range, Col As Integer
Col = Cells(3, 9).End(xlToRight).Column + 1 '"9" est le numéro de la colonne J, j'aurais pu mettre "J"
If Col = Columns.Count + 1 Then Col = 11
For Each C In Range("H3", Cells(Rows.Count, "H").End(xlUp)) 'Sélectionne la plage H3 à la dernière cellule remplie de la colonne H
If C.Offset(, -3) = 0 Then '"-3" est le décalage vers la gauche entre les colonnes H et E
Cells(C.Row, Col).Value = C.Value 'recopie valeurs
ElseIf C.Offset(, -3) = 1 Then
C.Copy
Cells(C.Row, Col).PasteSpecial xlPasteFormulas 'collage spéciall formules
End If
Next C
End Sub
danielc0
Messages postés
1352
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
25 décembre 2024
155
>
Camille
12 août 2019 à 15:14
12 août 2019 à 15:14
J'ai retrouvé ce classeur. Est-ce que tu peux me donner un exemple ?
Daniel
Daniel
Par exemple, en K33 j'ai la formule =3000*(K24-1)
Quand j'active la macro et que je sélectionne la colonne K a reprendre, normalement toutes les lignes oû D=1 ça doit copier la formule (mais en gardant le déplacement actif) donc en H33 je devrait avoir =3000*(H24-1)
Alors qu'actuellement en H33 j'ai =3000*(K24-1) : la formule a été copiée a l'identique
Je sais pas si c'est plus clair ^^'
Quand j'active la macro et que je sélectionne la colonne K a reprendre, normalement toutes les lignes oû D=1 ça doit copier la formule (mais en gardant le déplacement actif) donc en H33 je devrait avoir =3000*(H24-1)
Alors qu'actuellement en H33 j'ai =3000*(K24-1) : la formule a été copiée a l'identique
Je sais pas si c'est plus clair ^^'
danielc0
Messages postés
1352
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
25 décembre 2024
155
>
Camille
12 août 2019 à 16:19
12 août 2019 à 16:19
Voici le classeur. Prends un exemple sur ce classeur :
https://mon-partage.fr/f/BG8r4dia/
https://mon-partage.fr/f/BG8r4dia/
Modifié le 29 juin 2019 à 12:48
Merci Daniel ! Merci merci !
T'as pas idée à quelle point ça me débloque !!
Je viens de tester ça sur mon fichier de test et tout marche niquel, c'est exactement ce que je voulais !
Je test ça sur mon fichier original et je reviens te dire si j'ai une galère.
Mille merci !!!! :O
29 juin 2019 à 13:47
Alors, j'ai essayé de l'adapter, et à part pour transformer le H3, le reste je n'ai pas compris comment faire.
J'ai tenté de modifier la lettre C par K mais ça n'a pas l'air de fonctionner.
Dans le fichier joint, j'ai mis les données à d'autre emplacement, comme ça je pourrais voir la différence et je devrais y arriver.
https://www.cjoint.com/c/IFDlUFvnNIA
29 juin 2019 à 17:26
29 juin 2019 à 17:52
Daniel
29 juin 2019 à 18:14
J'ai quelques petits "bugs", j'ai des données en colonne P et Q et on dirais que la macro (copie) cherche à coller dés que possible, tu sais comment je peux verrouille la première colonne à rechercher ?
R en premier puis les suivante si R est déjà remplie ?
Merci encore