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

A voir également:

5 réponses

ben13.51 Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   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
MD64
 
Merci ben pour ta rapidité.
Malheureusement, cela me donne une erreur de syntaxe, maintenant...
0
ben13.51 Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   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
MD64
 
je dois être vraiment nul, car chez moi ça me donne une erreur "424" objet requis .....
0
ben13.51 Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
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
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Salut lermitte222
Bonne année à toi!
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Bonjour pijaku,
Merci, à toi pareil ainsi qu'à tout les tiens.:-))
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
merci beaucoup.

Bonne journée!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ben13.51 Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
ben13.51 Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   7
 
c ça que je n'avais pas compris...
tout s'explique
bonne année
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonne année également.
A+
0
MD64
 
Bonne année à vous
0