Macro
Bonjour,
A la suite de nombreuses problèmes solutionnés grâce à des macros et surtout aux connaissances des personnes qui me les ont crées, je me suis dit que je devais m'y mettre un peu aussi car finalement ça dépanne bien quand les formules ne peuvent plus nous combler.
De ce fait, j'ai tenté pour l'un de mes fichiers de créer une macro qui ferait :
Si dans mon onglet tableau la case O2(pays) n'est pas vide, on copie son contenu ainsi que le contenu de la cellule I2(entreprise) dans l'onglet entreprise cellule A2 et B2. On passe à la cellule du dessous O3 et on recommence la même opération. Idem jusqu'à environ O500.
J'ai donc tenté ceci mais je ne suis pas sûr du résultat, je voudrais donc si possible vos avis ou corrections.
Sub macroentreprise()
Dim ligne As Integer
Dim pays As Integer
Dim entreprise As Integer
ligne = 2
pays = 15
entreprise = 9
For ligne = 2 To ligne = 500
If Worksheets("tableau").Cells(ligne, pays).Value <> "" Then
Worksheets("entreprise").Cells(ligne, 2).Value = Worksheets("tableau").Cells(ligne, pays).Value
Worksheets("entreprise").Cells(ligne, 1).Value = Worksheets("tableau").Cells(ligne, entreprise).Value
End If
ligne = ligne + 1
Next
End SubEn vous remerciant.
Cordialement.
Bonjour,
Une proposition d'amélioration
Sub macroentreprise()
Dim LigneS As Integer, LigneC As Integer
LigneC = 2
With Worksheets("Tableau")
For LigneS = 2 To 500
If .Cells(LigneS, 15).Value <> "" Then
Worksheets("entreprise").Cells(LigneC, 2).Value = .Cells(LigneS, 15).Value
Worksheets("entreprise").Cells(LigneC, 1).Value = .Cells(LigneS, 9).Value
LigneC = LigneC + 1
End If
Next
End With
End SubJe te laisse comparer et je reste à disposition pour les questions éventuelles.
A+
Bonjour et merci pour cette réponse,
Je comprends le With et qu'il était inutile de créer les variables entreprise et pays mais pourquoi deux Lignes (LigneSet LigneC)?
Ma macro comportait-elle des erreurs?
Où la placer dans mon fichier pour qu'elle s’exécute automatiquement?
Cordialement
pourquoi deux Lignes (LigneS et LigneC) ?
LigneS représente la ligne traitée dans la feuille source ("Tableau")
LigneC représente la ligne traitée dans la feuille cible ("entreprise")
L'intérêt de dissocier ces deux variables, c'est d'éviter d'avoir une ligne vide dans la feuille "entreprise" quand la condition .Cells(LigneS, 15).Value <> "" n'est pas vérifiée.
Ma macro comportait-elle des erreurs ?
Deux erreurs principales :
1) Il faut écrire For ligne = 2 To 500 et non pas For ligne = 2 To ligne = 500
2) dans la boucle, tu ne dois pas incrémenter avec ligne = ligne + 1 puisque cette incrémentation est réalisée par for ... next
Où la placer dans mon fichier pour qu'elle s’exécute automatiquement ?
Tu peux la placer dans un module standard (Modules / Module1).
A+
Merci beaucoup pour ces précisions.
Cette fois tout est clair dans ma petite tête.
Encore merci.
Cordialement.