XL 2016 macro copier coller avec condition

Bnj

XLDnaute Junior
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)
 

Fichiers joints

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
 

Bnj

XLDnaute Junior
MERCI beaucoup !

ça doit être pour cela que je ne comprend rien en VBA ! je suis une tare en anglais
peux tu m'expliquer la ligne fin= ... ?
 

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
 

Bnj

XLDnaute Junior
bonjour

merci pour ces explications

comment adapter ce code pour que cette macro s'éxécute que si la date comprise dans la colonne R est dépassée ?
 

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 Junior
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
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Bnj, jauster, le Forum :)

.Range("I" & i) <> "" n'est pas utile. Lit comme il faut ce que j'ai écrit au post #6.
 

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
 

Jauster

XLDnaute Occasionnel
@Jauster

<> "" n'a rien à voir avec la condition demandée.
Effectivement, si le que de "cette macro s'éxécute que si la date comprise dans la colonne R est dépassée ?" exclu la première demande "j'aimerais que quand je clique sur ce bouton et si la cellule I2 est remplie cela :"

@Bnj où en est la macro ?
 

Bnj

XLDnaute Junior
Hello tout le monde

je vais tester la macro cet après midi et revient vers vous au plus vite , en tout cas, un gros merci pour votre implication sur ma requête
 

Discussions similaires


Haut Bas