XL 2016 macro copier coller avec condition

Bnj

XLDnaute Occasionnel
bonjour à tous

je suis une tare en VBA et j'ai une idée de macro mais n'ai pas les connaissances techniques pour la réalisation.
je sollicite donc votre aide.
Pourriez-vous m'aider à réaliser cela ?

valable pour toutes les lignes du tableau
j'aimerais que quand je clique sur ce bouton et si la cellule I2 est remplie
cela :
copie les cellules D2 et les colle en colonne W2
copie les cellules N2 ; et les colle en colonne D2
copie la cellule R2 et colle en cellule G2
suppression contenu cellule I2 ; J2;K2;M2;N2;Q2;R2;T2;U2


Ce serait super cool de votre part de m'aider et surtout de m'expliquer comment fonctionne cette macro afin que je puisse la comprendre et progresser.

Encore une fois, merci de votre attention et MERCI de votre aide (en PJ, un exemple de fichier)
 

Pièces jointes

  • jouer_plan_mut.xlsm
    15.1 KB · Affichages: 33

vgendron

XLDnaute Barbatruc
bonjour

un essai avec ce code à mettre dans un module standard et à affecter à ton bouton
VB:
Sub Mutations()
With ActiveSheet
    fin = .UsedRange.Rows.Count
    For i = 2 To fin
        If .Range("I" & i) <> "" Then
            .Range("W" & i) = .Range("D" & i)
            .Range("D" & i) = .Range("N" & i)
            .Range("G" & i) = .Range("R" & i)
            .Range("I" & i & ":K" & i).ClearContents
            .Range("M" & i & ":N" & i).ClearContents
            .Range("Q" & i & ":R" & i).ClearContents
            .Range("T" & i & ":U" & i).ClearContents
        End If
    Next i
End With
End Sub
Normalement. ca se comprend "intuitivement" avec la traduction Anglais -Francais.
dis moi s'il reste des lignes obscures :-D
 

Jauster

XLDnaute Occasionnel
fin est une variable a laquelle on attribue la valeur .UsedRange.Rows.Count soit les cellules utilisées dans une feuille active (d'où le With ActiveSheet juste avant). Ca permet ensuite de faire une boucle et parcourir non pas toutes les cellules du fichier mais uniquement les cellules utilisées
 

Lone-wolf

XLDnaute Barbatruc
Bonjour à tous

Faudrais s'avoir... en plus tu aurais dû le dire tout de suite, on est pas la pour s'amuser.

Remplace If .Range("I" & i) <> "" Then par If Date > Date(.Range("R" & i)) Then
Le reste du code

Oubien
If Date(.Range("R" & i)) > Date(.Range("I" & i)) Then
 

Bnj

XLDnaute Occasionnel
Bonjour à tous,

tout d'abord désolé de ce désagrément.

je vous embête encore un peu car les solutions approtées m'indiquent une erreur :
If .Range("I" & i) <> "" And Date > Date(.Range("R" & i)) Then

l'erreur proviendrait du . entre la parenthèse et Range.

J'ai essayé de le supprimé mais cela ne fonctionne pas
 

Jauster

XLDnaute Occasionnel
Hello,

Message supprimé pour ne pas influencer les autres vers une erreur. Mais ce que je ne comprends pas c'est pourquoi ce n'est pas utile ? Le SI ne doit s'appliquer que si i est vide, mais je ne vois pas comment on traite cette condition ? Si DATE de R > DATE de i peut être vrai aussi bien avec I vide que complété
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Bonjour à tous

Faudrais s'avoir... en plus tu aurais dû le dire tout de suite, on est pas la pour s'amuser.

Remplace If .Range("I" & i) <> "" Then par If Date > Date(.Range("R" & i)) Then
Le reste du code

Oubien
If Date(.Range("R" & i)) > Date(.Range("I" & i)) Then
@Lone-wolf
Y a comme un bug dans ton code, non ? ;)

Voir ce petit rappel ;)
VB:
Sub test()
MsgBox DateValue(Date + 1) 'j'achète !!!
MsgBox DateSerial(Year(Date), 1, 1)'j'achète!!!
'Msgbox Date(Range("A1"))'-<ERREUR!!!
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 730
Messages
2 081 981
Membres
101 855
dernier inscrit
alexis345