OVH Cloud OVH Cloud

Recopie plusieurs fois données

2 réponses
Avatar
Francois
Bonjour =E0 tous,

Sur le forum, FS m'avait =E9t=E9 =E0 r=E9soudre un pb de macro.=20
Aujourd'hui, mes besoins =E9voluent, mais je ne sais pas=20
faire =E9voluer la macro...

Voici mon pb avec la macro plus bas :
J'ai un tableau (feuil1) avec en A des donn=E9es s=E9par=E9es=20
par un "-", avec des libell=E9s en B, et des mois (janv en=20
C, fev en D, ...)
La macro copie les donn=E9es de A sur le feuil2, puis les=20
s=E9parent (Split) en colonne B. Exemple 652-626-627 donne=20
en B1 =3D 625, en B2 =3D 626 et en B3627. C'est l=E0 ou ca se=20
complique :
J'aimerai r=E9cuperer en plus les donn=E9es des colonnes B et=20
celle du mois d=E9sir=E9 dont la valeur est saisie sur la=20
Feuil1, celA1, puis que la macro effectuent la m=EAme=20
op=E9ration mais avec plus de donn=E9es. J'explique :
Feuil1
A1 =3D 626-627
B1 =3D Voitures
C1 =3D 25
R=E9sultat attendu sur Feuil2:
A1 =3D 626
B1 =3D Voitures
C1 =3D 25
D1 =3D Janvier
Puis
A2 =3D 627
B2 =3D Voitures
C2 =3D 25
D2 =3D Janvier
L'id=E9e est de pouvoir obtenir un format pour int=E9gration=20
dans Access.
Les macros :
Sub Recopie()
Dim Tableau
Dim FeuilleCible As Worksheet
Dim i As Integer
Dim Plage As Range

Application.ScreenUpdating =3D False
Tableau =3D Array("R=E9el 2004")
Set FeuilleCible =3D Sheets("Control")

For i =3D 0 To UBound(Tableau)
With Sheets(Tableau(i))
Set Plage =3D .Range("a2:a" & _
.Range("a65535").End(xlUp).Row)
End With
Plage.Copy Destination:=3DFeuilleCible.Range
("a65535") _
.End(xlUp)(IIf(i =3D 0, 1, 2))
Next i
Application.ScreenUpdating =3D True
End Sub

Sub SuppLigne()
Worksheets("Control").Activate
Set Plg1 =3D Range("A1:A" & Range("A65536").End(xlUp).Row)
Plg1.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Sub FormaLeCompte()
Dim Cel As Range, nLColB&, X As Variant, n As Integer

Application.ScreenUpdating =3D False
nLColB =3D 1: Worksheets("Control").Activate

For Each Cel In Range("A1:a" & Range("a65536").End
(xlUp).Row)
=20
X =3D SplitFor97(Cel, "-")
=20
n =3D UBound(X) - LBound(X) + 1
If n <> 0 Then
Range("b" & nLColB & ":b" & nLColB - 1 + n) =3D _
Application.Transpose(X)
nLColB =3D nLColB + n
Else
Range("b" & nLColB) =3D ""
nLColB =3D nLColB + 1
End If
Next Cel
Application.ScreenUpdating =3D True
End Sub

Je vous remercie par avance pour votre aide

Cordialement,

Fran=E7ois

2 réponses

Avatar
Francois
Bonjour à tous,

Mon pb tient de l'irréalisable, ou n'ais je pas été clair
dans mes explications ?

Merci encore pour votre aide précieuse.

Cordialement,

François
-----Message d'origine-----
Bonjour à tous,

Sur le forum, FS m'avait été à résoudre un pb de macro.
Aujourd'hui, mes besoins évoluent, mais je ne sais pas
faire évoluer la macro...

Voici mon pb avec la macro plus bas :
J'ai un tableau (feuil1) avec en A des données séparées
par un "-", avec des libellés en B, et des mois (janv en
C, fev en D, ...)
La macro copie les données de A sur le feuil2, puis les
séparent (Split) en colonne B. Exemple 652-626-627 donne
en B1 = 625, en B2 = 626 et en B3627. C'est là ou ca se
complique :
J'aimerai récuperer en plus les données des colonnes B et
celle du mois désiré dont la valeur est saisie sur la
Feuil1, celA1, puis que la macro effectuent la même
opération mais avec plus de données. J'explique :
Feuil1
A1 = 626-627
B1 = Voitures
C1 = 25
Résultat attendu sur Feuil2:
A1 = 626
B1 = Voitures
C1 = 25
D1 = Janvier
Puis
A2 = 627
B2 = Voitures
C2 = 25
D2 = Janvier
L'idée est de pouvoir obtenir un format pour intégration
dans Access.
Les macros :
Sub Recopie()
Dim Tableau
Dim FeuilleCible As Worksheet
Dim i As Integer
Dim Plage As Range

Application.ScreenUpdating = False
Tableau = Array("Réel 2004")
Set FeuilleCible = Sheets("Control")

For i = 0 To UBound(Tableau)
With Sheets(Tableau(i))
Set Plage = .Range("a2:a" & _
.Range("a65535").End(xlUp).Row)
End With
Plage.Copy Destination:þuilleCible.Range
("a65535") _
.End(xlUp)(IIf(i = 0, 1, 2))
Next i
Application.ScreenUpdating = True
End Sub

Sub SuppLigne()
Worksheets("Control").Activate
Set Plg1 = Range("A1:A" & Range("A65536").End(xlUp).Row)
Plg1.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Sub FormaLeCompte()
Dim Cel As Range, nLColB&, X As Variant, n As Integer

Application.ScreenUpdating = False
nLColB = 1: Worksheets("Control").Activate

For Each Cel In Range("A1:a" & Range("a65536").End
(xlUp).Row)

X = SplitFor97(Cel, "-")

n = UBound(X) - LBound(X) + 1
If n <> 0 Then
Range("b" & nLColB & ":b" & nLColB - 1 + n) = _
Application.Transpose(X)
nLColB = nLColB + n
Else
Range("b" & nLColB) = ""
nLColB = nLColB + 1
End If
Next Cel
Application.ScreenUpdating = True
End Sub

Je vous remercie par avance pour votre aide

Cordialement,

François
.



Avatar
Frédéric Sigonneau
Bonsoir,

J'ai un tableau (feuil1) avec en A des données séparées
par un "-", avec des libellés en B, et des mois (janv en
C, fev en D, ...)


Et quel est la méthode pour savoir quel est le mois à utiliser ? ie dans quelle
colonne, de C pour janvier à N pour décembre, faut-il aller chercher le mois à
recopier en colonne D sur la feuille 2 ?
Avec ce renseignement il devrait être possible de modifier la procédure
FormaLeCompte pour obtenir ce que tu souhaites.

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonjour à tous,

Sur le forum, FS m'avait été à résoudre un pb de macro.
Aujourd'hui, mes besoins évoluent, mais je ne sais pas
faire évoluer la macro...

Voici mon pb avec la macro plus bas :
J'ai un tableau (feuil1) avec en A des données séparées
par un "-", avec des libellés en B, et des mois (janv en
C, fev en D, ...)
La macro copie les données de A sur le feuil2, puis les
séparent (Split) en colonne B. Exemple 652-626-627 donne
en B1 = 625, en B2 = 626 et en B3627. C'est là ou ca se
complique :
J'aimerai récuperer en plus les données des colonnes B et
celle du mois désiré dont la valeur est saisie sur la
Feuil1, celA1, puis que la macro effectuent la même
opération mais avec plus de données. J'explique :
Feuil1
A1 = 626-627
B1 = Voitures
C1 = 25
Résultat attendu sur Feuil2:
A1 = 626
B1 = Voitures
C1 = 25
D1 = Janvier
Puis
A2 = 627
B2 = Voitures
C2 = 25
D2 = Janvier
L'idée est de pouvoir obtenir un format pour intégration
dans Access.
Les macros :
Sub Recopie()
Dim Tableau
Dim FeuilleCible As Worksheet
Dim i As Integer
Dim Plage As Range

Application.ScreenUpdating = False
Tableau = Array("Réel 2004")
Set FeuilleCible = Sheets("Control")

For i = 0 To UBound(Tableau)
With Sheets(Tableau(i))
Set Plage = .Range("a2:a" & _
.Range("a65535").End(xlUp).Row)
End With
Plage.Copy Destination:þuilleCible.Range
("a65535") _
.End(xlUp)(IIf(i = 0, 1, 2))
Next i
Application.ScreenUpdating = True
End Sub

Sub SuppLigne()
Worksheets("Control").Activate
Set Plg1 = Range("A1:A" & Range("A65536").End(xlUp).Row)
Plg1.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Sub FormaLeCompte()
Dim Cel As Range, nLColB&, X As Variant, n As Integer

Application.ScreenUpdating = False
nLColB = 1: Worksheets("Control").Activate

For Each Cel In Range("A1:a" & Range("a65536").End
(xlUp).Row)

X = SplitFor97(Cel, "-")

n = UBound(X) - LBound(X) + 1
If n <> 0 Then
Range("b" & nLColB & ":b" & nLColB - 1 + n) = _
Application.Transpose(X)
nLColB = nLColB + n
Else
Range("b" & nLColB) = ""
nLColB = nLColB + 1
End If
Next Cel
Application.ScreenUpdating = True
End Sub

Je vous remercie par avance pour votre aide

Cordialement,

François