OVH Cloud OVH Cloud

copier une cellule en fonction d'une autre

5 réponses
Avatar
Modjow
Bonjour,

Mon problème est le suivant.
Je dois copier des données dans une cellule en fonction du contenu se trouvant dans une plage de données.

Par exemple :

A1 = 123456
B1:B15 = Texte1
C1:C3 = Texte2
D1:D12 = Texte3

Je dois en fonction des colonnes dans la quelle il y a le plus de donnée incrémenter ma cellule A. Pour avoir A1:A15 = 12
456 (on se base sur la colonne B etant donné que elle va jusqu'a la ligne 15).

Toutes les informations contenues dans les cellules A,B,C et D sont récupérées par une macro dans d'autres fichiers Excel...

Alors c'est un exemple un peu tordu mais j'ai rien trouvé de plus représentatif. Dites moi si vous avez besoin de plus d'infos.

Sa fait 1S que je tourne sur des forums sans trouver de solutions..Merci d'avance.

5 réponses

Avatar
MichD
Bonjour,

Une façon de faire :

Attention, tu dois adapter le nom des feuilles à 2 endroits
et la plage que tu veux copier.


'---------------------------------------------------
Sub test1()
Dim DerLig As Long, C As Range, Rg As Range
With Worksheets("Feuil2")
With .Range("A:D")
'Trouve la dernière ligne occupée par des valeurs
'dans la plage A:D
DerLig = .Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
For Each C In .Columns
If C.Rows(65536).End(xlUp).Row = DerLig Then
Exit For
End If
Next
End With
Set Rg = Range(.Cells(1, C.Column), .Cells(DerLig, C.Column))

'Tu copies la plage de données ver Rg
'à titre d'Exemple :
Worksheets("Feuil1").Range("A1:A25").Copy Rg(1, 1)
MsgBox Rg.Address
End With
End Sub
'---------------------------------------------------




"Modjow" a écrit dans le message de groupe de discussion :


Bonjour,

Mon problème est le suivant.
Je dois copier des données dans une cellule en fonction du contenu se
trouvant
dans une plage de données.

Par exemple :

A1 = 123456
B1:B15 = Texte1
C1:C3 = Texte2
D1:D12 = Texte3

Je dois en fonction des colonnes dans la quelle il y a le plus de donnée
incrémenter ma cellule A. Pour avoir A1:A15 = 12
456 (on se base sur la colonne B etant donné que elle va jusqu'a la ligne
15).

Toutes les informations contenues dans les cellules A,B,C et D sont
récupérées
par une macro dans d'autres fichiers Excel...

Alors c'est un exemple un peu tordu mais j'ai rien trouvé de plus
représentatif.
Dites moi si vous avez besoin de plus d'infos.

Sa fait 1S que je tourne sur des forums sans trouver de solutions..Merci
d'avance.
Avatar
modjow
Le lundi 03 Février 2014 à 11:31 par Modjow :
Bonjour,

Mon problème est le suivant.
Je dois copier des données dans une cellule en fonction du contenu se
trouvant dans une plage de données.

Par exemple :

A1 = 123456
B1:B15 = Texte1
C1:C3 = Texte2
D1:D12 = Texte3

Je dois en fonction des colonnes dans la quelle il y a le plus de donnée
incrémenter ma cellule A. Pour avoir A1:A15 = 12
456 (on se base sur la colonne B etant donné que elle va jusqu'a la
ligne 15).

Toutes les informations contenues dans les cellules A,B,C et D sont
récupérées par une macro dans d'autres fichiers Excel...

Alors c'est un exemple un peu tordu mais j'ai rien trouvé de plus
représentatif. Dites moi si vous avez besoin de plus d'infos.

Sa fait 1S que je tourne sur des forums sans trouver de solutions..Merci
d'avance.


Merci pour la réponse. Ta macro fonctionne mais ne fait pas exactement ce que je veux, je me suis peut être mal exprimé.

En fait la colonne A doit fonctionner un peu comme un genre d' AUTOFILL. Elle va s'adapter à la colonne ou il y a le plus d'informations.

A1 = 123456
B1:B15 = Texte1

En fait la colonne A va se copier 15 fois.
A1:A15 = 123456 vu que c'est la colonne B qui cotient le plus d'infos.

Je ne sais pas si j'arrive à être assez clair.
Avatar
MichD
| Je ne sais pas si j'arrive à être assez clair.

Non. Ta question initiale parlait d'identifier la colonne
dont la dernière ligne est la plus basse parmi quatre
colonnes soit de A à D.

Si j'identifie que c'est la colonne C et que la dernière ligne
occupée est 50, que veux-tu faire avec cette information?
Recopier le contenu de la dernière cellule occupée de chacune
des 3 autres colonnes et de recopier ces valeurs jusqu'à la ligne 50?

Ton problème ne doit pas être très important à l'effort que tu y mets
pour le définir!
Avatar
modjow
Le lundi 03 Février 2014 à 11:31 par Modjow :
Bonjour,

Mon problème est le suivant.
Je dois copier des données dans une cellule en fonction du contenu se
trouvant dans une plage de données.

Par exemple :

A1 = 123456
B1:B15 = Texte1
C1:C3 = Texte2
D1:D12 = Texte3

Je dois en fonction des colonnes dans la quelle il y a le plus de donnée
incrémenter ma cellule A. Pour avoir A1:A15 = 12
456 (on se base sur la colonne B etant donné que elle va jusqu'a la
ligne 15).

Toutes les informations contenues dans les cellules A,B,C et D sont
récupérées par une macro dans d'autres fichiers Excel...

Alors c'est un exemple un peu tordu mais j'ai rien trouvé de plus
représentatif. Dites moi si vous avez besoin de plus d'infos.

Sa fait 1S que je tourne sur des forums sans trouver de solutions..Merci
d'avance.


"Si j'identifie que c'est la colonne C et que la dernière ligne
occupée est 50, que veux-tu faire avec cette information?"

Cette information permet uniquement de définir la dernière ligne occupée de mon tableau.

"Recopier le contenu de la dernière cellule occupée de chacune
des 3 autres colonnes et de recopier ces valeurs jusqu'à la ligne 50?"

Recopier 50 fois l'information contenu de la cellule A jusqu'a la ligne 50. La dernière ligne occupée me sert uniquement d'indicateur pour savoir combien de fois je dois recopier l'info dans la ligne A.
Avatar
MichD
Cette procédure identifie quelle est la dernière ligne occupée pour
l'ensemble des colonnes de la plage A:D et elle affiche aussi
dans un message dans quelle colonne cette dernière ligne se
retrouve.

Avec ceci, tu devrais être en mesure de faire ce que tu veux.
Ne pas oublier d'adapter le nom de la feuille dans la procédure.

'------------------------------------------------
Sub test1()
Dim DerLig As Long, C As Range, Rg As Range
With Worksheets("Feuil1") 'Adapte le nom de la feuille
With .Range("A:D")
'Trouve la dernière ligne occupée par des valeurs
'dans la plage A:D
DerLig = .Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
For Each C In .Columns
If C.Rows(65536).End(xlUp).Row = DerLig Then
Exit For
End If
Next
End With

MsgBox "La dernière ligne est : " & DerLig & vbCrLf & _
" et elle est située en colonne : " & C.Column
End With
End Sub
'------------------------------------------------