Résolu Macro Excel dupliquer les formules dans une nouvelle ligne / nouvelle feuille

slive@IDN

Habitué
Bonjour,

Je débute en VBA et je ne trouve pas la solution à mon problème.

Je suis en train de travailler sur un tableau avec 3 feuilles.

Sur la Feuille 1 : un tableau principal de collecte de données. Sur ce tableau, j'ai intégré une macro d'ajout de ligne.
Au final ce tableau peut donc avoir 5 lignes comme 100.

Les feuilles 2 et 3 sont des feuilles d'analyse se basant sur le tableau en feuille 1.

Ma difficulté :

Je voudrais lorsque je rajoute une ligne dans ma feuille 1, qu'une ligne s'ajoute en bas de tableau sur la feuille 2 et la feuille 3.
Tout en reprenant les formules qui se trouvent dans le tableau de la feuille 2 et idem pour la feuille 3.

J'aurais besoin également que le texte de la colonne A de la feuille 1 (indiquant une référence en format de texte), soit copié en colonne A également de la nouvelle ligne.

Pour la copie j'ai déjà écris cette macro qui fonctionne :
Sub Copie_A()
Worksheets("Feuille1").Range("A10:A100").Copy Worksheets("Feuille2").Range("A10")
Worksheets("Feuille1").Range("A10:A100").Copy Worksheets("Feuille3").Range("A10")
End Sub

Actuellement, Je peux donc bien ajouter une ligne à mon tableau en feuille 1.
Cela me copie automatiquement le contenu des cellules "A" vers les cellules "A" des feuilles 2 et feuilles 3, mais je n'ai pas le reste de la ligne sur mes feuilles 2 et 3.

Espérant avoir été clair sur ma demande.
Un grand merci pour votre aide.
 

drul

Obscur pro du hardware
Staff
Salut, comment appel tu ta macro copie_A ?
Le mieux serait de déterminer le nombre "n" de ligne dans ta feuille1
puis de copier tes formules "n" fois sur les feuilles 2 et 3. Ensuite tu copie les données de Feuille1 vers feuille 2 et 3.

Pour déterminer le nombre de ligne:
Code:
 n=Sheets("Feuille1").Cells(application.rows.count,1).End(xlup).row
 

slive@IDN

Habitué
Salut Drul,
Merci pour ta réponse.
La macro pour copier les valeurs dans la colonne A s'intitule tout simplement Copie_A.

Le problème c'est que je ne sais pas à l'avance combien de ligne peut avoir mon tableau, c'est la raison pour laquelle j'ai fais une macro d'ajout de ligne.
Par contre les tableaux en feuille 1;2 et 3 auront bien le même nombre de lignes.
La feuille 1 correspond aux données de bases saisies par l'utilisateur, les feuilles 2 et 3 seront des analyses de ces données.
C'est pourquoi, j'ai besoin lors de l'ajout d'une ligne en feuille 1, qu'une ligne s'ajoute sur les 2 autres feuilles en me reprenant les formules de calcul.

Aurais tu une solution ?
 

drul

Obscur pro du hardware
Staff
Meilleure réponse
La ligne de code ci dessus (dans ma réponse précédente) te donne le nombre de ligne utilisé dans la feuille 1

Il est ensuite assez facile de copier n fois la ligne 1 dans tes feuilles 2 et 3, puis de remplacer la colonne a par celle de la feuille 1

Ma question concernant ta macro est: à quel moment/de quelle façon appelles tu "copie_A()" ?

On fera donc :
Code:
    Dim nombreLigne As Long
    
    nombreLigne = Sheets("Feuille1").Cells(Application.Rows.Count, 1).End(xlUp).Row
    Sheets("Feuille2").Cells(1, 1).EntireRow.Copy Sheets("Feuille2").Range(Sheets("Feuille2").Cells(2, 1), Sheets("Feuille2").Cells(nombreLigne, 1)).EntireRow
    Sheets("Feuille1").Range(Sheets("Feuille1").Cells(1, 1), Sheets("Feuille1").Cells(nombreLigne, 1)).Copy Sheets("Feuille2").Cells(1, 1)
 

slive@IDN

Habitué
Ah Ok, je n'avais pas compris ta question concernant Copie_A.
En fait, j'ai une macro d'automatisation, dès lors qu'une valeur est entrée en colonne A, la macro Copie_A est exécutée automatiquement et me copie la valeur des colonnes A en feuille 1 vers les colonnes A en feuille 2 et 3.

Je viens d'essayer ta formule mais cette derniere ne fonctionne pas et se bloque dès la ligne de code :
nombreLigne = Sheets("Feuille1").Cells(Application.Rows.Count, 1).End(xlUp).Row

Pourtant j'ai bien renseigné les bons noms de feuilles.
 

drul

Obscur pro du hardware
Staff
tu as quoi comme erreur ?
essaye de mettre des points d'arrêt dans le code et de voir exactement ou ça plante.
Tu as bien déclaré nombreLigne ?
 

slive@IDN

Habitué
J'ai erreur d'exécution 9

J'ai copié telle quelle ta formule en remplaçant par les bons noms de feuilles.
Qu'entends tu par déclarer le nombreLigne ?

Mes données commencent à partir de A10 et peuvent aller jusqu'à plus de 100.
 

drul

Obscur pro du hardware
Staff
Stp publie ton code ici.
par déclarer j'entends:
Code:
 dim nombreLigne as long
 

slive@IDN

Habitué
Voici le code :

Sub Copie_F2()
Dim nombreLigne As Long

nombreLigne = Sheets("Details_des_risques").Cells(Application.Rows.Count, 1).End(xlUp).Row

Sheets("Résumé_Assurances").Cells(1, 1).EntireRow.Copy
Sheets("Résumé_Assurances").Range(Sheets("Résumé_Assurances").Cells(2, 1), Sheets("Résumé_Assurances_").Cells(nombreLigne, 1)).EntireRow

Sheets("Details_des_risques").Range(Sheets("Details_des_risques").Cells(1, 1), Sheets("Details_des_risques").Cells(nombreLigne, 1)).Copy Sheets("Résumé_Assurances").Cells(1, 1)

End Sub

(et encore merci pour ton aide)
 

drul

Obscur pro du hardware
Staff
sûr de tes noms de feuille ?
Essaie en remplaçant par leur index. exemple: Sheets(1).gnagnagna
L'erreur 9 vient quand tu as un indice hors limite (en l'occurence un nom de feuille inconnu).
 

slive@IDN

Habitué
J'ai vérifié plusieurs fois pour les noms de feuilles c'est bien ça.

Je viens d essayer avec Sheet(1).Details.......

et désormais j'ai erreur 438 toujours sur la même ligne de code.
Je deviens fou !!!!! [:lamoufetteencolere:1]
 

drul

Obscur pro du hardware
Staff
Essaies la macro suivante:
Code:
Sub test()
MsgBox Sheets(1).Cells(Application.Rows.Count, 1).End(xlUp).Row
End Sub
 

slive@IDN

Habitué
L'exécution de la macro m'ouvre une fenetre (comme pour un message d'erreur) avec le chiffre 14
 

drul

Obscur pro du hardware
Staff
Donc ça ne doit pas planter à ligne que tu m'indiques ;)
et ta dernière ligne occupé dans la feuille 1 est la ligne 14 ...

Essaies de remplacer partout ou tu as sheets("un_nom_quelconque)" par sheets (n) (ou n = 1 2 3 ...)
 

slive@IDN

Habitué
J'ai toujours l'erreur 438 avec le code suivant :
Sub TEST2()

Dim nombreLigne As Long

nombreLigne = Sheets(1).Cells(Application.Rows.Count, 1).End(xlUp).Row

Sheets(2).Cells(1, 1).EntireRow.Copy
Sheets(2).Range(Sheets(2).Cells(2, 1), Sheets(2).Cells(nombreLigne, 1)).EntireRow

Sheets(1).Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(nombreLigne, 1)).Copy Sheets(2).Cells(1, 1)

End Sub
 

drul

Obscur pro du hardware
Staff
dans ton vba

Sheets(2).Cells(1, 1).EntireRow.Copy
Sheets(2).Range(Sheets(2).Cells(2, 1), Sheets(2).Cells(nombreLigne, 1)).EntireRow

est sur 1 ligne ou sur 2 ? (le fofo est chiant pour ça ...)
Si c'est sur 2, ça marchera pas ... ou alors faut l'écrire avec un "_" entre les deux lignes:
Code:
Sheets("Feuille2").Cells(1, 1).EntireRow.Copy _
Sheets("Feuille2").Range(Sheets("Feuille2").Cells(2, 1), Sheets("Feuille2").Cells(nombreLigne, 1)).EntireRow
 

slive@IDN

Habitué
En effet il était sur 2 lignes.
La macro fonctionne, mais.... m'efface tout mon tableau sur la feuille2 à partir de la colonne B
 

drul

Obscur pro du hardware
Staff
essaie d'analyser ce que fait la fonction ...

Code:
Sheets("Feuille2").Cells(1, 1).EntireRow.Copy _
Sheets("Feuille2").Range(Sheets("Feuille2").Cells(2, 1), Sheets("Feuille2").Cells(nombreLigne, 1)).EntireRow
 

slive@IDN

Habitué
Sinon je pense à une solution peut etre plus simple.
Aurais tu un code qui me permette d'insérer une ligne en bas des tableaux sur les 3 feuilles tout en reprenant les formules de chacun des tableaux ?
 

drul

Obscur pro du hardware
Staff
Pourquoi pas, même si la copie globale est beaucoup plus simple ...
Mais le but c'est que TU travailles ! Fais donc une propositions et si ça ne marche pas on debug ensemble.
Pour la macro que je t'ai faite, c'est surement uniquement la ligne source qui n'est pas la bonne.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 000
Membres
1 586 387
Dernier membre
ouistititouille
Partager cette page
Haut