Base de donnée VBA
bonjour ,
j'ai un problème sur mon fichier base de données si je veux rajouter un nouveau enregistrement j'ai message du type :
Erreur d’exécution 1004 la méthode Copy de la classe Range à échoué et quand je clique sur débodage voici les lignes de codes
quelqu'un peut t il m'aider
merci
End If
If .CB_Statut.Value = "Libellé" Or Len(.CB_Statut) = 0 Then
Message = "Veuillez choisir un statut valide !"
Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
.CB_Statut.SetFocus
Exit Sub
End If
MaCivilité = .CB_Civilité.Value
MonNom = .TB_Nom.Value
MonPrénom = .TB_Prénom.Value
MonAdresse = .TB_Adresse.Value
MonCP = .CB_CP.Value
MonTéléphone = .TB_Téléphone.Value
MonEmail = .TB_EMail.Value
MonStatut = .CB_Statut.Value
MesObservations = .TB_Observations.Value
End With
Sheets("Annuaire").Activate
Call Déprotéger
If ModeLigne = "Ajout" Then
Application.ScreenUpdating = False
With Sheets("Annuaire")
.Rows(MaLigneAnnuaire).Select
Selection.Copy
Selection.Insert Shift:=xlDown
Selection.ClearContents
Application.CutCopyMode = False
End With
End If
With Sheets("Annuaire")
'Libellé (colonne A)
.Range("A" & MaLigneAnnuaire).Value = MaCivilité
'Nom (colonne B)
.Range("B" & MaLigneAnnuaire).Value = MonNom
'Prénom (colonne C)
.Range("C" & MaLigneAnnuaire).Value = MonPrénom
'Adresse (colonne D)
.Range("D" & MaLigneAnnuaire).Value = MonAdresse
'CP (colonne E)
.Range("E" & MaLigneAnnuaire).Value = MonCP
'Email (colonne H)
.Range("H" & MaLigneAnnuaire).Value = MonEmail
'Téléphone (colonne I)
.Range("I" & MaLigneAnnuaire).Value = MonTéléphone
'Statut (colonne J)
.Range("J" & MaLigneAnnuaire).Value = MonStatut
'Observations (colonne K)
.Range("K" & MaLigneAnnuaire).Value = MesObservations
'Commune (colonne F)
'=SI(ESTERREUR(RECHERCHEV(E5;Communes;3;FAUX));"";RECHERCHEV(E5;Communes;3;FAUX))
'=IF(ISERROR(VLOOKUP(E5,Communes,3,FALSE)),"",VLOOKUP(E5,Communes,3,FALSE))
Formule = "=IF(ISERROR(VLOOKUP(E" & MaLigneAnnuaire & ",Communes,3,FALSE)),"
Formule = Formule & Chr(34) & Chr(34) & ","
Formule = Formule & "VLOOKUP(E" & MaLigneAnnuaire & ",Communes,3,FALSE))"
.Range("F" & MaLigneAnnuaire).Formula = Formule
'Ville (colonne G)
'=SI(ESTERREUR(RECHERCHEV(E5;Communes;4;FAUX));"";RECHERCHEV(E5;Communes;4;FAUX))
'=IF(ISERROR(VLOOKUP(E5,Communes,3,FALSE)),"",VLOOKUP(E5,Communes,4,FALSE))
Formule = "=IF(ISERROR(VLOOKUP(E" & MaLigneAnnuaire & ",Communes,4,FALSE)),"
Formule = Formule & Chr(34) & Chr(34) & ","
Formule = Formule & "VLOOKUP(E" & MaLigneAnnuaire & ",Communes,4,FALSE))"
.Range("G" & MaLigneAnnuaire).Formula = Formule
.Range("A" & MaLigneAnnuaire).Select
End With
Call Protéger
End Sub
Sub Ecrire_Communes()
Dim Formule, Message, MonCP, MaCommune, MaVille, MesObservations, ModeLigne, MonLibellé As String
Dim Réponse As Integer
With UF_Communes
If .Titre.Caption = "Ajouter une Commune" Then
' AJOUT *******************************************************
ModeLigne = "Ajout"
MaLigneCommune = Range("Communes").Row + 1
Else
'MODIF *******************************************************
ModeLigne = "Modif"
End If
'Contrôles
If Not Len(.TB_CP.Value) > 0 Then
Message = "Veuillez entrer un code postal valide !"
Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
.TB_CP.SetFocus
Exit Sub
End If
If Not Len(.TB_Ville.Value) > 0 Then
Message = "Veuillez entrer une ville valide !"
Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
.TB_Ville.SetFocus
Exit Sub
End If
If Not Len(.TB_Commune.Value) > 0 Then
Message = "Veuillez entrer une commune valide !"
Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
.TB_Commune.SetFocus
Exit Sub
End If
MonCP = .TB_CP.Value
MaVille = .TB_Ville.Value
MaCommune = .TB_Commune.Value
MesObservations = .TB_Observations.Value
End With
MonLibellé = MonCP & " - " & MaVille & " (" & MaCommune & ")"
Sheets("Communes").Activate
Call Déprotéger
If ModeLigne = "Ajout" Then
Application.ScreenUpdating = False
With Sheets("Communes")
.Rows(MaLigneCommune).Select
Selection.Copy
Selection.Insert Shift:=xlDown
Selection.ClearContents
Application.CutCopyMode = False
End With
End If
With Sheets("Communes")
'Code postal (colonne B)
.Range("B" & MaLigneCommune).Value = MonCP
'Ville (colonne C)
.Range("C" & MaLigneCommune).Value = MaVille
'Commune (colonne D)
.Range("D" & MaLigneCommune).Value = MaCommune
'Observations (colonne F)
.Range("F" & MaLigneCommune).Value = MesObservations
'Identifiant (colonne A) : =B5&" - "&C5&" ("&D5&")"
Formule = "=B" & MaLigneCommune & "&" & Chr(34) & " - " & Chr(34) & "&"
Formule = Formule & "C" & MaLigneCommune & "&" & Chr(34) & " (" & Chr(34)
Formule = Formule & "&" & "D" & MaLigneCommune & "&" & Chr(34) & ")" & Chr(34)
.Range("A" & MaLigneCommune).Formula = Formule
'Effectif (colonne E) : =NB.SI(Annuaire!E:E;A:A)
Formule = "=countif(Annuaire!E:E,A:A)"
.Range("E" & MaLigneCommune).Formula = Formule
.Range("B" & MaLigneCommune).Select
End With
Call Protéger
'Test de changement d'un libellé de Commune impliquant une mise à jour de l'annuaire
If ModeLigne = "Modif" Then
If MonLibellé <> MonAncienLibellé Then
MaLigneAnnuaire = Range("Annuaire").Row + 1
Application.ScreenUpdating = False
With Sheets("Annuaire")
ActiveSheet.Unprotect
Boucle_MAJ:
If Len(.Range("B" & MaLigneAnnuaire).Value) = 0 Then GoTo Fin_Boucle_MAJ
If .Range("E" & MaLigneAnnuaire).Value = MonAncienLibellé Then .Range("E" & MaLigneAnnuaire).Value = MonLibellé
MaLigneAnnuaire = MaLigneAnnuaire + 1
GoTo Boucle_MAJ
Fin_Boucle_MAJ:
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:= _
False, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:= _
True
End With
End If
Sheets("Communes").Activate
End If
End Sub
Oui, il y avait un petit bug sur les valeurs par défaut des listes déroulantes.
Je l'ai réglé avec un artifice (personne n'a pu me dire sur ce forum pourquoi ma fonction Evaluate plantait).
Mais voilà qui est réglé !
Cordialement, Daniel
Bonjour merci de votre aide mais dis moi j'avais déjà commencé a remplir la base données j'ai plusieurs noms et adresses comment faire pour les mettre sur la nouvelle base de données
est il possible de faire copier dans l'ancien et coller sur la nouvelle ou dois je tout recommencer a encoder un à un
merci encore
Il faut ôter la protection, insérer et coller les lignes et trier...
Merci beaucoup
bon apres midi
Dan42153 a écrit :Il faut ôter la protection, insérer et coller les lignes et trier...
bonjour désole mais ça, marche pas ça me, fais des codes erreur a l'infini ci joint le fichier original déjà rempli et sur ce fichier que j'arrive pas a rajouter des nouvelles enrengistrement
merci de m'aider
Bonjour désolé je reviens vers vous car j'ai eu un grand problème une de mes collègues a du touchée sur je ne sais quel bouton et les
sigles en haut en bleu qui permettait de rajouter modifier filtrer supprimer ou revenir à l’accueil ont disparu est je ne sais pas comment faire pour les faire réapparaitre.
en deux je me demandais s'il y'a une possibilité au niveau du statut d'avoir un choix pour la sélection
c'est à dire nous avons des membres qui ont plusieurs statuts.
un membre peut être a la fois Parents des résidents , membre effectif ,donateur etc.
pour le moment je suis obligé de répéter le nom autant de fois et a chaque fois sélectionner le statuts.
merci encore une fois de plus
bonne journée
Bonjour,
Falsby a écrit :je ne sais pas comment faire pour les faire réapparaitre.
Il faut absolument faire une sauvegarde du classeur sur support externe (disque externe, clé USB, stockage dans le cloud), surtout si vous êtes plusieurs à l'utiliser, ou si vous ôtez la protection de temps à autre. Cette sauvegarde doit être effectuée idéalement automatiquement (tâche planifiée), et à une fréquence identique aux accès...
Falsby a écrit :nous avons des membres qui ont plusieurs statuts.
Première hypothèse de solution, créer des combinaisons de statuts : "Parents résidents - Membre effectif" par exemple... Autre hypothèse : créer une autre feuille pour les Positions statutaires... L'important étant de pouvoir obtenir la liste des membres correspondant à un statut, sans gonfler artificiellement l'annuaire. L'inscription d'une même personne sur deux lignes déroge à cette dernière règle...
D'une manière générale, le classeur a été fournir avec la protection activée : manifestement, des utilisateurs ont ôté la protection et ajouté des lignes à la main (communes)... ce qui a des conséquences fâcheuses sur le fonctionnement global : à éviter, utiliser plutôt les boutons, qui sont là pour ça...
Enfin, dernière observation : quand dans l'annuaire, une commune apparaît en rouge, cela signifie que la commune a été modifiée dans la feuille Communes. Cela se produit notamment si on fait sauter les protections pour modifier les valeurs hors macros. C'est la même chose pour les statuts, et pour toutes les listes en fait...
Voilà le fichier rétabli... Cordialement, Daniel
Bonjour merci infiniment voila je viens de le mettre sur notre disque dur externe
pour ce qui est des statut je penses que je pourrai pas le faire je connais pas bien Excel moi ce que je voudrai c'est d'avoir
une liste de sélection avec des cases à coches comme dans l'exemple ci-joint
Falsby a écrit:
nous avons des membres qui ont plusieurs statuts.
Première hypothèse de solution, créer des combinaisons de statuts : "Parents résidents - Membre effectif" par exemple... Autre hypothèse : créer une autre feuille pour les Positions statutaires... L'important étant de pouvoir obtenir la liste des membres correspondant à un statut, sans gonfler artificiellement l'annuaire. L'inscription d'une même personne sur deux lignes déroge à cette dernière règle...
merci encore et bonne journée
bonjour Daniel,
je reviens vers vous encore une nouvelles fois pour ma base de données.
je suis confronté a des petits problèmes au niveau des statuts.
actuellement je suis obligé de répéter plusieurs noms en fonction de leur statuts car une personne peut avoir plusieurs statuts
exemple Donateur, parents résidents etcccccc.
y"a t il pas une possibilité de pouvoir attribuer plusieurs statut a une personne au lieu de répéter son nom plusieurs fois.
voire exemple
Bonjour Falsby,
Je ne vois qu'un moyen simple, et encore... ça pourrait consister à insérer quelques colonnes (Statut 2, Statut 3, voire Statut 4, Statut 5), pour enregistrer plusieurs statuts pour une même personne (sur la même ligne, donc).
Avantages :
- ça peut être assez vite fait, même si je ne peux rien garantir car je suis charrette sur pas mal de choses, et il faut adapter le formulaire...
- ça permet de voir assez vite ce que fait une personne dans l'asso
Inconvénients :
- ça oblige à déterminer un nombre max de statuts pour une même personne : si ce nombre est dépassé, c'est cuit...
- ça ne permet pas de lister facilement les personnes exerçant tel statut dans l'asso, l'information pouvant se trouver dans plusieurs colonnes différentes...
- ça interdit de même l'usage des tableaux et graphiques croisés dynamiques qui auraient le statut pour critère d'analyse...
Ceci dit, je ne vois rien de plus simple...
Cordialement, Daniel
bonsoir
merci je vais essayer et voire