Macro applicable à une seule colonne

Résolu/Fermé
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 - Modifié par ButteDuLac le 16/11/2016 à 20:04
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 - 17 nov. 2016 à 00:10
Bonjour,

J'ai élaboré une macro pour déplacer des valeurs dans une feuille.

Voici le texte de la macro :

Sub test2()
'
' test2 Macro
'
Dim i As Integer

For i = 1 To 20

If Cells(i, 1).Value = "Oui" Then Cells(i, 1).Activate

ActiveCell.Offset(2, 1).Select
Selection.Copy
ActiveCell.Offset(-2, 2).Activate
ActiveSheet.Paste

Next i

Cells(1, 1).Activate
Application.CutCopyMode = False


End Sub


Quand je l'exécute, la macro défile ligne par ligne et colonne par colonne dans toute la feuille.

Compte tendu que j'aurai 6000 lignes (et non 20) à traiter, je souhaite que le défilement ne se fasse que dans la première colonne. Or, même si j'écris "cells(i, 1)", toutes les colonnes sont traitées.

J'ai essayé de trouver une méthode pour n'appliquer la macro qu'à la colonne A, mais n'ai rien trouvé de concluant.

Pire encore : je viens de constater que ma macro copie les valeurs de la cellule E3 dans la cellule G1, et ainsi de suite, ce qui n'est aucunement censé se produire.

Le but est que, pour chaque cellule de la colonne A où la valeur est = à "oui", la valeur contenue dans la cellule (2 lignes plus bas, 1 colonne à droite) se copie dans la cellule de la colonne D à la même ligne que la cellule en colonne A où se trouve la valeur "oui".

J'espère que c'est clair!!!

Pourriez-vous m'aider, svp.

A voir également:

1 réponse

yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
16 nov. 2016 à 20:30
Tu fais deux erreurs:
- les 4 instructions entre le if et le next sont toujours exécutées, elles ne sont pas contrôlées par le if
- il faut éviter d'utiliser select, activate, copy, paste dans des macros
Essaie ceci (non testé) :
For i = 1 To 20
    If Cells(i, 1).Value = "Oui" Then 
        Cells(i, 4) = cells(i+2,2)
    end if
Next i
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
Modifié par ButteDuLac le 16/11/2016 à 21:09
Merci!
Ça fonctionne!
Ma macro était du rapiéçage d'une macro créée manuellement (enregistrer macro) et d'informations trouvées en ligne...
Mais pourquoi il faut éviter les « select, activate, copy, paste » dans les macro?
C'est pourtant ce que le logiciel écrit automatiquement quand on enregistre une macro...
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
16 nov. 2016 à 21:20
Pourquoi éviter « select, activate, copy, paste » dans les macros : principalement parce que c'est source d'erreur et de confusion pour les humains qui gèrent le code VBA.
Pour le logiciel, cela ne pose pas de problème, sinon qu'il passe un peu de temps à faire du travail inutile, à changer ce qui est affiché.
Et tout l'art, c'est de profiter des macros enregistrées automatiquement pour en faire quelque chose de bien, :-)
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40 > yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024
17 nov. 2016 à 00:10
Merci également pour les informations a/s des actions/commandes à éviter en VBA. J'en prendrai bien note pour l'avenir!
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
16 nov. 2016 à 21:49
tu as compris pour le "if"?
il y a deux syntaxes possibles :
une seule instruction controlée par le if :
if condition then action

un ensemble d'instructions (0, 1, 2, ...) :
if condition then
  actions
end if

c'est plus prudent d'utiliser la deuxième syntaxe, c'est plus clair si on passe de une à plusieurs instructions...
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40 > yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024
17 nov. 2016 à 00:09
Merci, oui, en fait, plus tard, j'ai dû ajouter une action (car je vous ai soumis la macro avec des variables que j'avais à changer, n'ayant pas encore sous les yeux le fichier officiel, et finalement, il y avait deux actions à faire... j'ai donc déduis par moi-même qu'on pouvait soumettre un ensemble d'instructions.
Ce qui me manquait, c'était de simplifier le copy-paste, etc. en appelant simplement la valeur d'une cellule dans une autre cellule, comme on le fait simplement dans une feuille de calcul, mais je n'avais pas pensé le faire en VBA.
Vous avez sûrement constaté que je suis tout à fait novice en VBA!!!

Merci énormément!
0