Menu

VBA : Copier/coller sur condition

- - Dernière réponse : danielc0
Messages postés
588
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
20 juillet 2019
- 15 juil. 2019 à 09:37
Bonjour à tous,

J'en apprend tous les jours sur les macros mais mes compétences ne me permettent toujours pas de faire des choses simples par moi-même. :'(

Je vous explique (CF fichier joint https://www.cjoint.com/c/IFCs1XuhzZA ), j'ai trois petits besoins pour faire de la comparaison de projets :

1 - Je renseigne les données d'un projet dans la colonne H, en étude, une fois que j'ai terminé l'étude, je souhaite pouvoir la déplacer dans étudié (soit à la suite, soit on me demande à quelle position). Pour ce faire, je ne peux pas simplement copier coller toutes les cellules. Certaines ont besoin d'être copié en valeur, pour casser les formules; d'autres ont besoin de reprendre les formules. Pour cela je pensais dédier une colonne, ici la D pour dire de comment la cellule doit se copier.

2 - Ensuite j'aimerais pouvoir faire un RAZ de certaines cellules pour renseigner une nouvelle étude. De la même façon je pourrais avoir une colonne, ici la C pour dire quelles cellules vont voir leur contenu effacer.

3 - Je souhaite pouvoir faire marche arrière et ramener les données d'un projet étudié dans la colonne en étude. Les cellules à ramener sont les mêmes que celles qui sont à RAZ donc on peut se servir de la même colonne comme indicateur. Pour ça je pensais soit avoir un bouton devant chaque projets étudiés que je copie/colle en modifiant la colonne à copier, soit après avoir cliquer sur un bouton, on me demande quel projet je souhaite ramener.

Je précise que j'ai pour l'instant 180 lignes. Si vous avez d'autres idées de structure ou de façon de faire, je suis preneur ^^

Voilà

Ca fait un peu de texte mais au moins ça devrait être clair !
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
588
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
20 juillet 2019
42
2
Merci
Bonjour,
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

Dire « Merci » 2

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 54881 internautes nous ont dit merci ce mois-ci

danielc0
Messages postés
588
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
20 juillet 2019
42 > Camille -
Bonjour, Camille,

Ton lien conduit à une autre discussion, pas à un fichier. Je ne connais pas le collage sans mise en forme. Il y a un collage "tout sauf les bordures", un collage valeurs ou un collage formules. Précise ce que tu veux.

Daniel
En fait mon lien date d'il y a une semaine, il n'a rien à voir avec mon besoin d'aujourd'hui ^^

Sur ma colonne H, projet en étude, j'ai des bordure spéciale, en rouge, pour bien identifié que c'est ici que je dois renseigné le projet en étude. Quand je fais mon RAZ,, la copie ou le retour en étude, avec un copie normal ça viens modifier mes bordure et ça je veux pas.

Je voudrais que la bordure ne se copie pas ou qu'aucune mise en forme ne se copie
danielc0
Messages postés
588
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
20 juillet 2019
42 > Camille -
Essaie comme ceci :

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).pastespecal xlPasteFormulas 'collage spéciall formules
End If
Next C
End Sub
Sub RAZ()
Dim C As Range, Col As Integer
Range(Cells(3, "AS"), Cells(Rows.Count, "AS").End(xlUp)).Copy 'pour supprimer a financer avant
Range("H3").pastespecal xlPasteFormulas 'collage spéciall formules
End Sub


Daniel
> danielc0
Messages postés
588
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
20 juillet 2019
-
Ah beh oui tout simplement !

PAr contre j'ai essayé de le mettre sur retour en etude mais ça ne fonctionne pas x'(

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).PasteSpecial xlPasteFormulas
End If
Next C
End Sub


Je suis vraiment pas douée ^^'
danielc0
Messages postés
588
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
20 juillet 2019
42 > Camille -
Remplace :
C.Value = Cells(C.Row, Col).PasteSpecial xlPasteFormulas

par :
C.Copy
Cells(C.Row, Col).PasteSpecial xlPasteFormulas

Daniel
Commenter la réponse de danielc0