Bonjour,
les contributions ne sont pas - en général - d'un niveau débutant, elles sont censées répondre à un certain niveau de complexité,
hormis parfois une astuce ou un raccourci, rien qu'en les consultant …
Elles doivent apporter une certaine utilité, je dirais même plus une utilité certaine !
En tant que débutant, mieux vaut présenter son code dans la section adéquate, Macros et VBA Excel, afin d'y obtenir aide & conseil.
Ceci dit, voici mes critiques quant au code :
- La variable var1 (explicite !) est définie en ligne n°3 mais pas les variables objet Range a, b & Plage …
- Ligne n°5 : et si la sélection comporte plusieurs cellules ? Dans l'énoncé il est pourtant question de la cellule active !
- Ligne n°6 peut être raccourcie en partant de l'objet a, mais en fait on peut se passer de cette ligne !
- Ligne n°7 inutile car la destination va être effacée par la copie et inversion de signe …
- Ligne n°9 : le message est à désirer car l'utilisateur n'a pas sélectionné de plage …
- Ligne n°11 : Goto à proscrire, à remplacer par Exit Sub, donc ligne n°18 inutile.
- Ligne n°12 inutile : pourquoi copier alors que les valeurs peuvent être calculées directement depuis la source !
- Ligne n°13 inutile : la destination étant déjà définie, la dupliquer ne sert qu'à consommer de la mémoire !
- Ligne n°15 : si la cellule source n'est pas une valeur numérique, cette ligne déclenche alors une erreur …
- Ligne n°15 & 16 : la variable var1 est inutile car la cellule de destination peut être directement calculée depuis la cellule source,
donc ligne n°3 plus utile !
Voici un exemple du code optimisé :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Sub CopieEtInverseSigne()
Dim Cel As Range, Plage As Range
Set Plage = Range(ActiveCell, ActiveCell.End(xlDown))
If MsgBox("Copier les cellules " & Plage.Address(0, 0) & " vers " & _
Plage.Offset(, 1).Address(0, 0) & " ?", vbYesNo, "Inverser signe") = vbNo Then Exit Sub
Application.ScreenUpdating = False
For Each Cel In Plage
Cel.Offset(, 1).Value = -Cel.Value
Next
Application.ScreenUpdating = True
Set Plage = Nothing
End Sub |
__________________________________________________________________________________________
Merci de cliquer sur
pour chaque message ayant aidé puis sur
pour clore cette discussion …
Partager