VBA, Suppression d'un enregistrement

Résolu
MD64 -  
 MD64 -
Bonjour,
Bonne année à tous !!!

J'ai des données qui commence par un no d'enregistrement, une cellule (PARAM_NO_LIGNE) qui me renvoie le no de ligne de l'enregistrement en cours.
Pour supprimer un enregistrement, j'ai écrit cette simple macro:

Sub Suppression_enregistrement()

Sheets("Base").Rows([PARAM_NO_LIGNE] + 1).Delete Shift:=xlUp
End Sub

+1 pour décaler de la ligne "titres"
et il me renvoie "Erreur d'exécution "13"
Incompatibilité de type

Quelqu'un peut il me dire où se trouve l'erreur, sachant que je débute en VBA
Merci d'avance pour votre aide

PS; Si vous aviez un code pour créer une liste de dates (mois + 1) à partir d'une cellule contenant la date de début et une autre la date de fin, cela m'aiderait a rattraper le retard pris....merci

5 réponses

  1. ben13.51 Messages postés 115 Statut Membre 7
     
    [PARAM_NO_LIGNE] ne contient pas le numéro de ligne, ce n'est pas une variable numérique. du coup tu ajoute +1 à du texte d'où l'incompatibilité de type...

    Essaye comme ça peut-être:

    ([PARAM_NO_LIGNE].row+1).Delete Shift:=xlUp
    0
    1. MD64
       
      Merci ben pour ta rapidité.
      Malheureusement, cela me donne une erreur de syntaxe, maintenant...
      0
  2. ben13.51 Messages postés 115 Statut Membre 7
     
    Bon on va passer par une variable intermédiaire du coup

    dim NumLigne as integer

    Sub Suppression_enregistrement()
    NumLigne = [PARAM_NO_LIGNE].Row + 1
    Sheets("Base").Rows(NumLigne ).Delete Shift:=xlUp
    End Sub

    J'ai testé ça marche chez moi...
    0
    1. MD64
       
      je dois être vraiment nul, car chez moi ça me donne une erreur "424" objet requis .....
      0
    2. ben13.51 Messages postés 115 Statut Membre 7
       
      il ne faut pas oublier la première ligne :


      dim NumLigne as integer

      a placer en tout début de ta page de code
      Ca déclare ta variable NumLigne comme variable numérique

      Je pense que c'est ça ton erreur
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    Pour que l'on comprenne bien...
    Tu as donc des numéros d'enregistrement en Colonne A : 1, 2, 3, 4 etc... jusqu'au dernier, ET, une cellule (F5 pour l'exemple) nommée, par le menu Edition/Nom/définir, PARAM_NO_LIGNE qui contient un nombre. C'est bien cela?
    Cordialement,
    Franck P
    0
    1. MD64
       
      En fait, j'ai une feuille "Saisie fiche", une "Consultation fiche" une" base de données" et une paramètres où se trouve entre autre le calcul de la ligne (dans BD) de l'enregistrement en cours de consultation (La cellule B:3 nommée "PARAM_NO_LIGNE"). Je voudrai en cliquant sur le bouton "supprimer enregistrement" dans la feuille "consultation fiche" prendre le N° de ligne ("PARAM_NO_LIGNE")+ 1 pour tenir compte du décalage "titre" dans la feuille param et supprimer cette ligne dans "Base de données" en rétablissant le n° d'enregistrement...
      La BDest classiquement constituée comme çà :ligne 2 : A:N° enregist, B: Nom, C:prénom...
      je ne sais pas si je suis très clair dans mes explications...
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Cf donc la solution de Lermitte222 ci-dessous...

      With Sheets("Base de données")
          .Rows(Range("PARAM_NO_LIG").Value + 1).Delete
      End With

      J'ai placé tout ça dans un blmoc with car pas sur que tu sois placé sur la bonne feuille. Ca évitera au moins deux Select...
      0
    3. MD64
       
      Merci car comme çà cela marche . je ne sais pas pourquoi mais....
      Vraiment Merci à tous de vous être penchés sur mon pb!
      Maintenant j'ai tellement perdu de temps, que je vais abuser en vs demandant si vous avez une macro pour créer une liste de dates sachant que j'ai en C:1 la date de début (ex:20/12/11), qu'en C:2 je rentre un nbre de mois (ex:3), j'ai en C:3 la date de fin et en A:4,A/5 et les dates 20/12/11, 20/01/12, 20/02/12, et bien sur plus si C:3 supérieure... et surtout ne pas créer cette liste ni calcul de date de fin, si pas de date de début ...
      Désolé pour mon abus mais là je suis vraiment très en retard!!
      Merci d'avance
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      En C1 : saisir une date au format 01/01/2001
      En C2 : saisir un nombre exemple : 18
      Puis lancer cette macro
      résultat à partir de A4 :
      Sub AjouterMoisADate()
      Dim Lig As Integer, DrLig As Integer
      Dim Jour As Date
      
      If Range("C1") = "" Or Not IsDate(Range("C1")) Then
          MsgBox "Entrez une date au format valide en C1."
          Exit Sub
      ElseIf Range("C2") = "" Or Not IsNumeric(Range("C2")) Then
          MsgBox "Entrez un nombre de mois au format valide en C2."
          Exit Sub
      End If
      
      Jour = CDate(Range("C1"))
      DrLig = 4 + Val(Range("C2"))
       
      For Lig = 4 To DrLig - 1
          Jour = DateAdd("m", 1, Jour)
          Range("A" & Lig) = CDate(Jour)
      Next
      Range("C3") = CDate(Jour)
      End Sub
      0
    5. MD64
       
      Génial, étant débutant en VBA tu n'imagines pas à quel point tu m'as fait gagner un temps précieux !!!...
      Merci beaucoup
      je ne te sollicite plus pendant au moins ....1 jours :-))
      0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour tou(te)s
    Fait un copier/coller du nom de ta feuille (l'onglet) y a quelque fois des espaces qu'ont ne détecte pas bien.
    Et tu n'explique pas ce qu'est ton PARAM_NO_LIGNE, le titre de la colonne ? une cellule nommée ?..
    Pour que ça fonctionne oublie ton PARAM_NO_LIGNE et met plutôt
        Sheets("Base").Rows([A2] + 1).Delete
    J'ai mis A2 mais à toi de l'ajuster.
    si ton PARAM_NO_LIGNE est une cellule nommée, ça fonctionnerait aussi mais y faut pas de [ ]
    A+
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut lermitte222
      Bonne année à toi!
      0
    2. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Bonjour pijaku,
      Merci, à toi pareil ainsi qu'à tout les tiens.:-))
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      merci beaucoup.

      Bonne journée!
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ben13.51 Messages postés 115 Statut Membre 7
     
    Mais si PARAM_NO_LIGNE est toujours en B3 alors PARAM_NO_LIGNE+1 = 4...

    Donc tu peux te contenter du code

    Sheets("Base").Rows(4).Delete Shift:=xlUp
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Mis à part que la il ne veux pas utiliser le 3 de B3, mais la valeur contenue dans la cellule B3 nommée PARAM_NO_LIGNE
      0
    2. ben13.51 Messages postés 115 Statut Membre 7
       
      c ça que je n'avais pas compris...
      tout s'explique
      bonne année
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonne année également.
      A+
      0
    4. MD64
       
      Bonne année à vous
      0