Vba erreur générée 424

Résolu
mcou -  
 mcou -
Bonjour,

J'ai créé une macro dont le début est le passage suivant (appelons le delta).
Isolé seul dans un module, delta fonctionne très bien.
Intégré au reste de ma macro, ça bug !
L'erreur est 424, objet requis.

Je ne comprend pas. Quelqu'un a-t-il une explication à fournir ?

Dim Plage As Range
Dim Plage2 As Range

Sub Verif_Solde()
Dim I   As Long 'déclaration de la variable I comme étant un entier long

'se placer au début de la ligne à solder en sélectionnant toute la ligne
'il faut que la cellule active soit en colonne A !

Set Plage = Application.InputBox("Veuillez sélectionner la ligne que vous voulez solder. Placez vous de façon à ce que la cellule active soit à l'intersection de la ligne que vous voulez solder et de la colonne A.", "SELECTION DE LA LIGNE", Type:=8)
'oblige la saisie d'une plage de donnée et renvoie cette plage à la variable Plage définie auparavant
MsgBox ("La plage que vous avez sélectionnée est : " & Plage.Address) 'indique l'adresse de la plage sélectionnée

... 'la suite n'est pas écrit
End Sub

3 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

A quel endroit l'erreur????????
Parce que le morceau de code que vous donne marche!
0
mcou
 
oups.
j'oubliais de préciser le principal !

Set Plage = Application.InputBox("Veuillez sélectionner la ligne que vous voulez solder. Placez vous de façon à ce que la cellule active soit à l'intersection de la ligne que vous voulez solder et de la colonne A.", "SELECTION DE LA LIGNE", Type:=8)
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Comme ecrit plus haut, ce morceau de code marche dans un module ou dans le vba d'une feuille, mais vous, vous l'avez mis ou?????
0
mcou
 
le delta est inscrit dans un module intitulé "vérification" et fait partie d'une macro à part entière. c'est en fait le début de ma macro "verif".
Et, pour comprendre l'erreur j'ai testé dans un nouveau module en l'extrayant de la macro initiale. J'ai bien vu alors que le code fonctionnait. Mais lorsqu'il est associé au reste de ma macro, l'erreur est générée
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,
Sans le code complet, je ne peut pas voir ou cela coince.
0
mcou
 
Le voici. Merci de votre patience, moi je ne l'ai plus depuis 1h ! ^^

Dim Plage As Range
Dim Plage2 As Range

Sub Verif_Solde()
Dim I   As Long 'déclaration de la variable I comme étant un entier long

'se placer au début de la ligne à solder en sélectionnant toute la ligne
'il faut que la cellule active soit en colonne A !

Set Plage = Application.InputBox("Veuillez sélectionner la ligne que vous voulez solder. Placez vous de façon à ce que la cellule active soit à l'intersection de la ligne que vous voulez solder et de la colonne A.", "SELECTION DE LA LIGNE", Type:=8)
'oblige la saisie d'une plage de donnée et renvoie cette plage à la variable Plage définie auparavant
MsgBox ("La plage que vous avez sélectionnée est : " & Plage.Address) 'indique l'adresse de la plage sélectionnée

ActiveCell.Offset(0, 12).Select 'sélectionne la cellule de la ligne correspondant à la colonne LN/BW/LR
' cette cellule doit être impérativement remplie
Do While ActiveCell.Value = "" ' la boucle s'exécute tant que la cellule est vide
MsgBox "La cellule doit être impérativement remplie ", vbCritical
ActiveCell = UCase(InputBox("Veuillez indiquer l'état de la commande", "LN/BW/LR", ""))
Loop

ActiveCell.Offset(0, 1).Select 'se place dans la colonne delivery
Do While ActiveCell.Value <> "Y" ' la boucle s'exécute tant que la cellule est vide
MsgBox "La cellule doit être impérativement remplie par Y ", vbCritical
ActiveCell = UCase(InputBox("Veuillez indiquer l'état de la commande.", "DELIVERY", "Y"))
Loop

ActiveCell.Offset(0, 1).Select 'se place dans la colonne date cegid

I = ActiveCell.Row 'indique que la variable I est le numéro de la ligne active
Do While ActiveCell.Value < Cells(I, 8).Value 'Si la valeur en Pi est inférieure de la valeur en Hi, avec 8 correspond au numéro de la colonne H
MsgBox "La date Cegid (colonne P) est inférieure à la date initialement prévue en colonne H. La date Cegid doit lui être impérativement supérieure ou égale.", vbCritical
ActiveCell = InputBox("Veuillez saisir de nouveau la date Cegid en colonne Q", "DATE CEGID", Cells(I, 8).Value)
Loop

ActiveCell.Offset(0, 1).Select 'se place dans la colonne montant

I = ActiveCell.Row 'indique que la variable I est le numéro de la ligne active
Do While ActiveCell.Value <> Cells(I, 7).Value 'Si la valeur en Gi est différente de la valeur en Qi, avec 7 correspond au numéro de la colonne G et 17 à la colonne Q
MsgBox "Le montant Cegid (colonne Q) est différent du montant saisi initialement (colonne G).", vbCritical
ActiveCell = InputBox("Veuillez saisir de nouveau le montant Cegid (colonne Q)", "AMOUNT", Cells(I, 7).Value)
Loop

ActiveCell.Offset(0, 1).Select 'demande SCM
If MsgBox("Le solde de la ligne s'effectue-t-il en cours du mois ? (SCM)", vbQuestion + vbYesNo) = vbYes Then
ActiveCell = "SCM"
End If

If MsgBox("Avez-vous-un commentaire à copier avec une ligne doublon ? La ligne doublon, dont le commentaire sera copié, sera ensuite supprimée", vbQuestion + vbYesNo) = vbYes Then
ActiveCell.Offset(0, -7).Select
Call Copie_Comments
End If

Range(Plage.Address).Select 'sélectionne la ligne initiale
Selection.Interior.ColorIndex = 15 'solde la ligne initiale en attribuant la couleur grise aux cellules

Calculate 'recalcule la feuille

MsgBox "La vérification du rapprochement est terminée avec succès et la ligne est soldée", vbOKOnly

End Sub
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Code modifie pour ANNULER et Croix de fermeture. Ai fait un tour du cote de developpez.net. Il faut en plus allez dans vba: outils, options, General et cocher Arret sur les erreurs non gerees.

Sub Verif_Solde()
  Dim Plage As Range
  Dim Plage2 As Range
  Dim I   As Long 'déclaration de la variable I comme étant un entier long

  'gestion ANNULER et Croix de fermeture
  On Error Resume Next
  Set Plage = Nothing
  
  'se placer au début de la ligne à solder en sélectionnant toute la ligne
  'il faut que la cellule active soit en colonne A !
  Set Plage = Application.InputBox("Veuillez sélectionner la ligne que vous voulez solder. Placez vous de façon à ce que la cellule active soit à l'intersection de la ligne que vous voulez solder et de la colonne A.", "SELECTION DE LA LIGNE", Type:=8)
  'gestion ANNULER et Croix de fermeture
  If Plage Is Nothing Then
    MsgBox "Je traite la situation"
    On Error GoTo 0
    Exit Sub
  End If
  'oblige la saisie d'une plage de donnée et renvoie cette plage à la variable Plage définie auparavant
  MsgBox ("La plage que vous avez sélectionnée est : " & Plage.Address) 'indique l'adresse de la plage sélectionnée
  ActiveCell.Offset(0, 12).Select 'sélectionne la cellule de la ligne correspondant à la colonne LN/BW/LR
  'cette cellule doit être impérativement remplie
  Do While ActiveCell.Value = "" ' la boucle s'exécute tant que la cellule est vide
    MsgBox "La cellule doit être impérativement remplie ", vbCritical
    ActiveCell = UCase(InputBox("Veuillez indiquer l'état de la commande", "LN/BW/LR", ""))
  Loop

  ActiveCell.Offset(0, 1).Select 'se place dans la colonne delivery
  Do While ActiveCell.Value <> "Y" ' la boucle s'exécute tant que la cellule est vide
    MsgBox "La cellule doit être impérativement remplie par Y ", vbCritical
    ActiveCell = UCase(InputBox("Veuillez indiquer l'état de la commande.", "DELIVERY", "Y"))
  Loop

  ActiveCell.Offset(0, 1).Select 'se place dans la colonne date cegid

  I = ActiveCell.Row 'indique que la variable I est le numéro de la ligne active
  Do While ActiveCell.Value < Cells(I, 8).Value 'Si la valeur en Pi est inférieure de la valeur en Hi, avec 8 correspond au numéro de la colonne H
    MsgBox "La date Cegid (colonne P) est inférieure à la date initialement prévue en colonne H. La date Cegid doit lui être impérativement supérieure ou égale.", vbCritical
    ActiveCell = InputBox("Veuillez saisir de nouveau la date Cegid en colonne Q", "DATE CEGID", Cells(I, 8).Value)
  Loop

  ActiveCell.Offset(0, 1).Select 'se place dans la colonne montant

  I = ActiveCell.Row 'indique que la variable I est le numéro de la ligne active
  Do While ActiveCell.Value <> Cells(I, 7).Value 'Si la valeur en Gi est différente de la valeur en Qi, avec 7 correspond au numéro de la colonne G et 17 à la colonne Q
    MsgBox "Le montant Cegid (colonne Q) est différent du montant saisi initialement (colonne G).", vbCritical
    ActiveCell = InputBox("Veuillez saisir de nouveau le montant Cegid (colonne Q)", "AMOUNT", Cells(I, 7).Value)
  Loop

  ActiveCell.Offset(0, 1).Select 'demande SCM
  If MsgBox("Le solde de la ligne s'effectue-t-il en cours du mois ? (SCM)", vbQuestion + vbYesNo) = vbYes Then
    ActiveCell = "SCM"
  End If

  If MsgBox("Avez-vous-un commentaire à copier avec une ligne doublon ? La ligne doublon, dont le commentaire sera copié, sera ensuite supprimée", vbQuestion + vbYesNo) = vbYes Then
    ActiveCell.Offset(0, -7).Select
    'Call Copie_Comments
  End If

  Range(Plage.Address).Select 'sélectionne la ligne initiale
  Selection.Interior.ColorIndex = 15 'solde la ligne initiale en attribuant la couleur grise aux cellules

  Calculate 'recalcule la feuille

  MsgBox "La vérification du rapprochement est terminée avec succès et la ligne est soldée", vbOKOnly
  
End Sub


Par contre rien de nouveau avec Ok.

A suivre
0
mcou
 
je regarde ça ce matin. j'avais pensé aussi à la gestion des erreurs...
je vous tiens au courant. merci pour votre aide
0
mcou
 
Votre code fonctionne à merveille. Mais ne résoud pas le problème.
Si je mets votre code dans un nouveau module de mon classeur cela fonctionne.
Si je m'en sert pour remplacer (par copier coller) mon ancien code, ça bug.
Je crois que je vais garder le nouveau modèle. en espérant que cela fonctionne continuellement par la suite...
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,
Ok, faites pour le mieux
0
mcou
 
Finalement, j'ai contourné le problème. Voici une macro qui fonctionne bien !


Option Explicit

Dim Plage As Range
Dim Noligne As Long

Sub Verif_Solde()
Dim I   As Long 'déclaration de la variable I comme étant un entier long

'se placer au début de la ligne à solder en sélectionnant toute la ligne
'il faut que la cellule active soit en colonne A !

MsgBox ("La ligne que vous voulez soldée correspond au numéro de référence : " & ActiveCell.Value)
Noligne = ActiveCell.Row

ActiveCell.Offset(0, 12).Select 'sélectionne la cellule de la ligne correspondant à la colonne LN/BW/LR
' cette cellule doit être impérativement remplie
Do While ActiveCell.Value = "" ' la boucle s'exécute tant que la cellule est vide
MsgBox "La cellule doit être impérativement remplie ", vbCritical
ActiveCell = UCase(InputBox("Veuillez indiquer l'état de la commande", "LN/BW/LR", ""))
Loop

ActiveCell.Offset(0, 1).Select 'se place dans la colonne delivery
Do While ActiveCell.Value <> "Y" ' la boucle s'exécute tant que la cellule est vide
MsgBox "La cellule doit être impérativement remplie par Y ", vbCritical
ActiveCell = UCase(InputBox("Veuillez indiquer l'état de la commande.", "DELIVERY", "Y"))
Loop

ActiveCell.Offset(0, 1).Select 'se place dans la colonne date cegid

I = ActiveCell.Row 'indique que la variable I est le numéro de la ligne active
Do While ActiveCell.Value < Cells(I, 8).Value 'Si la valeur en Pi est inférieure de la valeur en Hi, avec 8 correspond au numéro de la colonne H
MsgBox "La date Cegid (colonne P) est inférieure à la date initialement prévue en colonne H. La date Cegid doit lui être impérativement supérieure ou égale.", vbCritical
ActiveCell = InputBox("Veuillez saisir de nouveau la date Cegid en colonne Q", "DATE CEGID", Cells(I, 8).Value)
Loop

ActiveCell.Offset(0, 1).Select 'se place dans la colonne montant

I = ActiveCell.Row 'indique que la variable I est le numéro de la ligne active
Do While ActiveCell.Value <> Cells(I, 7).Value 'Si la valeur en Gi est différente de la valeur en Qi, avec 7 correspond au numéro de la colonne G et 17 à la colonne Q
MsgBox "Le montant Cegid (colonne Q) est différent du montant saisi initialement (colonne G).", vbCritical
ActiveCell = InputBox("Veuillez saisir de nouveau le montant Cegid (colonne Q)", "AMOUNT", Cells(I, 7).Value)
Loop

ActiveCell.Offset(0, 1).Select 'demande SCM
If MsgBox("Le solde de la ligne s'effectue-t-il en cours du mois ? (SCM)", vbQuestion + vbYesNo) = vbYes Then
ActiveCell = "SCM"
End If

If MsgBox("Avez-vous-un commentaire à copier avec une ligne doublon ? La ligne doublon, dont le commentaire sera copié, sera ensuite supprimée", vbQuestion + vbYesNo) = vbYes Then
ActiveCell.Offset(0, -7).Select
Call Copie_Comments
End If

Range("A" & Noligne - 1).Select
Selection.EntireRow.Select 'sélectionne la ligne initiale
Selection.Interior.ColorIndex = 15 'solde la ligne initiale en attribuant la couleur grise aux cellules

Calculate 'recalcule la feuille

MsgBox "La vérification du rapprochement est terminée avec succès et la ligne est soldée", vbOKOnly

End Sub

Sub Copie_Comments()  'Permet de copier le commentaire dans la bonne cellule

Dim Plage As Range
Set Plage = Application.InputBox("Veuillez sélectionner la cellule à copier correspondant au commentaire initial de la ligne (colonne J). ", "COMMENTAIRE", Type:=8)
MsgBox ("La plage que vous avez sélectionnée est : " & Plage.Address)
Range(Plage.Address).Copy 'copie le commentaire
ActiveSheet.Paste 'colle le commentaire dans la cellule active (adresse définie dans la macro principale)
Range(Plage.Address).Select 'sélectionne le commentaire à supprimer
Selection.EntireRow.Delete 'supprime la ligne du commentaire en entier

End Sub
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,
C'est une facon de voir.
0
mcou
 
en tout cas, merci de votre aide !
0