Macro applicable à une seule colonne
Résolu
ButteDuLac
Messages postés
495
Date d'inscription
Statut
Membre
Dernière intervention
-
ButteDuLac Messages postés 495 Date d'inscription Statut Membre Dernière intervention -
ButteDuLac Messages postés 495 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai élaboré une macro pour déplacer des valeurs dans une feuille.
Voici le texte de la macro :
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.
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:
- Macro applicable à une seule colonne
- Déplacer une colonne excel - Guide
- Trier une colonne excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Colonne word - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
1 réponse
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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é) :
- 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
Ç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...
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, :-)
il y a deux syntaxes possibles :
une seule instruction controlée par le if :
un ensemble d'instructions (0, 1, 2, ...) :
c'est plus prudent d'utiliser la deuxième syntaxe, c'est plus clair si on passe de une à plusieurs 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!