Faire un test sur VBA

Fermé
9 - 9 févr. 2011 à 10:05
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 - 9 févr. 2011 à 14:46
Bonjour,

Je developpe un programme sous VBA excel . et jai besoin de savoir comment faire pour traduire ca sous VBA:
je fais une selection de cellules d'une meme collone (ex colonne 3)
mon souci est le suivant:
comment traduire
si la cellule (ex cell(2,3)) est selectionnné, je copie la cellule cell(2,9) sinon je descent a la ligne d'aprés et je regarde si la cellulle cell(3,3) est selectionné si oui ben rebelote je copie la cellule cell(3,9) sinon je descent encore a la ligne d'apres.

ET AINSI DE SUITE JUSQU4A CE QUE JE PARCOURs TOUTE MA SELECTION.


VOILA CE que j'ai fais:

For p = 2 To Selection.Count + 1
If Cells(p, 2).Select Then
Cells(p, 9).Select
Selection.Copy
Else: p = p + 1
end if
Next p


le probleme c que je lui dis si je selectionne la cellule(cells(P,2)) et non pas si la cellule(cells(P,2) est selectionné) donc ma condition est toujours verifié meme si ma cellule n'est pas slectionné dans la selection. en gros si je saute une ligne dans la colonne 2, il me copie toutes les lignes de la colonne 9.
ALORS QUE JE VE QU4IL ME COPIE QUE LES LIGNES OU LES CELLULES SONT SELECTIONNes.

svp aidez moi.


A voir également:

7 réponses

Bonjour,

copie ce code dans vba, feuille concernée par tes modifs :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 Then 'si la sélection se porte sur une cellule en colonne 3
Cells(Target.Row, 9) = Target.Value 'la cellule en colonne 9 sera égale à la cellule colonne 3
End If
End Sub

C'est caque tu veux?
0
Salut,

Deja je te remercie pour ta réponse.

le programme que tu me dis me mets la meme valeurs dans la cellule 3 et 9 alors que moi je ve juste quil me selectionne les cellules de la meme ligne en colonne 3 et 9 pour pouvoir les copier toutes les 2 dans une autre feuille.
Je sais pas si c clair.

Moi je penser a faire une petite astuce pour faire le test:
je colorie les cellules selectionnes , en gros ca donne:

For p = 2 To Selection.Count + 1
' Test: si la cellule de la selection est de couleur jaune => on selectionne la cellule de la même ligne dans une autre colonne
If Cells(p, 2).Interior.ColorIndex = 6 Then

Cells(p, 9).Select
Selection.Copy
' Sinon on passe a la ligne d'apres et on teste si la cellule est de couleur jaune
Else: p = p + 1
End if

THEORIQUEMENT CA MARCHE .
j'ai juste un message d'erreur sur: ActiveSheet.Paste, il me sort la methode paste de la classe Worksheet a echoué . et il me sort ce message que si je colorie ma cellule avec:
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With

vous auriez pas une idee d'ou ca pe venir?
0
Bonjour,

Oui, je sais pourquoi.
Si tu sélectionnes deux cellules qui ne sont pas à coté l'une de l'autre, tu ne peux pas les copier coller. il faut que tu fasses la première cellule puis la seconde.
Mais pas les deux en meme temps.

le plus simple, donne ton code entier car tu en donnes une partie et je peux pas vérifier mon hypothèse.
0
Voici tous le code:
il faut 2 FEUILLES : une qu'il faut nommé "Nomenclature 1", l'auttre qu'il faut nommé "Chiffrage Semaine".


Sub Macro2ESSAI()

' Déclaration de variables
'==========================
Dim p As Integer


'Supprimer toutes les cellues en dessous de la ligne 6
'=====================================================
Sheets("Chiffrage Semaine").Select
Range("A6:I3500").Select
Selection.EntireRow.Delete
Range("A6").Select
Sheets("Nomenclature 1").Select
Selection.Copy


'Colorier les sellules selectionnées pour pouvoir les reperer apres
'==================================================================
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With


'Copier les taches séléctionées
'============================================
Sheets("Chiffrage Semaine").Select
Range("A6").Select
ActiveSheet.Paste


'Copier le nombre d'heures des taches selectionnées
'=====================================================
Sheets("Nomenclature 1").Select

For p = 2 To Selection.Count + 1
' Test: si la cellule de la selection est de couleur jaune => on selectionne la cellule de la même ligne dans une autre colonne
If Cells(p, 2).Interior.ColorIndex = 6 Then
Cells(p, 9).Select
Selection.Copy
' Sinon on passe a la ligne d'apres et on teste si la cellule est de couleur jaune
Else: p = p + 1
Sheets("Nomenclature 1").Cells(p, 9).Copy Sheets("Chiffrage Semaine").Cells(p + 4, 4)
End If
Next p


'Enlever la couleur mise pour reperer la cellule
'===============================================
Selection.Interior.ColorIndex = xlNone


End Sub


Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
9 févr. 2011 à 13:53
Bonjour,

tu vois avec ton code, je sais pouruqoi ca ne marche pas.
Tu lui dis de copier puis de changer le format puis de coller.
Ca va pas. j'ai modifié ton code regardes si ca va mieux et si ca correspond à tes attentes.

'Supprimer toutes les cellues en dessous de la ligne 6
'=====================================================
Sheets("Chiffrage Semaine").Select
Range("A6:I3500").Select
Selection.EntireRow.Delete
Range("A6").Select
Sheets("Nomenclature 1").Select
Selection.Copy

'Copier les taches séléctionées
'============================================
Sheets("Chiffrage Semaine").Select
Range("A6").Select
ActiveSheet.Paste


'Colorier les sellules selectionnées pour pouvoir les reperer apres
'==================================================================
sheets("Nomenclature 1").select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With




'Copier le nombre d'heures des taches selectionnées
'=====================================================

For p = 2 To Selection.Count + 1
' Test: si la cellule de la selection est de couleur jaune => on selectionne la cellule de la même ligne dans une autre colonne
If Cells(p, 2).Interior.ColorIndex = 6 Then
Cells(p, 9).Select
Selection.Copy
' Sinon on passe a la ligne d'apres et on teste si la cellule est de couleur jaune
Else: p = p + 1
Sheets("Nomenclature 1").Cells(p, 9).Copy Sheets("Chiffrage Semaine").Cells(p + 4, 4)
End If
Next p


'Enlever la couleur mise pour reperer la cellule
'===============================================
Selection.Interior.ColorIndex = xlNone
0
salut,

T'as raison, j'ai compris l'erreur et c corrigé. Un grand merci a toi.
Sinn j'aurais une derniere question:
je fais comment pour selectionner la derniere ligne de ma selection?
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
9 févr. 2011 à 14:46
Après Next p

et avant ton end sub

tu mets :
rows(p).select

si c'est au début de ta macro :
Sheets("Chiffrage Semaine").Select
p=6
do while cells(p,1)<>""
p=p+1
loop
rows(p).select
0