Test sur cellule active et exécution d'instruction

Bonjour,

Après parcours de plusieurs forum, je me decide enfin de me lancer à la recherche du savoir.

Tout d'abord, je fais mes premiers pas dans ce langage aussi vaste et essaie tant bien que mal de m'en sortir.

Je réalise une macro pour mon travaill qui a pour fonction de:

- faire un test sur la cellule active:

- Si la cellule active appartient à la ligne x alors;

- colorer la colonne entière et les 20 premières lignes

- copier les cellules 8, 9, 10 de la colonne active et les coller soit dans la même feuille mais dans d'autres cellules, soit

dans une autre feuille

- sinon ne rien faire

Merci de bien vouloir me donner un coup de main et que je puisse enfin avancer dans mon travail.

Bonjour

A voir

Sub TesteCellule()
Dim X As Long

  X = 20

  ' on teste si la cellule active appartient à x
  If ActiveCell.Row = X Then
    ' On colorise les 20 premières lignes
    Rows("1:20").Interior.ColorIndex = 6
    ' On colorise la colonne de la cellule active
    Columns(ActiveCell.Column).Interior.ColorIndex = 4
    ' On copie les cellules 8, 9 et 10 de la colonne de la cellule active
    ' Dans une autre page
    Cells(8, ActiveCell.Column).Resize(3, 1).Copy Destination:=Sheets("Feuil2").Range("A1")
  End If
End Sub

Bonjour;

Merci encore de m'avoir répondu aussi vite. Je suis bien satisfait de l'aide et aimerais apporter quelques modifications à ma macro.

Tout d'abord, j'ai un peu retouché ma macro pour lui donner la forme que je veux et j'aimerai bien un peu d'aide dans la suite.

Voici ma nouvelle macro:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim X As Long

X = 2

' on teste si la cellule active appartient à x

If ActiveCell.Row = X Then

'On colore le ligne et la colonne de la cellule active

Cells.Interior.ColorIndex = xlNone

With ActiveCell

.EntireRow.Interior.ColorIndex = 35

.EntireColumn.Interior.ColorIndex = 35

End With

' On copie les cellules 11, 12 et 13 de la colonne de la cellule active

' Dans une autre page

Cells(11, ActiveCell.Column).Resize(3, 1).Copy Destination:=Sheets("Feuil2").Range("H11")

End If

End Sub

Deux choses:

Je voudrais pouvoir copier les cellules et leur contenu (cellules avec des valeurs issues de calcul) et les coller dans la meme feuille mais plus loin.

Une variante serait plutôt de colorer

- les 20 premières cellules de la colonne à partir de Activecell

- et les 20 premières cellules de la ligne active où se trouve Activecell.

Merci encore pour toute aide qui sera la bienvenue

Bonjour

Quand tu notes une macro utilises les balises Code (située en haut à gauche de la fenêtre d'édition du message)

A vérifier

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim X As Long

  X = 2
  ' on teste si la cellule active appartient à x
  If ActiveCell.Row = X Then
    Application.EnableEvents = False          ' Bloque les évènements
    ' On copie les cellules 11, 12 et 13 de la colonne de la cellule active
    ' Dans une autre page
    Cells(11, ActiveCell.Column).Resize(3, 1).Copy Destination:=Sheets("Feuil2").Range("H11")
    ' Dans la même page
    Cells(11, ActiveCell.Column).Resize(3, 1).Copy Range("H4")
    Application.EnableEvents = True         ' Rétablit les évènements
    ' On efface les couleurs
    Cells.Interior.ColorIndex = xlNone
    'On colore 20 cases à droite et en bas de la cellule active
    With ActiveCell
      .Resize(1, 20).Interior.ColorIndex = 35
      .Resize(20, 1).Interior.ColorIndex = 35
    End With
  End If
End Sub

Super le code fonctionne bien avec un souci qui est le suivant:

Les cellules copiées ne sont pas celles du tableau mais des formules qu'excell créee lui même.

Serait il possible d'avoir une ligne de code où ce sont les valeus seules qui sont copiées sans les formules?

Je pense aussi qu'il faut effacer le contenu des cellules d'arrivée au début du code.

J'ai essayé:

Range("H22").ClearContents (pour effacer les contenu des 4 cellules d'arrivée)

Mais je pense que cette syntaxe n'est pas bonne.

Merci encore de toute ta patience.

Bonjour

Pour copier juste les valeurs

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim X As Long
Dim Oldcel As Range

  X = 2
  ' on teste si la cellule active appartient à x
  If ActiveCell.Row = X Then

    Set Oldcel = ActiveCell
    With Application
      .ScreenUpdating = False         ' Evite les flash à l'écran
      .EnableEvents = False           ' Bloque les évènements
    End With
    ' On copie les cellules 11, 12 et 13 de la colonne de la cellule active
    Cells(11, ActiveCell.Column).Resize(3, 1).Copy
    ' Dans une autre page
    Sheets("Feuil2").Range("H22").PasteSpecial Paste:=xlPasteValues

    ' Dans la même page
    Range("H4").PasteSpecial Paste:=xlPasteValues

    ' On se replace sur la cellule active
    Oldcel.Select
    Application.EnableEvents = True         ' Rétablit les évènements

    ' On efface les couleurs
    Cells.Interior.ColorIndex = xlNone
    'On colore 20 cases à droite et en bas de la cellule active
    With ActiveCell
      .Resize(1, 20).Interior.ColorIndex = 35
      .Resize(20, 1).Interior.ColorIndex = 35
    End With
  End If
End Sub

Pour effacer

Range("H22").ClearContents

Effacera juste la cellule H22

  Range("H22:H24").ClearContents

Effacera les cellules H22, H23 et H24

Mais dans ton cas, pas besoin d'effacer, les nouvelles valeurs remplacent les anciennes

Tout content, je te dis merci pour ta patience et le résultat y est à 100%.

T'es génial.

A bientôt sur le site, je pense me mettre au VBA, tu m'as convaincu.

Merci mille fois.

Bonjour,

Une fois de plus, je reviens encore vers la source.

A la suite du code précédent, je dois effectuer quelques modifications. J'ai un énorme tableau excell à traiter, et je dois copier des cellules précises ves un autre tableau récapitulatif.

Ce que j'aimerai bien faire:

Lorsque je clique sur une colonne (par exemple B), je dois copier les cellules B12, B13, B16 et B17; (sans copier B14 et B15) et ensuite je dois les coller sur la même feuille dans d'autres cellules:

B12 --> W15

B13 --> W18

B17--> W17

B16 --> W16.

Mon deuxième problème est de pouvoir définir une plage de cellule d'une ligne donnée dans une variable c'est à dire:

X = ligne 2 : colonne 3 à 20.

Merci pour toute aide qui me sera précieuse.

Bonjour

Bonjour,

Voici un fichier test que je te joins.

Je n'ai pas joins la macro avec le fichier (PB sur mon ordi).

Ce que je voudrai:

- Que la macro ne s'exécute que si une cellule ( de 26 à 52) de la ligne 2 soit sélectionnée.

Sachant bien sûr que ce sont les valeurs de la colonne sélectionnée par la cellule de la ligne 2 (choisie) qui sont copiées:

- que l'ordre de copie dans le petit tableau des valeurs de consommation annuelle - total prévision - total physique- prévision-

soit respecté et fait sans modifier le grand tableau.

Merci encore.

68essai.xlsx (17.56 Ko)

Bonjour

A vérifier

Super le programme fonctionne à merveille et j'ai essayé de lui apporter une petite beauté.

Mais la commande : Cells.Interior.ColorIndex = xlNone

éfface toute les couleurs de ma page excell.

Il faudrait à chaque fois colorier la ligne et la colonne de la cellule active sans affecter les autre couleurs.

Voici une partie du code présent dans la page

Cells.Interior.ColorIndex = xlNone

'On colore 20 cases à droite et en bas de la cellule active

With ActiveCell

.Resize(20, 1).Interior.ColorIndex = 35

.EntireRow.Interior.ColorIndex = 35

Voilà ce que j'essaie mais rien ne se passe

.Resize(20, 1).Interior.ColorIndex = xlNone

.EntireRow.Interior.ColorIndex = xlNone

Merci pour ton aide.

Bonjour

Rolony a écrit :

Voilà ce que j'essaie mais rien ne se passe

.Resize(20, 1).Interior.ColorIndex = xlNone

.EntireRow.Interior.ColorIndex = xlNone

Rien ne passe cela veut dire quoi ?

Tu enlèves la couleur, s'il n'y avait pas de couleur avant normal que rien ne se passe

Il faut ton fichier, la macro et expliques ce que tu veux, je ne suis pas toi et ce que tu comprends moi je ne le comprend pas

Je te joins le fichier précédent sur lequel il y'a assez de couleurs sur la feuille.

L'objectif est celui -ci:

- Lorsque tu cliques sur une cellule de la ligne 2 (de la cellule C2 et AN2 ) alors:

toute cette plage de cellules (la ligne) prend une couleur quelconque

les 20 premières cellues en dessous de la cellules actives (colone) prennent une autre couleurs:

- Lorsque tu cliques ailleurs dans la plage de cellules, il faudrait que les couleurs existantes dans le tableau restent, et la même opération ci dessus se repète.

Le code de départ comprennait cette instruction : Cells.Interior.ColorIndex = xlNone; alors toutes les cellules s'éffacent.

Comment faire pour n'éffacer que celle qui sont colorier par l'activation de la cellule de la plage (C2 - AN2) ?

PS: fais marcher la macro et tu verras!

Bonjour

Solution ?

Super ça fonctionne,

Encore merci de ton aide.

Je reviendrai au besoin.

Rechercher des sujets similaires à "test active execution instruction"