Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Avis au amateurs de simplification de code

2 réponses
Avatar
Jean-Paul GIORGETTI
Bonjour,

J'aimerais simplifier cette petite procédure. Elle a pour mission de
récupérer un nombre variable de données dans un nombre variable de tableaux
identiques (de 39 lignes) présent sur une même feuille de calcul. Les
informations récupérées sont collées dans une autre feuille pour créer un
graphique.

Les données dans les tableaux sont placées verticalement, alors que dans la
feuille de destination elles sont placées horizontalement. Certaines
cellules de la feuille source ne sont pas "récupérées" lors de la copie.

J'ai fait ce bout de code, qui fonctionne très bien mais que je ne trouve
pas très "élégant" et suis persuadé qu'il y a bien mieux à faire. Sachant
que l'on progresse dans la douleur, je vous colle ci-dessous le code de ma
procédure.
J'avais essayé de récupérer toutes les données dans un objet range et faire
un collage spécial transposé, mais les cellules non récupérées créaient des
colonnes vide.

Voilà, avis aux amateurs, et merci pour vos suggestions.

Jean-Paul


Sub DonnéesGraphique()
'Dim GraphZone As Range
'Set GraphZone = Nothing

Sheets("Extraction Graphiques").Select
Range("A2").Select


NbFolios = Feuil1.[A65000].End(xlUp).Row / 39
For x = 0 To NbFolios - 1
Ldépart = 4 + (x * 39)
ColDépart = 4
For H = ColDépart To 16
If Feuil1.Cells(Ldépart, H).Value <> "" Then 'je
récupère les données de la colonne si la cellule est renseignée
ActiveCell.Value = Feuil1.Cells(Ldépart, H).Value
ActiveCell.Offset(0, 1).Value = Feuil1.Cells(Ldépart + 2,
H).Value
ActiveCell.Offset(0, 2).Value = Feuil1.Cells(Ldépart + 3,
H).Value
ActiveCell.Offset(0, 3).Value = Feuil1.Cells(Ldépart + 5,
H).Value
ActiveCell.Offset(0, 4).Value = Feuil1.Cells(Ldépart + 31,
H).Value
ActiveCell.Offset(1, 0).Activate
End If
Next
Next
End Sub

2 réponses

Avatar
Daniel.C
Bonjour.
Il n'y a pas grand chose à "gratter" dessus. J'ai enlevé les "select" et
modifié quelques détails. La macro n'est pas testée.

Sub DonnéesGraphique()
Dim sh As Worksheet, Ctr As Integer
'Set GraphZone = Nothing

Set sh = Sheets("Extraction Graphiques")

Ctr = 2

With Feuil1
For x = 0 To .[A65000].End(xlUp).Row / 39 - 1
Ldépart = 4 + (x * 39)
For H = 4 To 16
If Feuil1.Cells(Ldépart, H).Value <> "" Then 'je
récupère les données de la colonne si la cellule est renseignée
sh.Cells(Ctr, 1).Value = .Cells(Ldépart, H).Value
sh.Cells(Ctr, 1).Offset(0, 1).Value = .Cells(Ldépart + 2,
H).Value
sh.Cells(Ctr, 1).Offset(0, 2).Value = .Cells(Ldépart + 3,
H).Value
sh.Cells(Ctr, 1).Offset(0, 3).Value = .Cells(Ldépart + 5,
H).Value
sh.Cells(Ctr, 1).Offset(0, 4).Value = .Cells(Ldépart + 31,
H).Value
Ctr = Ctr + 1
End If
Next
Next
End With
End Sub

Cordialement.
Daniel
"Jean-Paul GIORGETTI" a écrit dans le message
de news:
Bonjour,

J'aimerais simplifier cette petite procédure. Elle a pour mission de
récupérer un nombre variable de données dans un nombre variable de
tableaux
identiques (de 39 lignes) présent sur une même feuille de calcul. Les
informations récupérées sont collées dans une autre feuille pour créer un
graphique.

Les données dans les tableaux sont placées verticalement, alors que dans
la
feuille de destination elles sont placées horizontalement. Certaines
cellules de la feuille source ne sont pas "récupérées" lors de la copie.

J'ai fait ce bout de code, qui fonctionne très bien mais que je ne trouve
pas très "élégant" et suis persuadé qu'il y a bien mieux à faire. Sachant
que l'on progresse dans la douleur, je vous colle ci-dessous le code de ma
procédure.
J'avais essayé de récupérer toutes les données dans un objet range et
faire
un collage spécial transposé, mais les cellules non récupérées créaient
des
colonnes vide.

Voilà, avis aux amateurs, et merci pour vos suggestions.

Jean-Paul


Sub DonnéesGraphique()
'Dim GraphZone As Range
'Set GraphZone = Nothing

Sheets("Extraction Graphiques").Select
Range("A2").Select


NbFolios = Feuil1.[A65000].End(xlUp).Row / 39
For x = 0 To NbFolios - 1
Ldépart = 4 + (x * 39)
ColDépart = 4
For H = ColDépart To 16
If Feuil1.Cells(Ldépart, H).Value <> "" Then 'je
récupère les données de la colonne si la cellule est renseignée
ActiveCell.Value = Feuil1.Cells(Ldépart, H).Value
ActiveCell.Offset(0, 1).Value = Feuil1.Cells(Ldépart + 2,
H).Value
ActiveCell.Offset(0, 2).Value = Feuil1.Cells(Ldépart + 3,
H).Value
ActiveCell.Offset(0, 3).Value = Feuil1.Cells(Ldépart + 5,
H).Value
ActiveCell.Offset(0, 4).Value = Feuil1.Cells(Ldépart + 31,
H).Value
ActiveCell.Offset(1, 0).Activate
End If
Next
Next
End Sub





Avatar
Jean-Paul GIORGETTI
Bonjour Daniel,

Merci pour le temps consacré, je vais tester.

A+

Jean-Paul

"Daniel.C" a écrit dans le message de news:
#
Bonjour.
Il n'y a pas grand chose à "gratter" dessus. J'ai enlevé les "select" et
modifié quelques détails. La macro n'est pas testée.

Sub DonnéesGraphique()
Dim sh As Worksheet, Ctr As Integer
'Set GraphZone = Nothing

Set sh = Sheets("Extraction Graphiques")

Ctr = 2

With Feuil1
For x = 0 To .[A65000].End(xlUp).Row / 39 - 1
Ldépart = 4 + (x * 39)
For H = 4 To 16
If Feuil1.Cells(Ldépart, H).Value <> "" Then 'je
récupère les données de la colonne si la cellule est renseignée
sh.Cells(Ctr, 1).Value = .Cells(Ldépart, H).Value
sh.Cells(Ctr, 1).Offset(0, 1).Value = .Cells(Ldépart + 2,
H).Value
sh.Cells(Ctr, 1).Offset(0, 2).Value = .Cells(Ldépart + 3,
H).Value
sh.Cells(Ctr, 1).Offset(0, 3).Value = .Cells(Ldépart + 5,
H).Value
sh.Cells(Ctr, 1).Offset(0, 4).Value = .Cells(Ldépart + 31,
H).Value
Ctr = Ctr + 1
End If
Next
Next
End With
End Sub

Cordialement.
Daniel
"Jean-Paul GIORGETTI" a écrit dans le
message

de news:
Bonjour,

J'aimerais simplifier cette petite procédure. Elle a pour mission de
récupérer un nombre variable de données dans un nombre variable de
tableaux
identiques (de 39 lignes) présent sur une même feuille de calcul. Les
informations récupérées sont collées dans une autre feuille pour créer
un


graphique.

Les données dans les tableaux sont placées verticalement, alors que dans
la
feuille de destination elles sont placées horizontalement. Certaines
cellules de la feuille source ne sont pas "récupérées" lors de la copie.

J'ai fait ce bout de code, qui fonctionne très bien mais que je ne
trouve


pas très "élégant" et suis persuadé qu'il y a bien mieux à faire.
Sachant


que l'on progresse dans la douleur, je vous colle ci-dessous le code de
ma


procédure.
J'avais essayé de récupérer toutes les données dans un objet range et
faire
un collage spécial transposé, mais les cellules non récupérées créaient
des
colonnes vide.

Voilà, avis aux amateurs, et merci pour vos suggestions.

Jean-Paul


Sub DonnéesGraphique()
'Dim GraphZone As Range
'Set GraphZone = Nothing

Sheets("Extraction Graphiques").Select
Range("A2").Select


NbFolios = Feuil1.[A65000].End(xlUp).Row / 39
For x = 0 To NbFolios - 1
Ldépart = 4 + (x * 39)
ColDépart = 4
For H = ColDépart To 16
If Feuil1.Cells(Ldépart, H).Value <> "" Then 'je
récupère les données de la colonne si la cellule est renseignée
ActiveCell.Value = Feuil1.Cells(Ldépart, H).Value
ActiveCell.Offset(0, 1).Value = Feuil1.Cells(Ldépart + 2,
H).Value
ActiveCell.Offset(0, 2).Value = Feuil1.Cells(Ldépart + 3,
H).Value
ActiveCell.Offset(0, 3).Value = Feuil1.Cells(Ldépart + 5,
H).Value
ActiveCell.Offset(0, 4).Value = Feuil1.Cells(Ldépart + 31,
H).Value
ActiveCell.Offset(1, 0).Activate
End If
Next
Next
End Sub