Macro VBA faisant appel à deux feuilles excel [Résolu/Fermé]

Signaler
Messages postés
13
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
6 décembre 2010
-
Messages postés
13
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
6 décembre 2010
-
Bonjour,

J'ai un problème avec une macro VBA.

Mon code est le suivant:

Sub Macro1()

Sheets("Saisie_données_contrat").Activate
i = 2
For i = 2 To 149 Step 3
'il me prends A2 puis A5 puis A8, il refusait A&"i" donc j'ai utilisé (chr34) (lgne du dessous)
contrat = (chr34) & "A" & i & (chr34)
Range(contrat).Select
Sheets("Calcul").Activate
Range("A6").Select
Range("A6").Value = Range(contrat).Value

Next i
End Sub

Sur la feuille "Saisiee_donnée_contrat", il me prends a partir de la 2éme ligne les valeurs de la colonne A et ce toutes les 3 lignes (A2, A5, A8 et ainsi de suite)
Ensuite je voudrais qu'il me copie successivement ces valeurs dans la cellule A6 de la feuille calcul.

Mais en fait ma macro me prends bien une valeur sur 3 de la colonne A et les mets dans la cellule A6, mais elle prends la colonne A de la feuille Calcul et non pas la colonne A de la feuille "Saisie_données_contrats".
Je pense que sur la ligne de code contrat=(chr34)......., il faut que je lui spécifie la feuille excel concernée.

Savez-vous comment faire ça?

D'avance merci, ça fait 2 jours que je suis bloquée dessus.

Merci merci merci

7 réponses

Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
Bonjour,
Essaie ceci :

Sub Macro1() 
Dim i As Integer
Sheets("Saisie_données_contrat").Activate 
For i = 2 To 149 Step 3 
With Sheets("Calcul")
    .Range("A6").Value = Sheets("Saisie_données_contrat").Range("A" & i).Value
End With
Next i 
End Sub


Je ne vois pas trop l'utilité, la cellule A6 de la feuille Calcul va s'effacer au fur et à mesure et tu ne va y retrouver que la dernière valeur...
Messages postés
13
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
6 décembre 2010

Je viens d'essayer ton code et il ne se passe rien. La souris se met juste sur la case A2 de la feuille Saisie_données_contrat et c'est tout. Il ne sepasse rien sur la feuille Calcul et la cellule Calcul!A6 reste vide.
C'est bizarre. Aurais-tu une autre idée?

En fait la finalité de mon code sera
- de mettre succesivement dans A6 les valeurs de la colonne A de la feuille Saisie_données_contrat

- de recopier la plage de données A6:I8

- de la copier sur une troisième feuille

Mais comme je ne suis pas une lumière en VBA, je voulais y aller étape par étape en fait.

Merci de ta réponse
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
C'est cela que je ne comprends pas : de mettre succesivement dans A6 les valeurs de la colonne A tu es d'accord avec moi que :
1- je place Sheets("Saisie_données_contrat").Range("A1").Value dans A6, j'obtiens : Sheets("Saisie_données_contrat").Range("A1").Value
2- je place Sheets("Saisie_données_contrat").Range("A4").Value dans A6, j'obtiens : Sheets("Saisie_données_contrat").Range("A4").Value et Sheets("Saisie_données_contrat").Range("A1").Value a disparu...
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
Que contiennent les cellules A6:I8 que tu veux copier coller?
Messages postés
13
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
6 décembre 2010

Non non, je me suis mal exprimé.
Dans ma feuille "Calcul", j'ai la plage A6:I8 comme ci-dessous.
N° contrat Année1 Année2 Année3 Année4 ......Année8
Montant1 Montant2 Montant3 Montant4 ....Montant8
gain1 gain2 gain3 gain4...........gain8
les cellules Année, montant et gain se remplissent automatiquement avec une recherchev selon le numéro de contrat justement entré en A6.
Sur ma feuille saisie_données_contrat, j'ai justement l'ensemble de mes contrats dans la colonne A

Contrat 1
ligen vide
ligne vide
Contrat2
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
Ok. Donc tu veux :
1- mettre le 1er num de contrat en A6
2- copier/collage spécial valeur de A6:I8 en Feuil3 A1
3- mettre le 2ème num de contrat en A6
4- copier/collage spécial valeur de A6:I8 en Feuil3 A4
etc...
C'est bien cela???
Messages postés
13
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
6 décembre 2010

et ainsi de suite.
ce que je voudrais, c'est que ma cellule contrat (Calcul!A6) soit incrémentée automatiquement depuis ma colonne A de la feuille saisie_données_contrat.

Comme a chaque nouveau contrat les valeurs de la plage A6:I8 sont recalculées, je voudrais les recopier sur une autre feuille.

Et pour le moment, j'essaie de trouver le code qui me permet de mettre succesivement dans A6 les valeurs de la colonne A de la deuxième feuille.
Désolée, je n'ai pas été assez claire dans ma question.

Merci de ta dispo et de prendre le temps de m'aider, je me sens vraiment bête la
Messages postés
13
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
6 décembre 2010

oui, c'est exactement ce que je veux faire
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
Alors prends ce code. Remplace "Feuil3" par le nom de ta troisième feuille...

Sub Macro1() 
Dim i As Integer, DerniereLigne As Integer, Derlig As Integer 'déclaration des variables
Sheets("Saisie_données_contrat").Activate 'On active la feuille Saisie_données_contrat
Derlig = Sheets("Saisie_données_contrat").Range("A65536").End(xlUp).Row ' on en détermine la dernière ligne qui servira de fin à notre boucle
For i = 2 To Derlig Step 3 'initialisation de la boucle Step 3
With Sheets("Calcul") 'dans la feuille calcul
'la cellule A6 prends la 1ere valeur de la boucle
    .Range("A6").Value = Sheets("Saisie_données_contrat").Range("A" & i).Value
End With
'ici on détermine la première ligne vide de la feuille3
With Sheets("Feuil3")
    DerniereLigne = .Range("A65536").End(xlUp).Row + 1
End With
'on copie la plage de cellules de feuille calcul
With Sheets("Calcul")
    .Range("A6:I8").Copy
End With
'et on colle "spécial valeurs"
Sheets("Feuil3").Range("A" & DerniereLigne).PasteSpecial Paste:=xlPasteValues
'au suivant
Next i
End Sub

Messages postés
13
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
6 décembre 2010

Je tente tout de suite
Messages postés
13
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
6 décembre 2010

Testé.
Alors,

Ca me copie bien mes contrats sur la feuille3 mais par contre il ne recopie que la plage A6:I6, c-à-d la première ligne de la plage que je veux recopier. Sauf pour le dernier contrat ou il y a bine la plage A6:I8.

Peux être qu'il recopie bien les 3 ligne (6 à 8) mais que chaque nouveau contrat viens ecraser les deux dernières lignes du contrat précédentsauf le dernier.

A part ça, c'est vraiment ce que je recherche à faire
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
Ou peut être que dans la feuille calcul, les cellules A7 et A8 ne sont pas complétées?

Si oui, tu aurais pu le dire..... Ou pas!! C'est pas grave. Si I8 est toujours remplie essaye ceci :

Sub Macro1() 
Dim i As Integer, DerniereLigne As Integer, Derlig As Integer

Sheets("Saisie_données_contrat").Activate
Derlig = Sheets("Saisie_données_contrat").Range("A65536").End(xlUp).Row

For i = 2 To Derlig Step 3

With Sheets("Calcul")
    .Range("A6").Value = Sheets("Saisie_données_contrat").Range("A" & i).Value
End With

With Sheets("Feuil3")
    DerniereLigne = .Range("I65536").End(xlUp).Row + 1
End With

With Sheets("Calcul")
    .Range("A6:I8").Copy
End With

Sheets("Feuil3").Range("A" & DerniereLigne).PasteSpecial Paste:=xlPasteValues

Next i
End Sub
Messages postés
13
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
6 décembre 2010

J'étais en réunion, je viens de voir ta réponse.

Euh oui, c'est vrai que je n'ai pas précisé mais les cases sont bien remplies.
J'essaie ta nouvelle version te je te tiens au courant
merkiiiiiiiiiiiiiiiii
Messages postés
13
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
6 décembre 2010

Super ça marche.
Il me recupere bien mes contrats et il me colle toute ma plage de données, c'est super.

Merci pour tout, c'est vraiment super.

Bonne fin de journée