De traduction d'une macro
Bonsoir à tous.
J'aurais besoin d'un énorme coup de main de la part de qui en aurait le courage et la gentillesse.
N'étant pas très bon dans le codage des macros, mais voulant absolument comprendre celle ci, qui pourrait me traduire, étape par étape, ce que celle ci fait (les actions)... Cela me permettrait de remplacer par mes valeurs.
Je la trouve hyper utile, mais quand je la mets dans mon tableau, impossible de transposer...
Merci d'avance!
La voici :
Sub Recopie()
Dim F1 As Worksheet, F2 As Worksheet
Dim LigF1 As Long, LigF2 As Long
Dim ColF1 As Integer, ColF2 As Integer
Dim I As Integer
Dim F3 As Worksheet
Application.ScreenUpdating = False
Set F1 = Sheets("Start")
Set F2 = Sheets("Label")
Set F3 = Sheets.Add
F1.Cells.Copy
F3.Range("A1").PasteSpecial Paste:=xlPasteValues
Application.Calculation = xlCalculationManual
F2.Rows("24:" & Rows.Count).Delete
LigF1 = 7: LigF2 = 1: ColF2 = 2
While F1.Cells(LigF1, "G") <> ""
If LigF1 <> 7 Then
F2.Range("B1:S22").Copy F2.Range("B" & LigF2)
F2.Rows(LigF2 + 10).RowHeight = 12.75
End If
F2.Cells(LigF2, "B") = F3.Cells(LigF1, "G")
For I = 0 To 5
F2.Cells(LigF2 + 11, ColF2 + (3 * I)) = F3.Cells(LigF1 + 6 + I, "O")
F2.Cells(LigF2 + 14, ColF2 + (3 * I)) = F3.Cells(LigF1 + 6 + I, "I")
F2.Cells(LigF2 + 17, ColF2 + (3 * I)) = F3.Cells(LigF1 + 6 + I, "X")
F2.Cells(LigF2 + 17, ColF2 + 1 + (3 * I)) = F3.Cells(LigF1 + 6 + I, "Z")
F2.Cells(LigF2 + 20, ColF2 + (3 * I)) = F3.Cells(LigF1, "AJ")
Next I
LigF2 = LigF2 + 23: LigF1 = LigF1 + 13
Wend
Application.DisplayAlerts = False
F3.Delete
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Création terminée"
End Sub
Bonjour,
En espérant que ce sera suffisant ...
Sub Recopie() ' début de la macro
Dim F1 As Worksheet, F2 As Worksheet ' déclaration des variables
Dim LigF1 As Long, LigF2 As Long ' décla..
Dim ColF1 As Integer, ColF2 As Integer ' décla..
Dim i As Integer ' décla..
Dim F3 As Worksheet ' déclaration des variables
Application.ScreenUpdating = False ' fige temporairement l'affichage pour augmenter la rapidité de l'exécution de la macro
Set F1 = Sheets("Start") ' renseigne la variable (donne une valeur)
Set F2 = Sheets("Label") ' renseigne la variable (donne une valeur)
Set F3 = Sheets.Add ' F3 sera une nouvelle feuille temporaire
F1.Cells.Copy ' prépare la copie de toutes les cellules de F1 qui est la (Sheets("Start"))
F3.Range("A1").PasteSpecial Paste:=xlPasteValues ' collage spécial de la copie de F1 en F3 (sheets("Label")) cellule A1
Application.Calculation = xlCalculationManual ' passe le calcul de la feuille en mode manuel
F2.Rows("24:" & Rows.Count).Delete ' supprime les lignes de 24 jusqu'à la fin de la feuille
LigF1 = 7: LigF2 = 1: ColF2 = 2 ' renseigne les 3 variables
While F1.Cells(LigF1, "G") <> "" ' démarre une boucle qui s'exécutera tant que la condition sera fausse
If LigF1 <> 7 Then ' Si la variable est différente de 7
F2.Range("B1:S22").Copy F2.Range("B" & LigF2) ' copie B1:S22 dans B à la ligne contenue dans la variable
F2.Rows(LigF2 + 10).RowHeight = 12.75 ' ajuste la hauteur des lignes
End If ' fin du Si
F2.Cells(LigF2, "B") = F3.Cells(LigF1, "G") ' copie la valeur de F3.Gx dans F2.Gx (x étant la valeur de la variable FigFx)
For i = 0 To 5 ' boucle ne changeant la valeur de i
F2.Cells(LigF2 + 11, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "O") ' copie une cellule de F3 en F2
F2.Cells(LigF2 + 14, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "I") ' copie une cellule de F3 en F2
F2.Cells(LigF2 + 17, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "X") ' copie une cellule de F3 en F2
F2.Cells(LigF2 + 17, ColF2 + 1 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "Z") ' copie une cellule de F3 en F2
F2.Cells(LigF2 + 20, ColF2 + (3 * i)) = F3.Cells(LigF1, "AJ") ' copie une cellule de F3 en F2
Next i
LigF2 = LigF2 + 23: LigF1 = LigF1 + 13 ' renseigne les variables
Wend ' boucle avec l'appel de la boucle While
Application.DisplayAlerts = False ' mets en pause les alertes (fenêtre de dialogue)
F3.Delete ' supprime la feuille temporaire sans demander confirmation
Application.DisplayAlerts = True ' réactive les alertes
Application.Calculation = xlCalculationAutomatic ' repasse le calcul de la feuille en automatique
MsgBox "Création terminée" ' message
End Sub ' fin de la macroric
Bonjour,
En espérant que ce sera suffisant ...
Sub Recopie() ' début de la macro Dim F1 As Worksheet, F2 As Worksheet ' déclaration des variables Dim LigF1 As Long, LigF2 As Long ' décla.. Dim ColF1 As Integer, ColF2 As Integer ' décla.. Dim i As Integer ' décla.. Dim F3 As Worksheet ' déclaration des variables Application.ScreenUpdating = False ' fige temporairement l'affichage pour augmenter la rapidité de l'exécution de la macro Set F1 = Sheets("Start") ' renseigne la variable (donne une valeur) Set F2 = Sheets("Label") ' renseigne la variable (donne une valeur) Set F3 = Sheets.Add ' F3 sera une nouvelle feuille temporaire F1.Cells.Copy ' prépare la copie de toutes les cellules de F1 qui est la (Sheets("Start")) F3.Range("A1").PasteSpecial Paste:=xlPasteValues ' collage spécial de la copie de F1 en F3 (sheets("Label")) cellule A1 Application.Calculation = xlCalculationManual ' passe le calcul de la feuille en mode manuel F2.Rows("24:" & Rows.Count).Delete ' supprime les lignes de 24 jusqu'à la fin de la feuille LigF1 = 7: LigF2 = 1: ColF2 = 2 ' renseigne les 3 variables While F1.Cells(LigF1, "G") <> "" ' démarre une boucle qui s'exécutera tant que la condition sera fausse If LigF1 <> 7 Then ' Si la variable est différente de 7 F2.Range("B1:S22").Copy F2.Range("B" & LigF2) ' copie B1:S22 dans B à la ligne contenue dans la variable F2.Rows(LigF2 + 10).RowHeight = 12.75 ' ajuste la hauteur des lignes End If ' fin du Si F2.Cells(LigF2, "B") = F3.Cells(LigF1, "G") ' copie la valeur de F3.Gx dans F2.Gx (x étant la valeur de la variable FigFx) For i = 0 To 5 ' boucle ne changeant la valeur de i F2.Cells(LigF2 + 11, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "O") ' copie une cellule de F3 en F2 F2.Cells(LigF2 + 14, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "I") ' copie une cellule de F3 en F2 F2.Cells(LigF2 + 17, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "X") ' copie une cellule de F3 en F2 F2.Cells(LigF2 + 17, ColF2 + 1 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "Z") ' copie une cellule de F3 en F2 F2.Cells(LigF2 + 20, ColF2 + (3 * i)) = F3.Cells(LigF1, "AJ") ' copie une cellule de F3 en F2 Next i LigF2 = LigF2 + 23: LigF1 = LigF1 + 13 ' renseigne les variables Wend ' boucle avec l'appel de la boucle While Application.DisplayAlerts = False ' mets en pause les alertes (fenêtre de dialogue) F3.Delete ' supprime la feuille temporaire sans demander confirmation Application.DisplayAlerts = True ' réactive les alertes Application.Calculation = xlCalculationAutomatic ' repasse le calcul de la feuille en automatique MsgBox "Création terminée" ' message End Sub ' fin de la macroric
Bonsoir et tout d'abord un très grand merci! Cela m'aide beaucoup
Cependant, je ne comprends pas :
- les 3 variables
LigF1 = 7: LigF2 = 1: ColF2 = 2. A quoi correspondent les nombres? Des lignes? Des colonnes? Comment c'est instauré?
-
While F1.Cells(LigF1, "G"), quelle est cette condition?
-
If LigF1 <> 7 Thensi LigF1=7, la ligne est la 7eme? Comment LigF1 peut être différente?
Merci et bon weekend
Bonjour,
Il me serait plus facile de répondre si je pouvais accéder au fichier.
Mais je vais faire ce que je peux...
Cependant, je ne comprends pas :
- les 3 variables
LigF1 = 7: LigF2 = 1: ColF2 = 2. A quoi correspondent les nombres? Des lignes? Des colonnes? Comment c'est instauré?
LigF1 > ligne > renseigné avec la valeur 7 > donc, 7e ligne
LigF2 > ligne > renseigné avec la valeur 1 > donc, 1re ligne
ColF2 > colonne > renseigné avec la valeur 2 > donc, 2e colonne
Le choix du nom des variables revient à la personne qui a composé le code.
Ces valeurs ont été données selon la structure du fichier.
-
, quelle est cette condition?While F1.Cells(LigF1, "G") <> ""
Boucle tant que le contenu de la cellule Gx (x étant la valeur de LigF1 à ce moment) sera différente de "" (vide), < plus petit que, > plus grand que, <> valeur située entre les deux... donc différente de.
2 guillemets collés veut dire vide.
, la ligne est la 7eme? Comment LigF1 peut être différente?If LigF1 <> 7 Then si LigF1=7
Regarde juste avant la commande Wend, les variables LigF2 et LigF1 reçoivent de nouvelles valeurs
La valeur de la variable LigF2 est incrémentée de 23 > donc si au début la variable valait 7, elle vaut maintenant 30, un saut de 23 lignes > et ce à chaque fois que la boucle passe par là, elle en augmente la valeur de 23.
Idem pour LigF1, mais pour elle la valeur de l'incrément est de 13 (saut de 13 lignes plus bas).
ric
Bonjour,
Il me serait plus facile de répondre si je pouvais accéder au fichier.
Mais je vais faire ce que je peux...
Cependant, je ne comprends pas :
- les 3 variables
LigF1 = 7: LigF2 = 1: ColF2 = 2. A quoi correspondent les nombres? Des lignes? Des colonnes? Comment c'est instauré?
LigF1 > ligne > renseigné avec la valeur 7 > donc, 7e ligne
LigF2 > ligne > renseigné avec la valeur 1 > donc, 1re ligne
ColF2 > colonne > renseigné avec la valeur 2 > donc, 2e colonne
Le choix du nom des variables revient à la personne qui a composé le code.
Ces valeurs ont été données selon la structure du fichier.
-
, quelle est cette condition?While F1.Cells(LigF1, "G") <> ""
Boucle tant que le contenu de la cellule Gx (x étant la valeur de LigF1 à ce moment) sera différente de "" (vide), < plus petit que, > plus grand que, <> valeur située entre les deux... donc différente de.
2 guillemets collés veut dire vide.
, la ligne est la 7eme? Comment LigF1 peut être différente?If LigF1 <> 7 Then si LigF1=7
Regarde juste avant la commande Wend, les variables LigF2 et LigF1 reçoivent de nouvelles valeurs
La valeur de la variable LigF2 est incrémentée de 23 > donc si au début la variable valait 7, elle vaut maintenant 30, un saut de 23 lignes > et ce à chaque fois que la boucle passe par là, elle en augmente la valeur de 23.
Idem pour LigF1, mais pour elle la valeur de l'incrément est de 13 (saut de 13 lignes plus bas).
ric
MERCI BEAUCOUP RIC!!
J'ai reussi à appliqué la macro à mon fichier.
Il n'y a plus une seule erreur
Est ce qu'à tout hasard, tu saurais me dire si je peux intégrer une ligne à cette macro qui me mettrait toutes les colonnes de la feuille F2 à 1,80cm (sortie d'imprimante)
Je sais que c'est plutôt galère à gérer les dimensions dans excel...
Bonjour,
Complément ...
Si je parle de range = plage d’une ou plusieurs cellules ... on écrit la colonne puis la ligne :
- Range("A1") > une cellule
- Range("A1:C5") > une plage de cellules
Si je parle de Cells = une seule cellule ... on écrit la ligne puis la colonne :
- Cells(2, 4) > équivaut à D2
Dans les 2 cas, les valeurs peuvent être remplacées par des variables contenant des valeurs :
Supposons que X = 3 et Y = 5
- Cells(X, Y) > équivaut à E3
- Cells(X, "E") > équivaut à E3
- Range("A" & X) > équivaut à A3
- Range("A1:D" & Y) > équivaut à la plage A1:D5
- Range("A"& X & ":D" & Y) > équivaut à la plage A3:D5
Espérant avoir réussi à te mêler un peu ...
ric
Bonjour,
Complément ...
Si je parle de range = plage d’une ou plusieurs cellules ... on écrit la colonne puis la ligne :
- Range("A1") > une cellule
- Range("A1:C5") > une plage de cellules
Si je parle de Cells = une seule cellule ... on écrit la ligne puis la colonne :
- Cells(2, 4) > équivaut à D2
Dans les 2 cas, les valeurs peuvent être remplacées par des variables contenant des valeurs :
Supposons que X = 3 et Y = 5
- Cells(X, Y) > équivaut à E3
- Cells(X, "E") > équivaut à E3
- Range("A" & X) > équivaut à A3
- Range("A1:D" & Y) > équivaut à la plage A1:D5
- Range("A"& X & ":D" & Y) > équivaut à la plage A3:D5
Espérant avoir réussi à te mêler un peu ...
ric
Un ÉNORME merci !!! Tu ne m'as pas du tout emmêlé mais au contraire beaucoup aidé!