Je souhaite remplir une feuille (C) avec des données se trouvant dans une autre (A).
Chaque cellule destinatrice = une cellule issue d'une colonne de la feuille source.
Celle-ci est un tableau nominatif avec différentes attribution concernant la personne de la ligne.
Une solution est de copier la ligne souhaitée depuis (A) puis de la coller ailleurs (feuille B) pour que ce "ailleurs" serve de source constante (par exemple copier la ligne 13 de M Durand (feuille A) dans la feuille servant de relais (feuille B). La feuille destination (C) ayant des formules qui récupèrent ces données pour remplir ses propres cellules.
Mais est-il possible, juste en sélectionnant une ligne de la feuille A de lancer une macro qui fasse le travail de recopie ?
Histoire de bien comprendre:
le script "Cible.EntireRow.Copy Destination:=" copie l'intégralité de la ligne (Entire) mais si je ne veux copier qu'une partie (de telle cellule à telle cellule sur la même ligne), coment dois-je modifier cette formule ?
merci
Histoire de bien comprendre, posez précisément votre problème réel. Par exemple : " je veux copier les cellules des colonnes C à F d'une ligne puis les coller ailleurs "
ce à quoi on vous répondra :
Code:
Cible.Range("C1:F1").Copy Destination:=
au lieu de :
Code:
Cible.EntireRow.Copy Destination:=
Bonne journée.
ℝOGER2327 #7046
Mercredi 11 Sable 141 (Nativité de Saint Grabbe, scherziste - fête Suprême Quarte) 21 Frimaire An CCXXII, 5,9632h - érable à sucre 2013-W50-3T14:18:42Z
]Je souhaite remplir une feuille (C) avec des données se trouvant dans une autre (A). Chaque cellule destinatrice = une cellule issue d'une colonne de la feuille source.
je suis désolé, mais je trouve le ton un peu "sévère" alors que je ne suis jamais incorrect dans mes posts. Je n'ai pas lancé plusieurs sujets au sein de celui-ci.
Non, pas du tout, j'ai bien détaillé ma demande très ciblée dans ma question, j'ai seulement demandé à ROGER2327 de m'apporter une précision quant-à sa réponse (dont je redis qu'elle est tout à fait appropriée et que je l'en remercie).
Par correction, je vais dire que j'ai dû mal m'exprimer ;-)
Le fait est que l'exemple que tu cites est tout à fait explicite d'une incompréhension:
Quand je dis:
Je souhaite remplir une feuille (C) avec des données se trouvant dans une autre (A).
Chaque cellule destinatrice = une cellule issue d'une colonne de la feuille source.
est dans cette même lignée, je n'ai pas changé de demande contrairement à ce que tu affirmes.
Par ailleurs, étant moi-même animateur d'un forum, je suis un peu surpris par cette "tension" qui se ressent dans tes mots. En effet, si le principe d'un forum n'est pas de renseigner et chercher des renseignements sur un sujet, alors il faut faire autre chose plutôt que de s'énerver au moindre hiatus.
La pertinence d'une réponse n'empêche pas d'avoir une soif de s'améliorer pour être à même de proposer soi-même ses services à d'autres, non ?
Enfin, qu'est-il plus judiscieux de faire ? :
- poursuivre sur un sujet en prolongeant le thème s'il fait suite aux réponses apportées
- entamer un nouveau sujet dès que la demande n'est plus "exactement" celle qui a lancé le sujet
C'est dommage, j'avais pourtant une question toujours liée à ce même sujet, mais franchement, j'hésite à la poser, vu la façon dont je dois prendre des "gants blancs" pour l'exprimer.
Re : Peut-on lancer une macro juste en sélectionnant une ligne ?
Je me lance tout de même, car la réponse à ma question initiale ayant été constructive, je pense que la suite le sera probablement aussi. par contre, j'ai maintenant un doute: dois-je poursuivre ici ou lancer un nouveau sujet ? Pour l'instant, comme c'est directement lié à ce qui précède je pose la question ici:
L'étape suivante est donc d'imprimer autant de formulaires que de lignes dans la feuille A (on pourrait le faire via le publipostage de Word par exemple, mais il faut rester dans le contexte Excel).
Voici donc le principe que je voudrais produire par macro:
Avec le même procédé que le remplissage automatique précédent:
- sélection de la première ligne de données,
- impression de la feuille C
- sélection de la ligne suivante
- impression ...
et ce jusqu'à ce que toutes les lignes de la feuille A non vides aient été balayées.
J'ai écrit le script suivant, mais il bugge sur la ligne "Cible.Rows.Count = i" (erreur de compilation, nombre d'arguments incorrect ou affectation de propriété incorrecte):
Code:
Sub Impr_Totale()
Dim Cible As Range
Sheets("FeuilleA").Select
i = 3
While Sheets("FeuilleA").Cells(i, 1).Value <> ""
Cible.Rows.Count = i
' Rows("1:" & i).Select
With Feuil7
Cible.EntireRow.Copy Destination:=.Cells(3, 1)
' i.EntireRow.Copy Destination:=.Cells(3, 1)
End With
Sheets("FeuilleC").Select
ActiveSheet.PrintOut Copies:=1
i = i + 1
Wend
End Sub
je détaille (en gras)
Sub Impr_Totale()
Dim Cible As Range 'déclaration de la variable Cible comme Range (ligne)
Sheets("FeuilleA").Select 'sélection de la feuille A (feuille avec les données de départ)
i = 3 'initialisation de la variable i à la valeur 3 (3ème ligne, les deux premières étant des titres)
While Sheets("FeuilleA").Cells(i, 1).Value <> "" 'faire temps que la cellule Ai est différente de vide
Cible.Rows.Count = i 'la ligne sélectionnée est i
' Rows("1:" & i).Select
With Feuil7 'La feuille 7 est la Feuille B de mon explication initiale, elle "reçoit" la copie de la ligne i
Cible.EntireRow.Copy Destination:=.Cells(3, 1) 'copie de la ligne i en feuille B (7) ligne 3
' i.EntireRow.Copy Destination:=.Cells(3, 1) 'essai en intégrant i dans la formule, mais ne focntionne pas c'est pourquoi elle est affublée de la ' comme remarque
End With
Sheets("FeuilleC").Select 'sélection de la feuille C (formulaire final)
ActiveSheet.PrintOut Copies:=1 'impression de la feuille sélectionnée
i = i + 1 'incrément de i (de ligne)
Wend
End Sub
Pouvez-vous m'aider ? (en m'expliquant ce qui ne va pas, merci)
Rows.Count est en lecture seule : vous ne pouvez pas écrire Cible.Rows.Count = i.
Essayez ceci :
VB:
Sub Impr_Totale()
Dim i&
i = 3
While Sheets("FeuilleA").Cells(i, 1).Value <> ""
Sheets("FeuilleA").Rows(i).EntireRow.Copy Destination:=Feuil7.Cells(3, 1)
Sheets("FeuilleC").PrintOut Copies:=1
i = i + 1
Wend
End Sub