OVH Cloud OVH Cloud

macro pour un débutant

9 réponses
Avatar
alain.bazire
Bonjour à tous et toutes. Voila ce que je désire réaliser. Dans classeur
inventaire sélectionner feuil 1 nommée Liaison 1 la plage A8;S26 coller
special valeur dans classeur Récap Inventaire Feuille 3 en A4 puis retourner
dans Inventaire feuille2 nommée Liaison 2 sélectionner la meme plage A8:S26
la coller val spec dans Récap Inventaire Feuille 3 coller en A23 et ainsi de
suite décortiquée ainsi ca parait facile mais bon.Merci de votrte aide comme
ca ca me servira beaucoup a comprendre quelques explications en plus serait
super sympa. Merci d'avance à mes futurs professeurs .Amitiéés .Alain PS
toujours une addition de 19 A4 A23 A 42 etc jusqu'à Liaison 461 Voila suis ja
assez clair? Merci déja

9 réponses

Avatar
poypoy
Bonjour,

quand tu veux faire une macro qui restera stable ensuite (pas de changements
en fonction d'une variable, genre nombre de feuille, de ligne...), je te
conseille d'utiliser 'enregistrer macro' dans outils/macro/enregistrer une
nouvelle macro.
Ensuite tu fais eaxctement ce que tu veux (copier de tes feuilles dans ton
recap) et tu appuis sur stop (le carré ) quand tu as fini.
Excel aura crée tout seul ta macro !
Bon là, cela donne en améliorant ce qu'excel te ferait :


Sub lance()

dim p as number

p=0
'Je lance une fonction pour ne pas avoir à répéter le code
(contrairement à excel qui te l'aurait répéter, c'est juste pour faire plus
joli et plus simple)
'La fonction a 2 éléments nécessaires, le nom de la feuille
d'inventaire à utiliser et le nombre de fois qu'on l'a déjà fait pour savoir
où le coller dans recap
p= transporte("liaison1",p)
'On dit que p = transporte pour savoir à quel niveau on en est...Dans
la fonction, on va dire à transporte qu'il est égal à p+1 pour la suivante

p=transporte("liason2",p)
etc


end sub

function transporte(strnom as tring, p as number)
'on utilise dans le code de la fonction strnom pour le nom de la feuille
et p pour le nombre de fois où on l'a fait

workbooks("inventaire.xls").activate
sheets(strnom).select
range("A8:B26").copy
workbooks("recap inventaire").activate
sheet("feuille3").select
Cells(4+p*15,4).select selection.pastespecial xlvalues
transporte = p+1

end function


Donc tu prends le code tu le colle dans un module de recap inventaire ou
d'inventaire puis te le lance, cela devrait marcher....

Cordialement
Benjamin


Bonjour à tous et toutes. Voila ce que je désire réaliser. Dans classeur
inventaire sélectionner feuil 1 nommée Liaison 1 la plage A8;S26 coller
special valeur dans classeur Récap Inventaire Feuille 3 en A4 puis retourner
dans Inventaire feuille2 nommée Liaison 2 sélectionner la meme plage A8:S26
la coller val spec dans Récap Inventaire Feuille 3 coller en A23 et ainsi de
suite décortiquée ainsi ca parait facile mais bon.Merci de votrte aide comme
ca ca me servira beaucoup a comprendre quelques explications en plus serait
super sympa. Merci d'avance à mes futurs professeurs .Amitiéés .Alain PS
toujours une addition de 19 A4 A23 A 42 etc jusqu'à Liaison 461 Voila suis ja
assez clair? Merci déja


Avatar
papou
Bonjour
Tu vas avoir un problème sur ta plage de destination car tu n'incrémentes
que de 19 lignes pour la prochaine copie alors que tu souhaites copier une
plage de 26 lignes !
Mais sinon, voici un moyen d'automatiser ton affaire :
(testé sur Excel 2003 avec une plage de cellules moins grande et un nombre
de feuilles limité à 3, et incrémentation augmentée à 27)

Sub AlainBazire()
Dim Contenant As Workbook
Dim Recevant As Workbook
Set Contenant = Workbooks("inventaire.xls")
Set Recevant = Workbooks("Recap Inventaire.xls")
Dim LaPlgContenant$, NomFContenant$
LaPlgContenant = "A8:S26"
NomFContenant = "Liaison "
Dim i As Long, y As Long
Application.ScreenUpdating = False
y = 0
For i = 1 To 461
If i = 1 Then
y = y + 4
Else: y = y + 27 'à modifier
End If
Contenant.Worksheets(NomFContenant & i).Range(LaPlgContenant).Copy
Destination:=Recevant.Worksheets("Feuil3").Range("A" & y)
Application.CutCopyMode = False
Next i
Application.ScreenUpdating = True
End Sub

Cordialement
Pascal



"" a
écrit dans le message de
news:
Bonjour à tous et toutes. Voila ce que je désire réaliser. Dans classeur
inventaire sélectionner feuil 1 nommée Liaison 1 la plage A8;S26 coller
special valeur dans classeur Récap Inventaire Feuille 3 en A4 puis
retourner

dans Inventaire feuille2 nommée Liaison 2 sélectionner la meme plage
A8:S26

la coller val spec dans Récap Inventaire Feuille 3 coller en A23 et ainsi
de

suite décortiquée ainsi ca parait facile mais bon.Merci de votrte aide
comme

ca ca me servira beaucoup a comprendre quelques explications en plus
serait

super sympa. Merci d'avance à mes futurs professeurs .Amitiéés .Alain PS
toujours une addition de 19 A4 A23 A 42 etc jusqu'à Liaison 461 Voila suis
ja

assez clair? Merci déja


Avatar
alain.bazire
Bonsoir Poypoy. Je te remercie de tes explications et j'espere que cela va
fonctionner mais j'ai bossé cet apres midi et n'ai pas encore eu le temps de
la mettre en route. Merci beaucoup. Cordialement . Alain


Bonjour,

quand tu veux faire une macro qui restera stable ensuite (pas de changements
en fonction d'une variable, genre nombre de feuille, de ligne...), je te
conseille d'utiliser 'enregistrer macro' dans outils/macro/enregistrer une
nouvelle macro.
Ensuite tu fais eaxctement ce que tu veux (copier de tes feuilles dans ton
recap) et tu appuis sur stop (le carré ) quand tu as fini.
Excel aura crée tout seul ta macro !
Bon là, cela donne en améliorant ce qu'excel te ferait :


Sub lance()

dim p as number

p=0
'Je lance une fonction pour ne pas avoir à répéter le code
(contrairement à excel qui te l'aurait répéter, c'est juste pour faire plus
joli et plus simple)
'La fonction a 2 éléments nécessaires, le nom de la feuille
d'inventaire à utiliser et le nombre de fois qu'on l'a déjà fait pour savoir
où le coller dans recap
p= transporte("liaison1",p)
'On dit que p = transporte pour savoir à quel niveau on en est...Dans
la fonction, on va dire à transporte qu'il est égal à p+1 pour la suivante

p=transporte("liason2",p)
etc


end sub

function transporte(strnom as tring, p as number)
'on utilise dans le code de la fonction strnom pour le nom de la feuille
et p pour le nombre de fois où on l'a fait

workbooks("inventaire.xls").activate
sheets(strnom).select
range("A8:B26").copy
workbooks("recap inventaire").activate
sheet("feuille3").select
Cells(4+p*15,4).select selection.pastespecial xlvalues
transporte = p+1

end function


Donc tu prends le code tu le colle dans un module de recap inventaire ou
d'inventaire puis te le lance, cela devrait marcher....

Cordialement
Benjamin


Bonjour à tous et toutes. Voila ce que je désire réaliser. Dans classeur
inventaire sélectionner feuil 1 nommée Liaison 1 la plage A8;S26 coller
special valeur dans classeur Récap Inventaire Feuille 3 en A4 puis retourner
dans Inventaire feuille2 nommée Liaison 2 sélectionner la meme plage A8:S26
la coller val spec dans Récap Inventaire Feuille 3 coller en A23 et ainsi de
suite décortiquée ainsi ca parait facile mais bon.Merci de votrte aide comme
ca ca me servira beaucoup a comprendre quelques explications en plus serait
super sympa. Merci d'avance à mes futurs professeurs .Amitiéés .Alain PS
toujours une addition de 19 A4 A23 A 42 etc jusqu'à Liaison 461 Voila suis ja
assez clair? Merci déja




Avatar
alain.bazire
Bonsoir Papou . Oui c'est sur que je vais avoir des problèmes mais j'ai fait
une erreur certainement. Je te remercie pour tes explications et te rendrais
compte du bon fonctionnement je l'espere et ca va me permettre de comprendre
certaines choses j'espere, je vais essayer de mettre du mot à mot en francais
pour pouvoir ensuite m'en resservir . Merci beaucoup. Cordialement . Alain


Bonjour
Tu vas avoir un problème sur ta plage de destination car tu n'incrémentes
que de 19 lignes pour la prochaine copie alors que tu souhaites copier une
plage de 26 lignes !
Mais sinon, voici un moyen d'automatiser ton affaire :
(testé sur Excel 2003 avec une plage de cellules moins grande et un nombre
de feuilles limité à 3, et incrémentation augmentée à 27)

Sub AlainBazire()
Dim Contenant As Workbook
Dim Recevant As Workbook
Set Contenant = Workbooks("inventaire.xls")
Set Recevant = Workbooks("Recap Inventaire.xls")
Dim LaPlgContenant$, NomFContenant$
LaPlgContenant = "A8:S26"
NomFContenant = "Liaison "
Dim i As Long, y As Long
Application.ScreenUpdating = False
y = 0
For i = 1 To 461
If i = 1 Then
y = y + 4
Else: y = y + 27 'à modifier
End If
Contenant.Worksheets(NomFContenant & i).Range(LaPlgContenant).Copy
Destination:=Recevant.Worksheets("Feuil3").Range("A" & y)
Application.CutCopyMode = False
Next i
Application.ScreenUpdating = True
End Sub

Cordialement
Pascal



"" a
écrit dans le message de
news:
Bonjour à tous et toutes. Voila ce que je désire réaliser. Dans classeur
inventaire sélectionner feuil 1 nommée Liaison 1 la plage A8;S26 coller
special valeur dans classeur Récap Inventaire Feuille 3 en A4 puis
retourner

dans Inventaire feuille2 nommée Liaison 2 sélectionner la meme plage
A8:S26

la coller val spec dans Récap Inventaire Feuille 3 coller en A23 et ainsi
de

suite décortiquée ainsi ca parait facile mais bon.Merci de votrte aide
comme

ca ca me servira beaucoup a comprendre quelques explications en plus
serait

super sympa. Merci d'avance à mes futurs professeurs .Amitiéés .Alain PS
toujours une addition de 19 A4 A23 A 42 etc jusqu'à Liaison 461 Voila suis
ja

assez clair? Merci déja







Avatar
alain.bazire
Rebonsoir papou. Excuses moi ,mais à la ligne destination il met erreur de
syntaxe donc cela ne fonctionne pas . Cordialement Alain


Bonjour
Tu vas avoir un problème sur ta plage de destination car tu n'incrémentes
que de 19 lignes pour la prochaine copie alors que tu souhaites copier une
plage de 26 lignes !
Mais sinon, voici un moyen d'automatiser ton affaire :
(testé sur Excel 2003 avec une plage de cellules moins grande et un nombre
de feuilles limité à 3, et incrémentation augmentée à 27)

Sub AlainBazire()
Dim Contenant As Workbook
Dim Recevant As Workbook
Set Contenant = Workbooks("inventaire.xls")
Set Recevant = Workbooks("Recap Inventaire.xls")
Dim LaPlgContenant$, NomFContenant$
LaPlgContenant = "A8:S26"
NomFContenant = "Liaison "
Dim i As Long, y As Long
Application.ScreenUpdating = False
y = 0
For i = 1 To 461
If i = 1 Then
y = y + 4
Else: y = y + 27 'à modifier
End If
Contenant.Worksheets(NomFContenant & i).Range(LaPlgContenant).Copy
Destination:=Recevant.Worksheets("Feuil3").Range("A" & y)
Application.CutCopyMode = False
Next i
Application.ScreenUpdating = True
End Sub

Cordialement
Pascal



"" a
écrit dans le message de
news:
Bonjour à tous et toutes. Voila ce que je désire réaliser. Dans classeur
inventaire sélectionner feuil 1 nommée Liaison 1 la plage A8;S26 coller
special valeur dans classeur Récap Inventaire Feuille 3 en A4 puis
retourner

dans Inventaire feuille2 nommée Liaison 2 sélectionner la meme plage
A8:S26

la coller val spec dans Récap Inventaire Feuille 3 coller en A23 et ainsi
de

suite décortiquée ainsi ca parait facile mais bon.Merci de votrte aide
comme

ca ca me servira beaucoup a comprendre quelques explications en plus
serait

super sympa. Merci d'avance à mes futurs professeurs .Amitiéés .Alain PS
toujours une addition de 19 A4 A23 A 42 etc jusqu'à Liaison 461 Voila suis
ja

assez clair? Merci déja







Avatar
alain.bazire
Re bonsoir Poypoy. L' orsqu'il arrive a function transporte il marque erreur
de compilation donc ca ne fonctionne pas. Excuses moi . Cordialement Alain


Bonjour,

quand tu veux faire une macro qui restera stable ensuite (pas de changements
en fonction d'une variable, genre nombre de feuille, de ligne...), je te
conseille d'utiliser 'enregistrer macro' dans outils/macro/enregistrer une
nouvelle macro.
Ensuite tu fais eaxctement ce que tu veux (copier de tes feuilles dans ton
recap) et tu appuis sur stop (le carré ) quand tu as fini.
Excel aura crée tout seul ta macro !
Bon là, cela donne en améliorant ce qu'excel te ferait :


Sub lance()

dim p as number

p=0
'Je lance une fonction pour ne pas avoir à répéter le code
(contrairement à excel qui te l'aurait répéter, c'est juste pour faire plus
joli et plus simple)
'La fonction a 2 éléments nécessaires, le nom de la feuille
d'inventaire à utiliser et le nombre de fois qu'on l'a déjà fait pour savoir
où le coller dans recap
p= transporte("liaison1",p)
'On dit que p = transporte pour savoir à quel niveau on en est...Dans
la fonction, on va dire à transporte qu'il est égal à p+1 pour la suivante

p=transporte("liason2",p)
etc


end sub

function transporte(strnom as tring, p as number)
'on utilise dans le code de la fonction strnom pour le nom de la feuille
et p pour le nombre de fois où on l'a fait

workbooks("inventaire.xls").activate
sheets(strnom).select
range("A8:B26").copy
workbooks("recap inventaire").activate
sheet("feuille3").select
Cells(4+p*15,4).select selection.pastespecial xlvalues
transporte = p+1

end function


Donc tu prends le code tu le colle dans un module de recap inventaire ou
d'inventaire puis te le lance, cela devrait marcher....

Cordialement
Benjamin


Bonjour à tous et toutes. Voila ce que je désire réaliser. Dans classeur
inventaire sélectionner feuil 1 nommée Liaison 1 la plage A8;S26 coller
special valeur dans classeur Récap Inventaire Feuille 3 en A4 puis retourner
dans Inventaire feuille2 nommée Liaison 2 sélectionner la meme plage A8:S26
la coller val spec dans Récap Inventaire Feuille 3 coller en A23 et ainsi de
suite décortiquée ainsi ca parait facile mais bon.Merci de votrte aide comme
ca ca me servira beaucoup a comprendre quelques explications en plus serait
super sympa. Merci d'avance à mes futurs professeurs .Amitiéés .Alain PS
toujours une addition de 19 A4 A23 A 42 etc jusqu'à Liaison 461 Voila suis ja
assez clair? Merci déja




Avatar
papou
Bonjour
Normal car il y a un saut de ligne intempestif dans mon message d'origine,
la partie "Destination:=" doit se trouver sur la même ligne que la partie
commençant par "Contenant.Worksheets".
Modifie donc comme ceci :

Contenant.Worksheets(NomFContenant & i).Range(LaPlgContenant).Copy _
Destination:=Recevant.Worksheets("Feuil3").Range("A" & y)

Cordialement
Pascal


"" a
écrit dans le message de
news:
Rebonsoir papou. Excuses moi ,mais à la ligne destination il met erreur de
syntaxe donc cela ne fonctionne pas . Cordialement Alain


Bonjour
Tu vas avoir un problème sur ta plage de destination car tu
n'incrémentes


que de 19 lignes pour la prochaine copie alors que tu souhaites copier
une


plage de 26 lignes !
Mais sinon, voici un moyen d'automatiser ton affaire :
(testé sur Excel 2003 avec une plage de cellules moins grande et un
nombre


de feuilles limité à 3, et incrémentation augmentée à 27)

Sub AlainBazire()
Dim Contenant As Workbook
Dim Recevant As Workbook
Set Contenant = Workbooks("inventaire.xls")
Set Recevant = Workbooks("Recap Inventaire.xls")
Dim LaPlgContenant$, NomFContenant$
LaPlgContenant = "A8:S26"
NomFContenant = "Liaison "
Dim i As Long, y As Long
Application.ScreenUpdating = False
y = 0
For i = 1 To 461
If i = 1 Then
y = y + 4
Else: y = y + 27 'à modifier
End If
Contenant.Worksheets(NomFContenant & i).Range(LaPlgContenant).Copy
Destination:=Recevant.Worksheets("Feuil3").Range("A" & y)
Application.CutCopyMode = False
Next i
Application.ScreenUpdating = True
End Sub

Cordialement
Pascal



""
a


écrit dans le message de
news:
Bonjour à tous et toutes. Voila ce que je désire réaliser. Dans
classeur



inventaire sélectionner feuil 1 nommée Liaison 1 la plage A8;S26
coller



special valeur dans classeur Récap Inventaire Feuille 3 en A4 puis
retourner

dans Inventaire feuille2 nommée Liaison 2 sélectionner la meme plage
A8:S26

la coller val spec dans Récap Inventaire Feuille 3 coller en A23 et
ainsi



de
suite décortiquée ainsi ca parait facile mais bon.Merci de votrte aide
comme

ca ca me servira beaucoup a comprendre quelques explications en plus
serait

super sympa. Merci d'avance à mes futurs professeurs .Amitiéés .Alain
PS



toujours une addition de 19 A4 A23 A 42 etc jusqu'à Liaison 461 Voila
suis



ja
assez clair? Merci déja









Avatar
alain.bazire
Bonjour Papou. Merci pour ton aide oh combien précieuse cela fonctionne
impeccable. Merci beaucoup. Cordialement Alain


Bonjour
Normal car il y a un saut de ligne intempestif dans mon message d'origine,
la partie "Destination:=" doit se trouver sur la même ligne que la partie
commençant par "Contenant.Worksheets".
Modifie donc comme ceci :

Contenant.Worksheets(NomFContenant & i).Range(LaPlgContenant).Copy _
Destination:=Recevant.Worksheets("Feuil3").Range("A" & y)

Cordialement
Pascal


"" a
écrit dans le message de
news:
Rebonsoir papou. Excuses moi ,mais à la ligne destination il met erreur de
syntaxe donc cela ne fonctionne pas . Cordialement Alain


Bonjour
Tu vas avoir un problème sur ta plage de destination car tu
n'incrémentes


que de 19 lignes pour la prochaine copie alors que tu souhaites copier
une


plage de 26 lignes !
Mais sinon, voici un moyen d'automatiser ton affaire :
(testé sur Excel 2003 avec une plage de cellules moins grande et un
nombre


de feuilles limité à 3, et incrémentation augmentée à 27)

Sub AlainBazire()
Dim Contenant As Workbook
Dim Recevant As Workbook
Set Contenant = Workbooks("inventaire.xls")
Set Recevant = Workbooks("Recap Inventaire.xls")
Dim LaPlgContenant$, NomFContenant$
LaPlgContenant = "A8:S26"
NomFContenant = "Liaison "
Dim i As Long, y As Long
Application.ScreenUpdating = False
y = 0
For i = 1 To 461
If i = 1 Then
y = y + 4
Else: y = y + 27 'à modifier
End If
Contenant.Worksheets(NomFContenant & i).Range(LaPlgContenant).Copy
Destination:=Recevant.Worksheets("Feuil3").Range("A" & y)
Application.CutCopyMode = False
Next i
Application.ScreenUpdating = True
End Sub

Cordialement
Pascal



""
a


écrit dans le message de
news:
Bonjour à tous et toutes. Voila ce que je désire réaliser. Dans
classeur



inventaire sélectionner feuil 1 nommée Liaison 1 la plage A8;S26
coller



special valeur dans classeur Récap Inventaire Feuille 3 en A4 puis
retourner

dans Inventaire feuille2 nommée Liaison 2 sélectionner la meme plage
A8:S26

la coller val spec dans Récap Inventaire Feuille 3 coller en A23 et
ainsi



de
suite décortiquée ainsi ca parait facile mais bon.Merci de votrte aide
comme

ca ca me servira beaucoup a comprendre quelques explications en plus
serait

super sympa. Merci d'avance à mes futurs professeurs .Amitiéés .Alain
PS



toujours une addition de 19 A4 A23 A 42 etc jusqu'à Liaison 461 Voila
suis



ja
assez clair? Merci déja














Avatar
papou
Bonjour
Tant mieux !
Cordialement
Pascal

"" a
écrit dans le message de
news:
Bonjour Papou. Merci pour ton aide oh combien précieuse cela fonctionne
impeccable. Merci beaucoup. Cordialement Alain


Bonjour
Normal car il y a un saut de ligne intempestif dans mon message
d'origine,


la partie "Destination:=" doit se trouver sur la même ligne que la
partie


commençant par "Contenant.Worksheets".
Modifie donc comme ceci :

Contenant.Worksheets(NomFContenant & i).Range(LaPlgContenant).Copy _
Destination:=Recevant.Worksheets("Feuil3").Range("A" & y)

Cordialement
Pascal


""
a


écrit dans le message de
news:
Rebonsoir papou. Excuses moi ,mais à la ligne destination il met
erreur de



syntaxe donc cela ne fonctionne pas . Cordialement Alain


Bonjour
Tu vas avoir un problème sur ta plage de destination car tu
n'incrémentes


que de 19 lignes pour la prochaine copie alors que tu souhaites
copier




une
plage de 26 lignes !
Mais sinon, voici un moyen d'automatiser ton affaire :
(testé sur Excel 2003 avec une plage de cellules moins grande et un
nombre


de feuilles limité à 3, et incrémentation augmentée à 27)

Sub AlainBazire()
Dim Contenant As Workbook
Dim Recevant As Workbook
Set Contenant = Workbooks("inventaire.xls")
Set Recevant = Workbooks("Recap Inventaire.xls")
Dim LaPlgContenant$, NomFContenant$
LaPlgContenant = "A8:S26"
NomFContenant = "Liaison "
Dim i As Long, y As Long
Application.ScreenUpdating = False
y = 0
For i = 1 To 461
If i = 1 Then
y = y + 4
Else: y = y + 27 'à modifier
End If
Contenant.Worksheets(NomFContenant & i).Range(LaPlgContenant).Copy
Destination:=Recevant.Worksheets("Feuil3").Range("A" & y)
Application.CutCopyMode = False
Next i
Application.ScreenUpdating = True
End Sub

Cordialement
Pascal



""
a


écrit dans le message de
news:
Bonjour à tous et toutes. Voila ce que je désire réaliser. Dans
classeur



inventaire sélectionner feuil 1 nommée Liaison 1 la plage A8;S26
coller



special valeur dans classeur Récap Inventaire Feuille 3 en A4 puis
retourner

dans Inventaire feuille2 nommée Liaison 2 sélectionner la meme
plage





A8:S26
la coller val spec dans Récap Inventaire Feuille 3 coller en A23
et





ainsi
de
suite décortiquée ainsi ca parait facile mais bon.Merci de votrte
aide





comme
ca ca me servira beaucoup a comprendre quelques explications en
plus





serait
super sympa. Merci d'avance à mes futurs professeurs .Amitiéés
.Alain





PS
toujours une addition de 19 A4 A23 A 42 etc jusqu'à Liaison 461
Voila





suis
ja
assez clair? Merci déja