Macro VBA faisant appel à deux feuilles excel

Résolu/Fermé
la_defense Messages postés 13 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 6 décembre 2010 - 27 oct. 2010 à 13:12
la_defense Messages postés 13 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 6 décembre 2010 - 27 oct. 2010 à 16:21
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

A voir également:

7 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
27 oct. 2010 à 13:22
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...
0
la_defense Messages postés 13 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 6 décembre 2010
27 oct. 2010 à 13:32
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
27 oct. 2010 à 13:44
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...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 27/10/2010 à 13:46
Que contiennent les cellules A6:I8 que tu veux copier coller?
0
la_defense Messages postés 13 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 6 décembre 2010
27 oct. 2010 à 13:53
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 27/10/2010 à 13:57
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???
0
la_defense Messages postés 13 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 6 décembre 2010
27 oct. 2010 à 13:56
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
0
la_defense Messages postés 13 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 6 décembre 2010
27 oct. 2010 à 13:58
oui, c'est exactement ce que je veux faire
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
27 oct. 2010 à 14:16
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

0
la_defense Messages postés 13 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 6 décembre 2010
27 oct. 2010 à 14:19
Je tente tout de suite
0
la_defense Messages postés 13 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 6 décembre 2010
27 oct. 2010 à 14:44
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
27 oct. 2010 à 15:06
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
0
la_defense Messages postés 13 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 6 décembre 2010
27 oct. 2010 à 15:55
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
0
la_defense Messages postés 13 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 6 décembre 2010
27 oct. 2010 à 16:21
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
0