Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

copier des cellules d'une feuille sur une autre feuille

4 réponses
Avatar
cinthia
Bonjour,
d=E9butante en VB, je me suis servie des macros que j'ai pu=20
r=E9cup=E9rer sur le net et partant de l=E0, j'ai bidouill=E9 pour=20
arriver =E0 mon r=E9sultat.
N=E9anmoins, dans certains cas, m=EAme en entrant texto=20
l'exemple donn=E9, =E7a ne marche pas chez moi.

Voici mon probl=E8me actuel :
j'ai une macro qui trouve sur la feuille 1 la plage de=20
cellules qui m'int=E9ressent (elle est variable).
Cette macro cr=E9e ensuite un certain nombre de feuilles=20
dans lesquelles je voudrais qu'elle recopie les cellules=20
s=E9lectionn=E9es pr=E9c=E9demment =E0 partir de la cellule A1.
Or, je n'y arrive pas ni en utilisant l'option "copy" ni=20
en faisant une boucle "for" et en disant telle cellule de=20
la nouvelle feuille =3D telle cellule de la feuille 1.

A chaque fois, la macro =E9choue et me dit "erreur d=E9finie=20
par l'application ou par l'objet".

Quelqu'un peut-il m'aider ?

4 réponses

Avatar
Dédé
Salut Cinthia !

Et si tu nous donnais le code en question, peut-être qu'on pourrait t'en
proposer une version qui fonctionne ;-))

Salutations
Dédé

--
Pour répondre, enlever le NOSPAM
"cinthia" a écrit dans le message de
news:0d3401c367dc$2ce706f0$
Bonjour,
débutante en VB, je me suis servie des macros que j'ai pu
récupérer sur le net et partant de là, j'ai bidouillé pour
arriver à mon résultat.
Néanmoins, dans certains cas, même en entrant texto
l'exemple donné, ça ne marche pas chez moi.

Voici mon problème actuel :
j'ai une macro qui trouve sur la feuille 1 la plage de
cellules qui m'intéressent (elle est variable).
Cette macro crée ensuite un certain nombre de feuilles
dans lesquelles je voudrais qu'elle recopie les cellules
sélectionnées précédemment à partir de la cellule A1.
Or, je n'y arrive pas ni en utilisant l'option "copy" ni
en faisant une boucle "for" et en disant telle cellule de
la nouvelle feuille = telle cellule de la feuille 1.

A chaque fois, la macro échoue et me dit "erreur définie
par l'application ou par l'objet".

Quelqu'un peut-il m'aider ?
Avatar
cinthia
Voilà mon code :

'CREATION AUTOMATIQUE DES FEUILLES des systèmes
Sub creation()

' step 1 : trouver l'adresse de la cellule qui contient le
mot "SYSTEM"
Dim colonne_system, ligne_system As Integer
Dim cell As Object

For Each cell In UsedRange
If UCase(cell.Value) = "SYSTEM" Then
colonne_system = cell.Column
ligne_system = cell.Row
End If
Next cell

'pour vérification
'MsgBox colonne_system
'MsgBox ligne_system

'step 2 : compter le nombre de sytèmes répertoriés
Dim Nb_System As Integer

Nb_System = 0
For Each cell In Intersect(UsedRange, Columns
(colonne_system))
'on ne regarde que la colonne des systèmes
'on ne compte que les lignes non vides situées après
la cellule de titre
If cell.Row > ligne_system And cell.Value <> "" Then
Nb_System = Nb_System + 1
Next cell

'pour vérification
'MsgBox Nb_System

'step 3: trouver le nombre de rubriques à copier
Dim Nb_rubriq As Integer

Nb_rubriq = 0
For Each cell In Intersect(UsedRange, Rows
(ligne_rubriques))
'on ne regarde que la ligne des rubriques
'on ne compte que les cellules non vides situées après
la cellule contenant "listes" (colonne1)
If cell.Column > 1 And cell.Value <> "" Then Nb_rubriq
= Nb_rubriq + 1
Next cell

'pour vérification
'MsgBox Nb_rubriq

'step 4 : ajouter le nombre de feuilles nécessaires pour
avoir chaque système sur une feuille
' + leur attribue le nom du système et recopier la ligne
des rubriques à partir de a1
Dim ajout_feuille, i As Integer
Dim nom As String

ajout_feuille = 1
Do While ajout_feuille <= Nb_System
Application.Worksheets.Add After:=Sheets.Item
(Sheets.Count), Type:=xlWorksheet
nom = Cells(ligne_system + ajout_feuille,
colonne_system).Value
Application.ActiveSheet.Name = nom
** For i = 1 To Nb_rubriq
** ActiveSheet.Cells(1, 1).Value = Sheets
("configuration").Cells(ligne_system + 1, 1 + i).Value
** Next i
ajout_feuille = ajout_feuille + 1
Loop

End Sub

et queslques explications
mon classeur ne comporte au départ qu'une feuille,
renommée "configuration".
Dans cette feuille, j'ai un tableau comportant sur une
ligne les rubriques que je voudrais avoir sur toutes les
premières lignes de mes nouvelles pages.
L'une des rubriques étant SYSTEM.
Sous la cellule SYSTEM (donc dans la même colonne), j'ai
les noms des systèmes concernées qui deviennent les noms
de mes nouvelles feuilles.

A l'exception des lignes devant lesquelles j'ai mis **,
tout le reste fonctionnent (la création de nouvelles
feuilles quelque soit le nombre et l'attribution du nom en
fonction de ma colonne prédéfinie dans la feuille de
configuration)

J'ai aussi fait des essais en séparant la partie copie
dans une autre macro mais sans plus de résultat (celle-là,
je ne l'ai plus en revanche).

Enfin, j'ai entré tout ce code sur la feuille vb de la
feuille configuration. J'utilise Excel 2000.
Je croise les doigts pour une solution. En tout cas, merci
beaucoup
Avatar
Philippe.R
Bonsoir Cinthia,
Si j'ai bien compris, il me semble que la première chose à faire serait de déplacer le code vers un
module ordinaire .
(Dans l'editeur, clic droit sur le projet, insertion / Module ; couper le code situé dans la feuille et
le coller dans le module ; tester en pas à pas à l'aide de la touche F8)
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002
"cinthia" a écrit dans le message de news:0c1a01c367e2$1fcb68c0$
Voilà mon code :

'CREATION AUTOMATIQUE DES FEUILLES des systèmes
Sub creation()

' step 1 : trouver l'adresse de la cellule qui contient le
mot "SYSTEM"
Dim colonne_system, ligne_system As Integer
Dim cell As Object

For Each cell In UsedRange
If UCase(cell.Value) = "SYSTEM" Then
colonne_system = cell.Column
ligne_system = cell.Row
End If
Next cell

'pour vérification
'MsgBox colonne_system
'MsgBox ligne_system

'step 2 : compter le nombre de sytèmes répertoriés
Dim Nb_System As Integer

Nb_System = 0
For Each cell In Intersect(UsedRange, Columns
(colonne_system))
'on ne regarde que la colonne des systèmes
'on ne compte que les lignes non vides situées après
la cellule de titre
If cell.Row > ligne_system And cell.Value <> "" Then
Nb_System = Nb_System + 1
Next cell

'pour vérification
'MsgBox Nb_System

'step 3: trouver le nombre de rubriques à copier
Dim Nb_rubriq As Integer

Nb_rubriq = 0
For Each cell In Intersect(UsedRange, Rows
(ligne_rubriques))
'on ne regarde que la ligne des rubriques
'on ne compte que les cellules non vides situées après
la cellule contenant "listes" (colonne1)
If cell.Column > 1 And cell.Value <> "" Then Nb_rubriq
= Nb_rubriq + 1
Next cell

'pour vérification
'MsgBox Nb_rubriq

'step 4 : ajouter le nombre de feuilles nécessaires pour
avoir chaque système sur une feuille
' + leur attribue le nom du système et recopier la ligne
des rubriques à partir de a1
Dim ajout_feuille, i As Integer
Dim nom As String

ajout_feuille = 1
Do While ajout_feuille <= Nb_System
Application.Worksheets.Add After:=Sheets.Item
(Sheets.Count), Type:=xlWorksheet
nom = Cells(ligne_system + ajout_feuille,
colonne_system).Value
Application.ActiveSheet.Name = nom
** For i = 1 To Nb_rubriq
** ActiveSheet.Cells(1, 1).Value = Sheets
("configuration").Cells(ligne_system + 1, 1 + i).Value
** Next i
ajout_feuille = ajout_feuille + 1
Loop

End Sub

et queslques explications
mon classeur ne comporte au départ qu'une feuille,
renommée "configuration".
Dans cette feuille, j'ai un tableau comportant sur une
ligne les rubriques que je voudrais avoir sur toutes les
premières lignes de mes nouvelles pages.
L'une des rubriques étant SYSTEM.
Sous la cellule SYSTEM (donc dans la même colonne), j'ai
les noms des systèmes concernées qui deviennent les noms
de mes nouvelles feuilles.

A l'exception des lignes devant lesquelles j'ai mis **,
tout le reste fonctionnent (la création de nouvelles
feuilles quelque soit le nombre et l'attribution du nom en
fonction de ma colonne prédéfinie dans la feuille de
configuration)

J'ai aussi fait des essais en séparant la partie copie
dans une autre macro mais sans plus de résultat (celle-là,
je ne l'ai plus en revanche).

Enfin, j'ai entré tout ce code sur la feuille vb de la
feuille configuration. J'utilise Excel 2000.
Je croise les doigts pour une solution. En tout cas, merci
beaucoup
Avatar
cinthia
Merci beaucoup
J'ai tout copié dans un module.
J'ai précisé la feuille à copier et ça marche sans
problème ! (ou presque puisque j'avais oublié 2 ou 3
petites choses)
Du coup, je peux avoir une feuille qui me sert pour la
configuration. Merci beaucoup.

Pour ceux que ça intéresse, voici le code final, placé
dans un module :

'CREATION AUTOMATIQUE DES FEUILLES des systèmes
Sub creation()

' step 1 : trouver l'adresse de la cellule qui contient le
mot "SYSTEM"
Dim colonne_system, ligne_system As Integer
Dim cell As Object

For Each cell In Worksheets("configuration").UsedRange
If UCase(cell.Value) = "SYSTEM" Then
colonne_system = cell.Column
ligne_system = cell.Row
End If
Next cell

'pour vérification
'MsgBox colonne_system
'MsgBox ligne_system

'step 2 : compter le nombre de sytèmes répertoriés
Dim Nb_System As Integer

Nb_System = 0
For Each cell In Intersect(Worksheets
("configuration").UsedRange, Worksheets
("configuration").Columns(colonne_system))
'on ne regarde que la colonne des systèmes
'on ne compte que les lignes non vides situées après
la cellule de titre
If cell.Row > ligne_system And cell.Value <> "" Then
Nb_System = Nb_System + 1
Next cell

'pour vérification
'MsgBox Nb_System


'step 3: trouver le nombre de rubriques
Dim Nb_rubriq As Integer

Nb_rubriq = 0
For Each cell In Intersect(Worksheets
("configuration").UsedRange, Worksheets
("configuration").Rows(ligne_system))
'on ne regarde que la ligne des rubriques
'on ne compte que les cellules non vides situées après
la cellule contenant "listes" (colonne1)
If cell.Column > 1 And cell.Value <> "" Then Nb_rubriq
= Nb_rubriq + 1
Next cell

'pour vérification
'MsgBox Nb_rubriq

'step 4: copier les cellules dans le presse-papier
Worksheets("configuration").Cells(ligne_system, 2).Resize
(1, Nb_rubriq).Copy


'step 5 : ajouter le nombre de feuilles nécessaires pour
avoir chaque système sur une feuille
' + leur attribue le nom du système
Dim ajout_feuille As Integer
Dim nom As String

ajout_feuille = 1
Do While ajout_feuille <= Nb_System
Application.Worksheets.Add After:=Sheets.Item
(Sheets.Count), Type:=xlWorksheet
nom = Worksheets("configuration").Cells(ligne_system +
ajout_feuille, colonne_system).Value
Application.ActiveSheet.Name = nom
ActiveSheet.Paste
ajout_feuille = ajout_feuille + 1
Loop

End Sub

Ca permet d'avoir une feuille de configuration sur
laquelle sont (entre autres) définies
-les différentes rubriques que l'on veut en tête de chaque
colonne sur les autes feuilles et
-les noms que doivent avoir ces feuilles
Enfin, ça crée ces feuilles comme il faut

Voilà, encore merci
Cinthia