OVH Cloud OVH Cloud

récuperer les lignes d'une selection

15 réponses
Avatar
GA
Bonjour à tous,
suite à une sélection dans un refedit, je voudrais récupérer les numéros
de lignes sélectionnés et seulement les lignes car j'envoie ensuite dans
une colonne différente dans une autre feuille avec un test sur le titre:

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
Sheets("Feuil2").Select
'Et la je voudrais retrouver le numéro de la première ligne sélectionnée
pour copier la sélection au même endroit (les tableaux étant identiques
pour les lignes).
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next
End Sub

Quelle(s) instruction(s) pour réaliser ceci ?

Merci de votre aide

Cordialement

Ga

5 réponses

1 2
Avatar
GA
Merci beaucoup pour ta réponse,

j'ai remplacé la ligne=range(Refedit.value).rows(1).row
par:ligne=range(plage).rows(1).row pour retrouver la sélection car
refedit.value ne ramenait rien.
mais j'ai encore une erreur :"incompatibilité de type" sur la ligne:
.paste .cells(ligne,col).

(deux précisions: le bouton qui me lance l'userform3 et la sélection
sont sur la feuil1. Et après les tests cela sera sur un autre classeur
et c'est toute la sélection que je veux copier à partir du N° de ligne
trouvé.)

Merci mille fois de m'aider à me sortir de là.
Il ne me manque que çà pour finir mon projet...

Cordialement

Ga


bon,

je ne pense pas qu'il soit trsè judicieux de déclarer ligne comme string .
On suppose que tu as pu récupérer ta plage de ton refedit et que
celle-ci s'appelle "Feuil2!$A1:$A1000" donc ton Refedit.value est ègal à
"Feuil2!$A1:$A1000". tu récupères le N° de la ligne en écrivant
ligne=range(Refedit.value).rows(1).row puis tu écris ta procédure (
attention, c'est telle que je l'ai comprise mais je peux me tromper)

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ligne=range(Refedit.value).rows(1).row
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
with Sheets("Feuil2")
.paste .cells(ligne,col)
end with

Application.CutCopyMode = False

End If

Next
End Sub

A+


Merci pour la démo.
j'ai déclaré ligne as string
et ligne=Range(plage).rows(1).row
je retrouve bien le N° de la 1ere ligne de la sélection mais après je
n'arrive pas à formaliser la syntaxe pour la copie.. Ou Peut-être
est-ce la ligne range(plage).copy qui n'est pas bonne...
comment écrire la ligne de sélection avant ActiveSheet.Paste ? car en
fait je récupére le N° de la ligne mais il faut que je sélectionne
cette ligne pour copier..du genre:"Range(ligne,col).select" ?? Et là
je sèche lamentablement..

Merci de m'aider

Cordialement

Ga


re,

je te donne un exemple pour te mettre sur la voie.

ici tutu et la déclaration de la variable publique sont dans un
module standard et Userform1 comporte un Refedit

Public plagecellrefedit As String
Sub tutu()

'chargement d'un userform et sélection de l'ensemble des
'cellules de current region.

'la variable plagecellrefedit recoit dans le userform l'affectation
'plagecellrefedit = UserForm1.RefEdit1.Value par exemple lors du
'click sur un Commandbutton qui valide les saisies dans le userform


With UserForm1
.RefEdit1.Text = ActiveCell.CurrentRegion.Address
.RefEdit1.SetFocus
.StartUpPosition = 3
.Show
End With
Unload UserForm1 'on décharge le userform (i.e , il n'est plus en
'mémoire)
MsgBox Range(plagecellrefedit).Rows(1).Row (ici on obtient le N° de
'ligne correspondant à la 1ere ligne de la sélection effectuée avec
le 'RefEdit et ce quelque soit la feuille sur laquelle ont été
'sélectionnées les cellules)
End Sub

A+


Bonsoir,

Refedit me renvoi bien la plage sélectionnée.
Lorsque je pointe le curseur sur la ligne de ma macro:
Range(plage).Copy
cela m'indique bien la sélection:"Feuil1!$B$12:$B$20" que j'effectue
avec la souris. (Je vois bien cette sélection dans le refedit).

Où est mon erreur ?
un problème de positionnement de la ligne de commande ?
je l'ai insérée à la place du commentaire 'Et la je... etc..

Cordialement

Ga



m'excuse mais ca marche très bien, si la plage est définie
correctement.As tu essayé de voir ce que te renvoyais exactement
refedit ?

A+




Merci pour la réponse
mais j'ai une erreur 438: "Propriété ou méthode non gérée par cet
objet"

Cordialement

Ga


bonjour,

Range(plage).rows(1).row devrait te le permettre.

A+



Bonjour à tous,
suite à une sélection dans un refedit, je voudrais récupérer les
numéros de lignes sélectionnés et seulement les lignes car
j'envoie ensuite dans une colonne différente dans une autre
feuille avec un test sur le titre:

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
Sheets("Feuil2").Select
'Et la je voudrais retrouver le numéro de la première ligne
sélectionnée pour copier la sélection au même endroit (les
tableaux étant identiques pour les lignes).
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next
End Sub

Quelle(s) instruction(s) pour réaliser ceci ?

Merci de votre aide

Cordialement

Ga

















Avatar
anonymousA
re,

écoute puisque décidément, il est difficile d'y arriver, je me suis fait un
exemple pour recréer autant que possible les conditions de ta procédure.
Voici les hypothèses que j'ai prises. Je me suis crée un Userform ( appelé
Userform1) sur lequel je n'ai que deux controles ( un RefEdfit appelé
RefEdit1 et un COmmandbutton appelé CommandButton1). Sur la feuille 1 , j'ai
un CommandButton1. En cells(1,2) de la feuille 1, j'ai mis la valeur 3 et en
Range("B3:D3") de la feuille2 , j'ai mis 2 , 3 et 4.
sur la feuille1, j'ai mis des infos dans les cellules du range("A6:B7").

Les procédures associées sont les suivantes:

1) Pour le commandbutton1 de la feuille 1
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

2)Pour le userform
2.a) pour le Refedit: aucune instruction
2.b)pour le CommandButton1
Private Sub CommandButton1_Click()
Me.Hide
Copie_sur_Synthese
Unload me
End sub

3)Dans un module standard ta procédure
Sub Copie_sur_Synthese()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm1.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ligne = Range(plage).Rows(1).Row

ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
With Sheets("Feuil2")
.Paste .Cells(ligne, col)
End With
Application.CutCopyMode = False

End If

Next
End Sub


Lorsque je lance la procédure par click sur le commanbutton de la feuill1,
avec le refedit, je choisis la plage A6:B7 de la feuille1 puis, je clique sur
le Commandbutton du Userform et ensuite c'est fini, sans jamais se planter
(que j'écrive d'ailleurs ligne = Range(plage).Rows(1).Row ou ligne =
Range(userform1.RefEdit.value).Rows(1).Row , ce qui est bien normal puisque
tant que le refedit est ouvert c'est formellement la même chose).

Les données du range A6:B7 sont bien copiées en feuille 2 à partir de la
ligne 6 sur la colonne C puisque c'est celle qui contient la valeur de
Coltitre soit celle de cells(1,2) de feuille1 qui dans mon exemple vaut 3.

Là , vraiement je suis au bout de mes possibilités d'aide.

A+



Merci beaucoup pour ta réponse,

j'ai remplacé la ligne=range(Refedit.value).rows(1).row
par:ligne=range(plage).rows(1).row pour retrouver la sélection car
refedit.value ne ramenait rien.
mais j'ai encore une erreur :"incompatibilité de type" sur la ligne:
.paste .cells(ligne,col).

(deux précisions: le bouton qui me lance l'userform3 et la sélection
sont sur la feuil1. Et après les tests cela sera sur un autre classeur
et c'est toute la sélection que je veux copier à partir du N° de ligne
trouvé.)

Merci mille fois de m'aider à me sortir de là.
Il ne me manque que çà pour finir mon projet...

Cordialement

Ga


bon,

je ne pense pas qu'il soit trsè judicieux de déclarer ligne comme string .
On suppose que tu as pu récupérer ta plage de ton refedit et que
celle-ci s'appelle "Feuil2!$A1:$A1000" donc ton Refedit.value est ègal à
"Feuil2!$A1:$A1000". tu récupères le N° de la ligne en écrivant
ligne=range(Refedit.value).rows(1).row puis tu écris ta procédure (
attention, c'est telle que je l'ai comprise mais je peux me tromper)

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ligne=range(Refedit.value).rows(1).row
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
with Sheets("Feuil2")
.paste .cells(ligne,col)
end with

Application.CutCopyMode = False

End If

Next
End Sub

A+


Merci pour la démo.
j'ai déclaré ligne as string
et ligne=Range(plage).rows(1).row
je retrouve bien le N° de la 1ere ligne de la sélection mais après je
n'arrive pas à formaliser la syntaxe pour la copie.. Ou Peut-être
est-ce la ligne range(plage).copy qui n'est pas bonne...
comment écrire la ligne de sélection avant ActiveSheet.Paste ? car en
fait je récupére le N° de la ligne mais il faut que je sélectionne
cette ligne pour copier..du genre:"Range(ligne,col).select" ?? Et là
je sèche lamentablement..

Merci de m'aider

Cordialement

Ga


re,

je te donne un exemple pour te mettre sur la voie.

ici tutu et la déclaration de la variable publique sont dans un
module standard et Userform1 comporte un Refedit

Public plagecellrefedit As String
Sub tutu()

'chargement d'un userform et sélection de l'ensemble des
'cellules de current region.

'la variable plagecellrefedit recoit dans le userform l'affectation
'plagecellrefedit = UserForm1.RefEdit1.Value par exemple lors du
'click sur un Commandbutton qui valide les saisies dans le userform


With UserForm1
.RefEdit1.Text = ActiveCell.CurrentRegion.Address
.RefEdit1.SetFocus
.StartUpPosition = 3
.Show
End With
Unload UserForm1 'on décharge le userform (i.e , il n'est plus en
'mémoire)
MsgBox Range(plagecellrefedit).Rows(1).Row (ici on obtient le N° de
'ligne correspondant à la 1ere ligne de la sélection effectuée avec
le 'RefEdit et ce quelque soit la feuille sur laquelle ont été
'sélectionnées les cellules)
End Sub

A+


Bonsoir,

Refedit me renvoi bien la plage sélectionnée.
Lorsque je pointe le curseur sur la ligne de ma macro:
Range(plage).Copy
cela m'indique bien la sélection:"Feuil1!$B$12:$B$20" que j'effectue
avec la souris. (Je vois bien cette sélection dans le refedit).

Où est mon erreur ?
un problème de positionnement de la ligne de commande ?
je l'ai insérée à la place du commentaire 'Et la je... etc..

Cordialement

Ga



m'excuse mais ca marche très bien, si la plage est définie
correctement.As tu essayé de voir ce que te renvoyais exactement
refedit ?

A+




Merci pour la réponse
mais j'ai une erreur 438: "Propriété ou méthode non gérée par cet
objet"

Cordialement

Ga


bonjour,

Range(plage).rows(1).row devrait te le permettre.

A+



Bonjour à tous,
suite à une sélection dans un refedit, je voudrais récupérer les
numéros de lignes sélectionnés et seulement les lignes car
j'envoie ensuite dans une colonne différente dans une autre
feuille avec un test sur le titre:

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
Sheets("Feuil2").Select
'Et la je voudrais retrouver le numéro de la première ligne
sélectionnée pour copier la sélection au même endroit (les
tableaux étant identiques pour les lignes).
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next
End Sub

Quelle(s) instruction(s) pour réaliser ceci ?

Merci de votre aide

Cordialement

Ga




















Avatar
GA
Bonjour,
Merci beaucoup, j'ai recopier exactement les procèdures,
mais j'ai toujours sur la ligne: erreur: incompatibilité de type

je crois comprendre.
Je ne veux pas t'embêter et être "lourd" !!!(bon, c'est déjà fait !!)

Dans le titre j'ai un texte(un nom de ville)
sur les lignes j'ai des pourcentages.
Quand je remplace le nom des villes par un chiffre cela fonctionne.
sauf que ma copie se fait sur la colonne qui correspond au N° du titre.
Ex: si je met 5 en titre, la copie se fait sur la 5ième colonne soit col
E et non sur la colonne qui à 5 soit col B

Dans ton exemple cela fonctionne puisque tu as 3 pour Col C... qui est
la 3ième colonne justement...

Cordialement

Ga


re,

écoute puisque décidément, il est difficile d'y arriver, je me suis fait un
exemple pour recréer autant que possible les conditions de ta procédure.
Voici les hypothèses que j'ai prises. Je me suis crée un Userform ( appelé
Userform1) sur lequel je n'ai que deux controles ( un RefEdfit appelé
RefEdit1 et un COmmandbutton appelé CommandButton1). Sur la feuille 1 , j'ai
un CommandButton1. En cells(1,2) de la feuille 1, j'ai mis la valeur 3 et en
Range("B3:D3") de la feuille2 , j'ai mis 2 , 3 et 4.
sur la feuille1, j'ai mis des infos dans les cellules du range("A6:B7").

Les procédures associées sont les suivantes:

1) Pour le commandbutton1 de la feuille 1
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

2)Pour le userform
2.a) pour le Refedit: aucune instruction
2.b)pour le CommandButton1
Private Sub CommandButton1_Click()
Me.Hide
Copie_sur_Synthese
Unload me
End sub

3)Dans un module standard ta procédure
Sub Copie_sur_Synthese()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm1.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ligne = Range(plage).Rows(1).Row

ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
With Sheets("Feuil2")
.Paste .Cells(ligne, col)
End With
Application.CutCopyMode = False

End If

Next
End Sub


Lorsque je lance la procédure par click sur le commanbutton de la feuill1,
avec le refedit, je choisis la plage A6:B7 de la feuille1 puis, je clique sur
le Commandbutton du Userform et ensuite c'est fini, sans jamais se planter
(que j'écrive d'ailleurs ligne = Range(plage).Rows(1).Row ou ligne =
Range(userform1.RefEdit.value).Rows(1).Row , ce qui est bien normal puisque
tant que le refedit est ouvert c'est formellement la même chose).

Les données du range A6:B7 sont bien copiées en feuille 2 à partir de la
ligne 6 sur la colonne C puisque c'est celle qui contient la valeur de
Coltitre soit celle de cells(1,2) de feuille1 qui dans mon exemple vaut 3.

Là , vraiement je suis au bout de mes possibilités d'aide.

A+




Merci beaucoup pour ta réponse,

j'ai remplacé la ligne=range(Refedit.value).rows(1).row
par:ligne=range(plage).rows(1).row pour retrouver la sélection car
refedit.value ne ramenait rien.
mais j'ai encore une erreur :"incompatibilité de type" sur la ligne:
.paste .cells(ligne,col).

(deux précisions: le bouton qui me lance l'userform3 et la sélection
sont sur la feuil1. Et après les tests cela sera sur un autre classeur
et c'est toute la sélection que je veux copier à partir du N° de ligne
trouvé.)

Merci mille fois de m'aider à me sortir de là.
Il ne me manque que çà pour finir mon projet...

Cordialement

Ga



bon,

je ne pense pas qu'il soit trsè judicieux de déclarer ligne comme string .
On suppose que tu as pu récupérer ta plage de ton refedit et que
celle-ci s'appelle "Feuil2!$A1:$A1000" donc ton Refedit.value est ègal à
"Feuil2!$A1:$A1000". tu récupères le N° de la ligne en écrivant
ligne=range(Refedit.value).rows(1).row puis tu écris ta procédure (
attention, c'est telle que je l'ai comprise mais je peux me tromper)

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ligne=range(Refedit.value).rows(1).row
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
with Sheets("Feuil2")
.paste .cells(ligne,col)
end with

Application.CutCopyMode = False

End If

Next
End Sub

A+



Merci pour la démo.
j'ai déclaré ligne as string
et ligne=Range(plage).rows(1).row
je retrouve bien le N° de la 1ere ligne de la sélection mais après je
n'arrive pas à formaliser la syntaxe pour la copie.. Ou Peut-être
est-ce la ligne range(plage).copy qui n'est pas bonne...
comment écrire la ligne de sélection avant ActiveSheet.Paste ? car en
fait je récupére le N° de la ligne mais il faut que je sélectionne
cette ligne pour copier..du genre:"Range(ligne,col).select" ?? Et là
je sèche lamentablement..

Merci de m'aider

Cordialement

Ga



re,

je te donne un exemple pour te mettre sur la voie.

ici tutu et la déclaration de la variable publique sont dans un
module standard et Userform1 comporte un Refedit

Public plagecellrefedit As String
Sub tutu()

'chargement d'un userform et sélection de l'ensemble des
'cellules de current region.

'la variable plagecellrefedit recoit dans le userform l'affectation
'plagecellrefedit = UserForm1.RefEdit1.Value par exemple lors du
'click sur un Commandbutton qui valide les saisies dans le userform


With UserForm1
.RefEdit1.Text = ActiveCell.CurrentRegion.Address
.RefEdit1.SetFocus
.StartUpPosition = 3
.Show
End With
Unload UserForm1 'on décharge le userform (i.e , il n'est plus en
'mémoire)
MsgBox Range(plagecellrefedit).Rows(1).Row (ici on obtient le N° de
'ligne correspondant à la 1ere ligne de la sélection effectuée avec
le 'RefEdit et ce quelque soit la feuille sur laquelle ont été
'sélectionnées les cellules)
End Sub

A+



Bonsoir,

Refedit me renvoi bien la plage sélectionnée.
Lorsque je pointe le curseur sur la ligne de ma macro:
Range(plage).Copy
cela m'indique bien la sélection:"Feuil1!$B$12:$B$20" que j'effectue
avec la souris. (Je vois bien cette sélection dans le refedit).

Où est mon erreur ?
un problème de positionnement de la ligne de commande ?
je l'ai insérée à la place du commentaire 'Et la je... etc..

Cordialement

Ga




m'excuse mais ca marche très bien, si la plage est définie
correctement.As tu essayé de voir ce que te renvoyais exactement
refedit ?

A+





Merci pour la réponse
mais j'ai une erreur 438: "Propriété ou méthode non gérée par cet
objet"

Cordialement

Ga



bonjour,

Range(plage).rows(1).row devrait te le permettre.

A+




Bonjour à tous,
suite à une sélection dans un refedit, je voudrais récupérer les
numéros de lignes sélectionnés et seulement les lignes car
j'envoie ensuite dans une colonne différente dans une autre
feuille avec un test sur le titre:

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
Sheets("Feuil2").Select
'Et la je voudrais retrouver le numéro de la première ligne
sélectionnée pour copier la sélection au même endroit (les
tableaux étant identiques pour les lignes).
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next
End Sub

Quelle(s) instruction(s) pour réaliser ceci ?

Merci de votre aide

Cordialement

Ga






















Avatar
anonymousA
re,

Ah , OK, ca ne m'avait pas frappé mais bien sur si col n'est pas une valeur
integer, ca ne marchera pas.Il te faut simplement écrire à la place de .Paste
.Cells(ligne, col)
l'instruction .Paste .Cells(ligne, col.column) et du coup on passe une
valeur de colonne la colonne de la cellule col ( col est un range et a donc
une propriété column).
Je pense que là tu as trouvé.

A+



Bonjour,
Merci beaucoup, j'ai recopier exactement les procèdures,
mais j'ai toujours sur la ligne: erreur: incompatibilité de type

je crois comprendre.
Je ne veux pas t'embêter et être "lourd" !!!(bon, c'est déjà fait !!)

Dans le titre j'ai un texte(un nom de ville)
sur les lignes j'ai des pourcentages.
Quand je remplace le nom des villes par un chiffre cela fonctionne.
sauf que ma copie se fait sur la colonne qui correspond au N° du titre.
Ex: si je met 5 en titre, la copie se fait sur la 5ième colonne soit col
E et non sur la colonne qui à 5 soit col B

Dans ton exemple cela fonctionne puisque tu as 3 pour Col C... qui est
la 3ième colonne justement...

Cordialement

Ga


re,

écoute puisque décidément, il est difficile d'y arriver, je me suis fait un
exemple pour recréer autant que possible les conditions de ta procédure.
Voici les hypothèses que j'ai prises. Je me suis crée un Userform ( appelé
Userform1) sur lequel je n'ai que deux controles ( un RefEdfit appelé
RefEdit1 et un COmmandbutton appelé CommandButton1). Sur la feuille 1 , j'ai
un CommandButton1. En cells(1,2) de la feuille 1, j'ai mis la valeur 3 et en
Range("B3:D3") de la feuille2 , j'ai mis 2 , 3 et 4.
sur la feuille1, j'ai mis des infos dans les cellules du range("A6:B7").

Les procédures associées sont les suivantes:

1) Pour le commandbutton1 de la feuille 1
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

2)Pour le userform
2.a) pour le Refedit: aucune instruction
2.b)pour le CommandButton1
Private Sub CommandButton1_Click()
Me.Hide
Copie_sur_Synthese
Unload me
End sub

3)Dans un module standard ta procédure
Sub Copie_sur_Synthese()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm1.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ligne = Range(plage).Rows(1).Row

ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
With Sheets("Feuil2")
.Paste .Cells(ligne, col)
End With
Application.CutCopyMode = False

End If

Next
End Sub


Lorsque je lance la procédure par click sur le commanbutton de la feuill1,
avec le refedit, je choisis la plage A6:B7 de la feuille1 puis, je clique sur
le Commandbutton du Userform et ensuite c'est fini, sans jamais se planter
(que j'écrive d'ailleurs ligne = Range(plage).Rows(1).Row ou ligne =
Range(userform1.RefEdit.value).Rows(1).Row , ce qui est bien normal puisque
tant que le refedit est ouvert c'est formellement la même chose).

Les données du range A6:B7 sont bien copiées en feuille 2 à partir de la
ligne 6 sur la colonne C puisque c'est celle qui contient la valeur de
Coltitre soit celle de cells(1,2) de feuille1 qui dans mon exemple vaut 3.

Là , vraiement je suis au bout de mes possibilités d'aide.

A+




Merci beaucoup pour ta réponse,

j'ai remplacé la ligne=range(Refedit.value).rows(1).row
par:ligne=range(plage).rows(1).row pour retrouver la sélection car
refedit.value ne ramenait rien.
mais j'ai encore une erreur :"incompatibilité de type" sur la ligne:
.paste .cells(ligne,col).

(deux précisions: le bouton qui me lance l'userform3 et la sélection
sont sur la feuil1. Et après les tests cela sera sur un autre classeur
et c'est toute la sélection que je veux copier à partir du N° de ligne
trouvé.)

Merci mille fois de m'aider à me sortir de là.
Il ne me manque que çà pour finir mon projet...

Cordialement

Ga



bon,

je ne pense pas qu'il soit trsè judicieux de déclarer ligne comme string .
On suppose que tu as pu récupérer ta plage de ton refedit et que
celle-ci s'appelle "Feuil2!$A1:$A1000" donc ton Refedit.value est ègal à
"Feuil2!$A1:$A1000". tu récupères le N° de la ligne en écrivant
ligne=range(Refedit.value).rows(1).row puis tu écris ta procédure (
attention, c'est telle que je l'ai comprise mais je peux me tromper)

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ligne=range(Refedit.value).rows(1).row
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
with Sheets("Feuil2")
.paste .cells(ligne,col)
end with

Application.CutCopyMode = False

End If

Next
End Sub

A+



Merci pour la démo.
j'ai déclaré ligne as string
et ligne=Range(plage).rows(1).row
je retrouve bien le N° de la 1ere ligne de la sélection mais après je
n'arrive pas à formaliser la syntaxe pour la copie.. Ou Peut-être
est-ce la ligne range(plage).copy qui n'est pas bonne...
comment écrire la ligne de sélection avant ActiveSheet.Paste ? car en
fait je récupére le N° de la ligne mais il faut que je sélectionne
cette ligne pour copier..du genre:"Range(ligne,col).select" ?? Et là
je sèche lamentablement..

Merci de m'aider

Cordialement

Ga



re,

je te donne un exemple pour te mettre sur la voie.

ici tutu et la déclaration de la variable publique sont dans un
module standard et Userform1 comporte un Refedit

Public plagecellrefedit As String
Sub tutu()

'chargement d'un userform et sélection de l'ensemble des
'cellules de current region.

'la variable plagecellrefedit recoit dans le userform l'affectation
'plagecellrefedit = UserForm1.RefEdit1.Value par exemple lors du
'click sur un Commandbutton qui valide les saisies dans le userform


With UserForm1
.RefEdit1.Text = ActiveCell.CurrentRegion.Address
.RefEdit1.SetFocus
.StartUpPosition = 3
.Show
End With
Unload UserForm1 'on décharge le userform (i.e , il n'est plus en
'mémoire)
MsgBox Range(plagecellrefedit).Rows(1).Row (ici on obtient le N° de
'ligne correspondant à la 1ere ligne de la sélection effectuée avec
le 'RefEdit et ce quelque soit la feuille sur laquelle ont été
'sélectionnées les cellules)
End Sub

A+



Bonsoir,

Refedit me renvoi bien la plage sélectionnée.
Lorsque je pointe le curseur sur la ligne de ma macro:
Range(plage).Copy
cela m'indique bien la sélection:"Feuil1!$B$12:$B$20" que j'effectue
avec la souris. (Je vois bien cette sélection dans le refedit).

Où est mon erreur ?
un problème de positionnement de la ligne de commande ?
je l'ai insérée à la place du commentaire 'Et la je... etc..

Cordialement

Ga




m'excuse mais ca marche très bien, si la plage est définie
correctement.As tu essayé de voir ce que te renvoyais exactement
refedit ?

A+





Merci pour la réponse
mais j'ai une erreur 438: "Propriété ou méthode non gérée par cet
objet"

Cordialement

Ga



bonjour,

Range(plage).rows(1).row devrait te le permettre.

A+




Bonjour à tous,
suite à une sélection dans un refedit, je voudrais récupérer les
numéros de lignes sélectionnés et seulement les lignes car
j'envoie ensuite dans une colonne différente dans une autre
feuille avec un test sur le titre:

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
Sheets("Feuil2").Select
'Et la je voudrais retrouver le numéro de la première ligne
sélectionnée pour copier la sélection au même endroit (les
tableaux étant identiques pour les lignes).
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next
End Sub

Quelle(s) instruction(s) pour réaliser ceci ?

Merci de votre aide

Cordialement

Ga

























Avatar
GA
Hip Hip Hip .....

Cà marche génial....

Merci beaucoup sans toi je n'y serais jamais arrivé,

Merci encore à tous ceux qui m'ont aidé
ce forum est vraiment génial, et très bien fréquenté !!

Cordialement

A+

Ga



re,

Ah , OK, ca ne m'avait pas frappé mais bien sur si col n'est pas une valeur
integer, ca ne marchera pas.Il te faut simplement écrire à la place de .Paste
.Cells(ligne, col)
l'instruction .Paste .Cells(ligne, col.column) et du coup on passe une
valeur de colonne la colonne de la cellule col ( col est un range et a donc
une propriété column).
Je pense que là tu as trouvé.

A+




Bonjour,
Merci beaucoup, j'ai recopier exactement les procèdures,
mais j'ai toujours sur la ligne: erreur: incompatibilité de type

je crois comprendre.
Je ne veux pas t'embêter et être "lourd" !!!(bon, c'est déjà fait !!)

Dans le titre j'ai un texte(un nom de ville)
sur les lignes j'ai des pourcentages.
Quand je remplace le nom des villes par un chiffre cela fonctionne.
sauf que ma copie se fait sur la colonne qui correspond au N° du titre.
Ex: si je met 5 en titre, la copie se fait sur la 5ième colonne soit col
E et non sur la colonne qui à 5 soit col B

Dans ton exemple cela fonctionne puisque tu as 3 pour Col C... qui est
la 3ième colonne justement...

Cordialement

Ga



re,

écoute puisque décidément, il est difficile d'y arriver, je me suis fait un
exemple pour recréer autant que possible les conditions de ta procédure.
Voici les hypothèses que j'ai prises. Je me suis crée un Userform ( appelé
Userform1) sur lequel je n'ai que deux controles ( un RefEdfit appelé
RefEdit1 et un COmmandbutton appelé CommandButton1). Sur la feuille 1 , j'ai
un CommandButton1. En cells(1,2) de la feuille 1, j'ai mis la valeur 3 et en
Range("B3:D3") de la feuille2 , j'ai mis 2 , 3 et 4.
sur la feuille1, j'ai mis des infos dans les cellules du range("A6:B7").

Les procédures associées sont les suivantes:

1) Pour le commandbutton1 de la feuille 1
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

2)Pour le userform
2.a) pour le Refedit: aucune instruction
2.b)pour le CommandButton1
Private Sub CommandButton1_Click()
Me.Hide
Copie_sur_Synthese
Unload me
End sub

3)Dans un module standard ta procédure
Sub Copie_sur_Synthese()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm1.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ligne = Range(plage).Rows(1).Row

ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
With Sheets("Feuil2")
.Paste .Cells(ligne, col)
End With
Application.CutCopyMode = False

End If

Next
End Sub


Lorsque je lance la procédure par click sur le commanbutton de la feuill1,
avec le refedit, je choisis la plage A6:B7 de la feuille1 puis, je clique sur
le Commandbutton du Userform et ensuite c'est fini, sans jamais se planter
(que j'écrive d'ailleurs ligne = Range(plage).Rows(1).Row ou ligne =
Range(userform1.RefEdit.value).Rows(1).Row , ce qui est bien normal puisque
tant que le refedit est ouvert c'est formellement la même chose).

Les données du range A6:B7 sont bien copiées en feuille 2 à partir de la
ligne 6 sur la colonne C puisque c'est celle qui contient la valeur de
Coltitre soit celle de cells(1,2) de feuille1 qui dans mon exemple vaut 3.

Là , vraiement je suis au bout de mes possibilités d'aide.

A+





Merci beaucoup pour ta réponse,

j'ai remplacé la ligne=range(Refedit.value).rows(1).row
par:ligne=range(plage).rows(1).row pour retrouver la sélection car
refedit.value ne ramenait rien.
mais j'ai encore une erreur :"incompatibilité de type" sur la ligne:
.paste .cells(ligne,col).

(deux précisions: le bouton qui me lance l'userform3 et la sélection
sont sur la feuil1. Et après les tests cela sera sur un autre classeur
et c'est toute la sélection que je veux copier à partir du N° de ligne
trouvé.)

Merci mille fois de m'aider à me sortir de là.
Il ne me manque que çà pour finir mon projet...

Cordialement

Ga




bon,

je ne pense pas qu'il soit trsè judicieux de déclarer ligne comme string .
On suppose que tu as pu récupérer ta plage de ton refedit et que
celle-ci s'appelle "Feuil2!$A1:$A1000" donc ton Refedit.value est ègal à
"Feuil2!$A1:$A1000". tu récupères le N° de la ligne en écrivant
ligne=range(Refedit.value).rows(1).row puis tu écris ta procédure (
attention, c'est telle que je l'ai comprise mais je peux me tromper)

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ligne=range(Refedit.value).rows(1).row
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
with Sheets("Feuil2")
.paste .cells(ligne,col)
end with

Application.CutCopyMode = False

End If

Next
End Sub

A+




Merci pour la démo.
j'ai déclaré ligne as string
et ligne=Range(plage).rows(1).row
je retrouve bien le N° de la 1ere ligne de la sélection mais après je
n'arrive pas à formaliser la syntaxe pour la copie.. Ou Peut-être
est-ce la ligne range(plage).copy qui n'est pas bonne...
comment écrire la ligne de sélection avant ActiveSheet.Paste ? car en
fait je récupére le N° de la ligne mais il faut que je sélectionne
cette ligne pour copier..du genre:"Range(ligne,col).select" ?? Et là
je sèche lamentablement..

Merci de m'aider

Cordialement

Ga




re,

je te donne un exemple pour te mettre sur la voie.

ici tutu et la déclaration de la variable publique sont dans un
module standard et Userform1 comporte un Refedit

Public plagecellrefedit As String
Sub tutu()

'chargement d'un userform et sélection de l'ensemble des
'cellules de current region.

'la variable plagecellrefedit recoit dans le userform l'affectation
'plagecellrefedit = UserForm1.RefEdit1.Value par exemple lors du
'click sur un Commandbutton qui valide les saisies dans le userform


With UserForm1
.RefEdit1.Text = ActiveCell.CurrentRegion.Address
.RefEdit1.SetFocus
.StartUpPosition = 3
.Show
End With
Unload UserForm1 'on décharge le userform (i.e , il n'est plus en
'mémoire)
MsgBox Range(plagecellrefedit).Rows(1).Row (ici on obtient le N° de
'ligne correspondant à la 1ere ligne de la sélection effectuée avec
le 'RefEdit et ce quelque soit la feuille sur laquelle ont été
'sélectionnées les cellules)
End Sub

A+




Bonsoir,

Refedit me renvoi bien la plage sélectionnée.
Lorsque je pointe le curseur sur la ligne de ma macro:
Range(plage).Copy
cela m'indique bien la sélection:"Feuil1!$B$12:$B$20" que j'effectue
avec la souris. (Je vois bien cette sélection dans le refedit).

Où est mon erreur ?
un problème de positionnement de la ligne de commande ?
je l'ai insérée à la place du commentaire 'Et la je... etc..

Cordialement

Ga





m'excuse mais ca marche très bien, si la plage est définie
correctement.As tu essayé de voir ce que te renvoyais exactement
refedit ?

A+






Merci pour la réponse
mais j'ai une erreur 438: "Propriété ou méthode non gérée par cet
objet"

Cordialement

Ga




bonjour,

Range(plage).rows(1).row devrait te le permettre.

A+





Bonjour à tous,
suite à une sélection dans un refedit, je voudrais récupérer les
numéros de lignes sélectionnés et seulement les lignes car
j'envoie ensuite dans une colonne différente dans une autre
feuille avec un test sur le titre:

Sub Copie_sur_Synthese ()
Dim ColTitre As String, col As Variant
Dim plage As String
plage = UserForm3.RefEdit1.Value
If plage = "" Then
MsgBox "vous n'avez rien sélectionné, recommencez !"
Exit Sub
End If
ColTitre = Cells(1, 2)
Range(plage).Copy
For Each col In Worksheets("Feuil2").Range("B3:D3")
If col = ColTitre Then
Sheets("Feuil2").Select
'Et la je voudrais retrouver le numéro de la première ligne
sélectionnée pour copier la sélection au même endroit (les
tableaux étant identiques pour les lignes).
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next
End Sub

Quelle(s) instruction(s) pour réaliser ceci ?

Merci de votre aide

Cordialement

Ga


























1 2