VBA, Suppression d'un enregistrement

Résolu/Fermé
MD64 - 10 janv. 2012 à 18:26
 MD64 - 11 janv. 2012 à 14:35
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 mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
10 janv. 2012 à 18:47
[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
Merci ben pour ta rapidité.
Malheureusement, cela me donne une erreur de syntaxe, maintenant...
0
ben13.51 Messages postés 112 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
10 janv. 2012 à 20:41
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
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 mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
Modifié par ben13.51 le 11/01/2012 à 08:11
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 11/01/2012 à 08:32
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
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
11 janv. 2012 à 11:33
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
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
11 janv. 2012 à 12:44
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
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 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 11/01/2012 à 08:52
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
11 janv. 2012 à 08:51
Salut lermitte222
Bonne année à toi!
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 janv. 2012 à 08:54
Bonjour pijaku,
Merci, à toi pareil ainsi qu'à tout les tiens.:-))
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
11 janv. 2012 à 08:56
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 mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
11 janv. 2012 à 11:44
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
11 janv. 2012 à 11:51
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 mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
11 janv. 2012 à 13:30
c ça que je n'avais pas compris...
tout s'explique
bonne année
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
11 janv. 2012 à 13:31
Bonne année également.
A+
0
Bonne année à vous
0