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

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    A quel endroit l'erreur????????
    Parce que le morceau de code que vous donne marche!
    0
    1. 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
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    3. 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
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Sans le code complet, je ne peut pas voir ou cela coince.
      0
    5. 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
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. mcou
       
      je regarde ça ce matin. j'avais pensé aussi à la gestion des erreurs...
      je vous tiens au courant. merci pour votre aide
      0
    2. 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
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Ok, faites pour le mieux
      0
  3. 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
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      C'est une facon de voir.
      0
    2. mcou
       
      en tout cas, merci de votre aide !
      0