Macro : Cibler la ligne pour la copie

pascaljbz

Nouveau membre
Au secours...

Loin d'être une brute sur Excel et VB, j'essais tant bien que mal à me faire des petites macros pour me simplifier la vie. Voilà mon problème :
Je souhaite copier des valeurs de cellules d'une feuille de calcul sur une ligne correspondante dans une autre feuille!

Dans un premier temps ma petite macro fonctionnait jusqu'au moment où j'ai rajouté des lignes.... La sanction directe ;)
Voilà la mignonne :
[cpp]Sub Copie_MontantdeBaie()
Range("C8").Select
ActiveCell.FormulaR1C1 = "='MONTANT DE BAIE'!R[-7]C[10]"
Range("D8").Select
ActiveCell.FormulaR1C1 = "='MONTANT DE BAIE'!R[-6]C[9]"
Range("E8").Select
ActiveCell.FormulaR1C1 = "='MONTANT DE BAIE'!R[-5]C[8]"
Range("F8").Select
ActiveCell.FormulaR1C1 = "='MONTANT DE BAIE'!R[-4]C[7]"
Range("G8").Select
ActiveCell.FormulaR1C1 = "='MONTANT DE BAIE'!R[-3]C[6]"
Range("H8").Select
ActiveCell.FormulaR1C1 = "='MONTANT DE BAIE'!R[-2]C[5]"
Range("I8").Select
ActiveCell.FormulaR1C1 = "='MONTANT DE BAIE'!R[-3]C[11]"
Range("A1:B2").Select
End Sub[/cpp]

En espèrant que celà puisse paraître plus claire, j'ai en fait 7 infos à copier venant de la feuille "MONTANT DE BAIE" dans les cellules C8, D8, E8...
Seulement la ligne correspondante à "MONTANT DE BAIE" ne sera pas toujours la 8...
Comment puis-je l'identifier?

J'espère ne pas faire de doublon de sujet, mais je suis entrain de foutre mon coiffeur sur la paille car ça fait un petit moment que je m'arrache les cheveux en me balladant dans le forum en quête d'une lueur...

Voilà ma bouteille jetée à l'eau, merci au sauveteur ;)
 

zeb

Modérateur
Tu prétends t'être baladé sur ce forum ?
Alors tu dois être tombé sur mon avis sur les Select/Selection/ActiveTruc.

:fou:

Revoilà ton code :
Code:
Sub Copie_MontantdeBaie()
    Range("C8" ).FormulaR1C1 = "='MONTANT DE BAIE'!R[-7]C[10]"
    Range("D8" ).FormulaR1C1 = "='MONTANT DE BAIE'!R[-6]C[9]"
    Range("E8" ).FormulaR1C1 = "='MONTANT DE BAIE'!R[-5]C[8]"
    Range("F8" ).FormulaR1C1 = "='MONTANT DE BAIE'!R[-4]C[7]"
    Range("G8" ).FormulaR1C1 = "='MONTANT DE BAIE'!R[-3]C[6]"
    Range("H8" ).FormulaR1C1 = "='MONTANT DE BAIE'!R[-2]C[5]"
    Range("I8" ).FormulaR1C1 = "='MONTANT DE BAIE'!R[-3]C[11]"
End Sub

Ohlàlà ! Mélange de A1 et de R1C1 + Adressage relatif.
Si tu cherches à te compliquer la vie, fais comme ça.

En fait :

C8 + (-7,10) -> M1
D8 + (-6, 9) -> M2
E8 + (-5, 8) -> M3
F8 + (-4, 7) -> M4
G8 + (-3, 6) -> M5
H8 + (-2, 5) -> M6
I8 + (-3,11) -> T5

Version 1 :
Code:
Sub Copie_MontantdeBaie()
    Range( "C8" ).Formula = "='MONTANT DE BAIE'!M1"
    Range( "D8" ).Formula = "='MONTANT DE BAIE'!M2"
    Range( "E8" ).Formula = "='MONTANT DE BAIE'!M3"
    Range( "F8" ).Formula = "='MONTANT DE BAIE'!M4"
    Range( "G8" ).Formula = "='MONTANT DE BAIE'!M5"
    Range( "H8" ).Formula = "='MONTANT DE BAIE'!M6"
    Range( "I8" ).Formula = "='MONTANT DE BAIE'!T5"
End Sub

Version 2 :
Code:
Sub Copie_MontantdeBaie()
    Cells( 8, 3 ).Formula = "='MONTANT DE BAIE'!M" & 1
    Cells( 8, 4 ).Formula = "='MONTANT DE BAIE'!M" & 2
    Cells( 8, 5 ).Formula = "='MONTANT DE BAIE'!M" & 3
    Cells( 8, 6 ).Formula = "='MONTANT DE BAIE'!M" & 4
    Cells( 8, 7 ).Formula = "='MONTANT DE BAIE'!M" & 5
    Cells( 8, 8 ).Formula = "='MONTANT DE BAIE'!M" & 6
    Cells( 8, 9 ).Formula = "='MONTANT DE BAIE'!T5"
End Sub

Version gros malin :
Code:
Sub Copie_MontantdeBaie()
	Dim I As Integer
	For I = 1 To 6
    	Cells( 8, I+2 ).Formula = "='MONTANT DE BAIE'!M" & I
    Next
    Cells( 8, 9 ).Formula = "='MONTANT DE BAIE'!T5"
End Sub

As-tu besoin que les changements dans les cellules de 'Montant de Baie' se reportent dans ta feuille ?
Sinon :
Code:
Sub Copie_MontantdeBaie()
	Dim I As Integer
	For I = 1 To 6
    	Cells( 8, I+2 ).Value = Worksheets("MONTANT DE BAIE").Cells(I, 13)
    Next
    Cells( 8, 9 ).Value = Worksheets("MONTANT DE BAIE").Cells(5, 20).Value
End Sub

Là, ça devient plus facile !
Tu n'es pas sûr que ce soit la ligne 8. Bon, disons que c'est pour la ligne N, alors :
Code:
Sub Copie_MontantdeBaie(N as Integer)
	Dim I As Integer
	For I = 1 To 6
    	Cells( N, I+2 ).Formula = "='MONTANT DE BAIE'!M" & I
    Next
    Cells( N, 9 ).Formula = "='MONTANT DE BAIE'!T5"
End Sub

Comment puis-je l'identifier?
Là mon gars, on ne peut pas le faire pour toi.
Donne peut-être plus d'information...
 

pascaljbz

Nouveau membre
Bon.... Bah ça c'est fait!
Je ne me sens vraiment pas à ma place sur ce forum, je n'entrave rien à ce que tu m'a dis... :heink:
Je ne suis qu'un vil utilisateur de l'enregistreur de macro!

Tout les codes que tu me proposes marche effectivemment bien mais pour faire la même chose.
Je suis bien conscient qu'une certaine rigueur dans le code permet d'avoir une lecture plus propre et de cerner d'éventuel problèmes quand il y en a ;)

Cependant j'ai un soucis avec ton dernier code :
[cpp]Sub Copie_MontantdeBaie(N As Integer)
Dim I As Integer
For I = 1 To 6
Cells(N, I + 2).Formula = "='MONTANT DE BAIE'!M" & I
Next
Cells(N, 9).Formula = "='MONTANT DE BAIE'!T5"
End Sub

[/cpp]
J'ai un message d'erreur : "Argument Non Facultatif"
Sauf erreur, je comprends qu'on lui indique que N correspond à la valeur d'une ligne et idéalement cette ligne sera identifiée en fonction du texte de la première colonne.

Pour être plus clair :

Dans ma première colonne, j'ai plusieurs dénomination comme "Montant de Baie" et je voudrais qu'il puisse me trouver le numéro de la ligne correspondant au texte. En bref, je suis désolé si je suis passé à côté d'une astuce que tu aurais déjà expliqué mais comme je l'ai dis plus haut j'ai du mal à comprendre les codes qui peuvent paraître les plus simple!
 

zeb

Modérateur
Ah mon gars, t'es tombé sur un forum de programmeurs, tu as une réponse de programmeur ! :o
Mais t'as du bol : Les novices y sont acceptés ;)

Si tu veux trouver la solution, il te faut comprendre un minimum. Je t'ai fais plusieurs codes différents, pour que tu ais toutes les étapes. A toi de faire un (gros) effort.

Faire aussi un effort de rédaction (sémantique, pas orthographique - Pour une fois que j'en tiens un qui écrit correctement) :
Dans ma première colonne
Explicite-nous ça un peu mieux : la colonne n°1 de la feuille "Montant..", la ligne n° tant de la feuille de destination, etc. Tu peux utiliser des mots simples comme source, cible.

Donc ce que j'en comprends, c'est que je n'ai pas compris si la "ligne 8" qui peut ne pas être la 8 est sur la cible ou sur la source. :pt1cable:

Allez, recommence... :)


---------------------------



Pour info, tu as une erreur à l'appel de la procédure Copie_MontantdeBaie(N As Integer) car tu n'as pas donné de valeur à N :

[fixed]Copie_MontantdeBaie 8[/fixed]
 

pascaljbz

Nouveau membre
Aaahhhhh, vive la langue française.
Autant de mots élaborés sans finalement réussir à se faire comprendre ;)

Allez, recommence... :)

Bon, je me jette à l'eau et je refais un essai.

Sur la feuille 'MONTANT DE BAIE' (la source) j'ai des infos... On va dire 2 et dans 2 cellules différentes évidemment!
Sur une autre feuille (dans le même classeur) que je vais appeller....... roulement de tambour..... RECAPITULIF (la cible), j'ai une liste de toutes les feuilles de mon .xls dans la colonne1 (soit une cellule = un titre de feuille).
Sur ma feuille 'RECAPITULATIF' je souhaite y voir les 2 infos qui m'interresse du Montant de Baie ; biensur sur la ligne correspondante et dans 2 cellules aussi.

Concrètement avec le pauvre enregistreur de macro j'ai réussi à faire en sorte de copier les infos souhaitées, mais quand je rajoute une feuille supplémentaire et qu'ainsi ma liste de la feuille 'RECAPITULATIF' s'incrémente d'une ligne, bah c'est la zone car en faisant cette action la ligne reprennant les infos du 'MONTANT DE BAIE' ne sera pas forcément la même!

C'est pour ça que je cherchais également un moyen pour identifier la ligne de la feuille 'RECAPITULATIF' où sera écrit "Montant de Baie" dans la colonne1.
Allé j'ai pas peur de dire une connerie, je pense que c'est une espèce de Recherche Verticale... j'me suis foulé là...

Je prie pour avoir réussi à me faire comprendre...

Merci d'avance,
Et surtout merci de ta patience! :D
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 078
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut