Problème .End(xlUp) dans un module

Bonjour,

je suis débutant en ce qui concerne VBA, j'ai pour but de faciliter l'entrée de données dans un tableau de frais de déplacement sur excel.

J'ai donc un tableau avec plusieurs montant a renseigner, ces montants vont permettre de savoir si la personne a dépasser ou non un plafond maximum (colonne G, plage (G7;G29).pour renseigner ces montants La personne doit appuyer sur un bouton "nouveau déplacement".ce bouton lance donc un userform (userform6) qui permet la saisie des montants, l'userform envoie les données dans le tableau lorsque que l'on appuis sur le bouton valider.

Cependant je veux que lorsque la ligne de montants est saisie, un module (module 4) vérifie si le plafond dans la colonne G a été dépassé ( valeur colonne G >0) ou si il n'a pas été dépassé (valeur colonne G = 0). Si le plafond n'a pas été dépassé alors un userform s'affiche pour demander si l'on veut enregistrer un autre déplacement ( userform9) alors que si le plafond a été dépassé la cellule se colore en rouge et un userform s'affiche pour alerter la personne ( userform7).

Je veux que tout ceci se fasse en passant ensuite a la ligne du dessous dans le tableau;

Cependant le module que j'ai réaliser n'applique pas la condition sur la ligne que l'on vient de saisir mais toujours sur la cellule "G7" (la premiere de la colonne). je penses que le problème vient du .End(xlup), puisqu'il na pas l'air de fonctionner.

je précise que : le bouton "nouveau déplacement" ouvre le module 1, le module 1 ouvre l'userform6 et l'userform6 ouvre le module 4( Plafond) grâce a la ligne "call Plafond'.

Voila donc le code du module 4 :

Sub plafond()
Dim plafond As Range
 For Each plafond In Range("G29").End(xlUp).Offset(1, 0)

If plafond = 0 Then

UserForm7.Show
     Else

 plafond.Interior.ColorIndex = 3
UserForm9.Show
     End If

     Next plafond
End Sub

Il n'y a pas de valeur dans la colonne G a la base.

La colonne G se calcule par rapport au colonne A,B,C,D,E,F. Il faut donc renseigner ces colonnes appuyant sur le bouton "nouveau déplacement" (en haut de la feuille). Les cellules en gris ne doivent pas être changées car elle comporte des formules.

Ci joint mon tableau

19tableauforum.zip (31.38 Ko)

Bonsoir,

Au vu de ton code, tu testes une plage composée d'une seule cellule, qui est la première cellule vide en G après G29.

Il est donc clair que plafond est toujours = 0, et qu'il n'y a pas de Next plafond !

Tu dois savoir quelle plage tu dois définir, si elle est dans une même colonne, elle a probablement une ligne de début et une ligne de fin : il faut l'écrire !

Cordialement.

edit : erreur de ma part, c'est avant G29, mais cela ne change rien : ta plage est limitée à une cellule vide.

BONJOUR

Sub plafond()
Dim plafond As Range
 For Each plafond In Range("G7:G29")
 If plafond = 0 Then
UserForm7.Show
 Else
plafond.Interior.ColorIndex = 3
UserForm9.Show
End If
  Next plafond

End Sub
MFerrand a écrit :

Bonsoir,

Au vu de ton code, tu testes une plage composée d'une seule cellule, qui est la première cellule vide en G après G29.

Il est donc clair que plafond est toujours = 0, et qu'il n'y a pas de Next plafond !

Tu dois savoir quelle plage tu dois définir, si elle est dans une même colonne, elle a probablement une ligne de début et une ligne de fin : il faut l'écrire !

Cordialement.

edit : erreur de ma part, c'est avant G29, mais cela ne change rien : ta plage est limitée à une cellule vide.

j'ai changer mon code comme ceci :

Sub plafond()
Dim plafond As Range
 For Each plafond In Range("G29").End(xlUp)

If plafond = 0 Then

UserForm9.Show
     Else

 plafond.Interior.ColorIndex = 3
UserForm7.Show
End If
 Next
End Sub

C'est normal que je sélectionne une seule cellule puisque dans le code ci dessus "range("G29").end(xlUPp)" fait référence a la première cellule remplie de la colonne G avant G29 . comme mon userform me permet de saisir des montants ligne par ligne dans mon tableau la première cellule remplie de la colonne G sera toujours celle de la dernière saisie, tu me suis ?

Enfaite mon problème c'est que mon ce code marche dans une colonne normale ou les valeurs des cellules ne provienne pas de formule. les valeurs de ma colonne G sont calculé avec une formule. le code ne fonctionne pas sur cette colonne comme si le End(Xlup) considérait que les cellules qui contiennent une valeur grâce a une formule sont des cellules vides.

Ne mélange pas tout.

Pourquoi une boucle sur une seule cellule ?

Et si End(xlUp) pointe la dernière cellule utilisée dans la colonne avant G29 (et à condition que G29 soit vide), Offset(1,0) cible la cellule en dessous forcément vide.

MFerrand a écrit :

Ne mélange pas tout.

Pourquoi une boucle sur une seule cellule ?

Et si End(xlUp) pointe la dernière cellule utilisée dans la colonne avant G29 (et à condition que G29 soit vide), Offset(1,0) cible la cellule en dessous forcément vide.

Vu que je maitrise pas très bien VBA il est vrai que je mélange tout. Ecris comme ça, cela doit être plus logique :

Sub plafond()

 If Range("G29").End(xlUp) = 0 Then

UserForm9.Show
     Else
  Range("G29").End(xlUp).Interior.ColorIndex = 4
UserForm7.Show
     End If

End Sub

Là le code est cohérent.

Pour le reste je ne sais pas mais je n'irai pas plus loin ce soir...

En tout cas le fait que la valeur est produite par des formules est indifférent, la propriété Value est la même, qu'elle résulte d'une formule ou non.

Demain peut-être (j'interrompt tous travaux en cours ce soir), sauf insomnie...

Cordialement.

Bonjour,

J'ai tout de même jeté un oeil sur ton classeur.

Sans chercher à comprendre l'objet de ton opération ni ce que tu traites, ta méthode est inadéquate !

Ta colonne G contient des formules, aucune cellule n'est donc vide de G7 à G29.

Il te faut tester en remontant avec une boucle For... Next pour trouver la première cellule <>"", soit la dernière de la colonne affichant une valeur.

NB- L'utilisation de End, si elle avait été possible, devait partir de G30 (et non G29) et à condition d'être sûr que G30 soit toujours vide pour le type de recherche que tu souhaitais (à mémoriser pour une prochaine fois).

Et pour ma part j'apprécierais un code bien indenté... qui ne soit pas répulsif en le voyant !

Cordialement.

Rechercher des sujets similaires à "probleme end xlup module"