Adapation de ma macro a toute la feuille

Bonjour,

Voila grace a vous j'ai reussi a faire une macro pour une ligne et a l'associer a un bouton. Mais j'ai un autre soucis, j'aimerais que la macro soit valable pour plusieurs lignes et pas que pour une.

voici mon code :

If Range("D1") <> "" And Range("E1") <> "" And Range("F1") <> "" Then

Range("A1") = "Prêt"

Else

Range("A1") = "A remplir"

End If

If Range("A1") = "Prêt" And Range("G1") <> "" Then

Range("A1") = "En cours"

End If

If Range("A1") = "En cours" And Range("H1") <> "" Then

Range("A1") = "Soldé"

End If

Par exemple de le faire pour les lignes 10 a 50, j'avais penser a une boucle for mais j'arrive pas a la conditionner en excel.

Est-ce qu'il existe une facon de modifier les numeros de lignes par une variable ?

Merci d'avance Ftomi

Bonsoir,

J'aimerais mieux voir ton fichier afin de mieux te répondre.

Là le critère est effectué sur la ligne 11 et en fonction de cette réponse tu complètes depuis la ligne 11 jusqu'à la ligne 50. C'est juste Range(A11:A50) ?? Ce ne serait pas plutôt Range("A11") seul ?

A te relire

Dan

Salut le forum

Ftomi, tu aurais du rester sur https://forum.excel-pratique.com/viewtopic.php?t=11091

C'est une suite de ta question...

Mytå

@ Dan : mon fichier ne comporte que cette macro pour le moment, je fait des test macro pour voir leur fonctionnement, j'ai modifier mon code car je part en faite de la ligne 1

edit : https://www.excel-pratique.com/~files/doc2/HPscatestmacro.xls

@ Myta : mon autre post etant résolu, c'est pourquoi j'en ai ouvert un autre, je pensais bien faire ...

ou alors a part faire une bouble for ou un truc du meme genre il existe pas une variable que l'on pourrais mettre a la place des chiffre qui permettrais d'excecuter la macro a partir de n'importe quel ligne ?

Bonjour,

Je te propose la solution suivante :

Range("A11").Select

For i = 1 To 40

If ActiveCell.Value <> "" And ActiveCell.Offset(0, 4) <> "" And ActiveCell.Offset(0, 5) <> "" Then

ActiveCell.Value = "Prêt"

Else

ActiveCell.Value = "A remplir"

End If

If ActiveCell.Value = "Prêt" And ActiveCell.Offset(0, 6) <> "" Then

ActiveCell.Value = "En cours"

End If

If ActiveCell.Value = "En cours" And ActiveCell.Offset(0, 7) <> "" Then

Range("A11") = "Soldé"

End If

ActiveCell.Offset(1, 0).Select

Next i

Cordialement

Salut,

Merci je vais tester ca et je te dit si c'est bon

Cdt

Ftomi

re,

Tout d'abord Merci, pasque c'est se que je voulais faire, mais maintenant peut-tu m'expliquer à quoi sert ActiveCell.value et ActiveCell.offset ? pasque leur explication dans l'aide d'excel n'est pas assez explicite

Merci encore

Ftomi

activecell renvoie à la cellule active.

Value renvoie la valeur de la cellule

offset(X,Y) décale de X lignes et Y colonnes

merci pour les infos j'en prend note =)

bonne soirée

bonjour forum,

voila après rédaction de ma macro j'aimerais avoir votre avis dessus, et savoir si j'ai fait des erreurs de style vu que je suis debutant

Merci d'avance

Ftomi

https://www.excel-pratique.com/~files/doc2/t5sfHtestmacro.xls

Bonjour Ftomi,

Juste une chose qui me choque eu peu : tes messages d'erreur.

Vous n'avez pas bien effectuer votre copier-coller depuis la GMAO : NON, effectué

Vous n'avez pas remplit une date de programmation : NON, rempli

Vous vous êtes tromper de ligne sur la date de réalisation : NON, trompé

Je sais, c'est pas très grave, c'était juste pour faire une remarque !

salut,

merci j'en prend note, je les trouvais un peu lourd aussi =)

Cdt

Ftomi

1septembre.xlsm (24.28 Ko)

Re,

je reviens sur ton pb. En voyant ton code je ne comprends pas très la répétition de certaines lignes.

Ce que tu devrais expliquer :

  • Les critères de choix pour compléter la colonne A --> D, E et F sont vides ?
  • La colonne à compléter avec les mots "encours", "A remplir", "soldé" est toujours la colonne A
  • Pourquoi de 1 à 36 et pas jusque 50, 100 ou autre ? Quel est le critère ?

A te relire

Dan

salut, merci de t'interesser a mon post,

  • alors les cases d,e,f, seront remplies a l'aide d'une autre feuille manuellement, la macro servira a checker si ces cases on été bien remplie, après les cases g et h seront remplies bien plus tard.
  • la colonne a servira de reférence pour connaitre l'avancement des autres colonnes, savoir celle qui sont remplies ou pas
  • il n'y a pas de critère pour les lignes, le chiffre 36 est pris au hasard, se critère sera defini plus tard

J'espère avoir été clair, si c'est pas le cas dit le moi =)

Ftomi

re,

essaie ce code :

Sub Macro2()
'Macro Dan pour Ftomi
Dim cel As Range
Dim i As Byte

For i = 0 To 36
Set cel = Range("A" & i + 4)

With cel

    If .Offset(0, 3) <> "" And .Offset(0, 4) <> "" And .Offset(0, 5) <> "" Then 'condition 1
        .Interior.Color = xlColorIndexNone
        .Value = "Prêt"

    ElseIf .Offset(0, 3) = "" And .Offset(0, 4) <> "" And .Offset(0, 5) <> "" Then 'condition 2
        .Value = ""
        .Interior.Color = vbRed
        MsgBox "Vous n'avez pas bien effectuer votre copier-coller depuis la GMAO!"

    ElseIf .Offset(0, 3) <> "" And .Offset(0, 4) <> "" And .Offset(0, 5) <> "" And _
        .Offset(0, 6) = "" And .Offset(0, 7) <> "" Then 'condition 3
        .Value = ""
        .Interior.Color = vbGreen
        MsgBox "Vous n'avez pas remplit une date de programmation"

    ElseIf .Value = "Prêt" And .Offset(0, 6) <> "" Then 'condition 4
        .Interior.Color = xlColorIndexNone
        .Value = "En cours"

    ElseIf .Value = "En cours" And .Offset(0, 7) <> "" Then ''condition 5
        .Interior.Color = xlColorIndexNone
        .Value = "Soldé"

    ElseIf cel = "" Then 'condition 6
        .Value = ""

    Else 'condition 7
        .Interior.ColorIndex = 34
        .Value = "A remplir"       
    End If

End With
Next i
End Sub

Le 36 pourrait être mis automatique par la macro si tu connais le critère. exemple en fonction de ce qui est complété en colonne A.

Amicalement

Dan

re,

tout d'abord merci,

je vais regarder ca lundi matin, la je part en week-end, donc je vous souhaite un bon week-end et a lundi

Cdt

Ftomi

bonjour forum,

alors voila j'ai regarder le code que tu m'a transmit et j'ai plusieurs questions:

  • j'aimerais savoir ce que fait la ligne : Set cel = Range("A" & i + 4) exactement
  • les conditiions 3,4,5 ne marche pas chez moi, alors que j'ai rajouter les messages d'erreurs pour tous les cas pour les colonnes D,E,F.

Cdt

Ftomi

Re,

- j'aimerais savoir ce que fait la ligne : Set cel = Range("A" & i + 4) exactement

On définit la cellule de départ. Dans ton fichier, la cellule est A4. Quand i=0, "Cel" vaut ce qui est en A4.

- les conditiions 3,4,5 ne marche pas chez moi, alors que j'ai rajouter les messages d'erreurs pour tous les cas pour les colonnes D,E,F.

A la place de ".Value" essaie avec ".offset(0,0)"

Amicalement

Dan

re,

merci pour les explications,

A la place de ".Value" essaie avec ".offset(0,0)"

j'ai essayer ca change rien, sauf si je sort la condition du if et que je la met dans un nouveau if alors ca marche, j'ai tester dans le nouveau if avec .value et .offset, je vois pas le soucis, est-ce qu'il y a un nombre limité de ElseIf dans un If ?

Cdt

Ftomi

Rechercher des sujets similaires à "adapation macro toute feuille"