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 Sub

En 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 Sub

Je 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.

Rechercher des sujets similaires à "macro"