IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

saisie dans une base de donnée


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut saisie dans une base de donnée
    Bonjour, je m'initie au vba et je voudrais faire des saisies dans une base de donnée.
    j'utilise un script fourni dans un livre mais il ne fonctionne pas parfaitement.
    tout d'abord dans mon classeur, j'ai créé un tableau nom - prénom avec la ligne de titre en gras pour qu'excel le reconnaisse en temps que base de données

    puis dans visual basic, j'ai inséré le script suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub SaisieBD()
    On Error Resume Next
    Dim NbEntrées As Integer
    Dim DernierNom As String
    Dim i As Integer
    NbEntrées = InputBox("COMBIEN DE PERSONNES DESIREZ VOUS AJOUTER ?", _
    "Base de données de chantal")
    ReDim Vnom(NbEntrées, 2) As String
    ReDim VPrénom(NbEntrées, 2) As String
    For i = 1 To NbEntrées
        Vnom(i, 1) = InputBox("Entrez le nom n° " & i, "Base de données de chantal")
    VPrénom(i, 2) = InputBox("Entrez le prénom n°" & i, _
    "Base de données de chantal")
    Next
    ' recherche de la position du dernier nom saisi
    DernierNom = Range("a6").End(xlDown).Address
    'positionnement sur le dernier nom de la liste
    Range(DernierNom).Select
    ' Entrée des données dans le tableau
    For i = 1 To NbEntrées
        ActiveCell.Offset(1, 0).Value = Vnom(i, 1)
        ActiveCell.Offset(1, 1).Value = VPrénom(i, 2)
        ActiveCell.Offset(1, 0).Select
    Next
    End Sub
    Tout fonctionne jusqu'au moment d'entrer les noms, je me retrouve à la dernière cellule du classeur dans la colonne A 65536 !

    Je n'arrive pas à déterminer ce qui ne va pas, je ne m'y connais pas assez... pouvez vous me donner un coup de main ? merci d'avance

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Pour connaitre la dernière ligne et donc le dernier nom
    http://www.developpez.net/forums/d45...gnees-feuille/

    Tu te place en A6 et descend jusqu'à la fin de la plage. Si A6 est pleine jusqua une cellule vide ou inversement. Si A6 est vide ca coince

    Utilise plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DerniereLigne = Range("A65536").End(xlUp).Row

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut chantalina et le forum
    Une adepte de Anne Roumanov ?
    je m'initie au vba et je voudrais faire des saisies dans une base de donnée.
    j'utilise un script fourni dans un livre mais il ne fonctionne pas parfaitement.
    hé oui, les livres ont des coquilles et les programmes ne sont pas forcément... au top (soyons gentils).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub SaisieBD()
    On Error Resume Next
    En cas d'erreur faire comme si de rien n'était et continuer à l'instruction suivante. Astuce de "grand programmeur professionnel" pour ne pas que les clients leur reprochent d'avoir des messages d'erreurs récurrents. Comme tu débutes, je te conseillerais d'éviter le Resume Next, au profit d'une gestion d'erreur, ou de laisser Excel gérer les erreurs et te prévenir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim NbEntrées As Integer
    Dim DernierNom As String
    Dim i As Integer
    NbEntrées = InputBox("COMBIEN DE PERSONNES DESIREZ VOUS AJOUTER ?", _
    "Base de données de chantal")
    ReDim Vnom(NbEntrées, 2) As String
    ReDim VPrénom(NbEntrées, 2) As String
    Là, je suis un peu perdu : tu déclares tes variables, ça c'est bien, mais pourquoi pas tes tableaux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Vnom() As String
    Dim VPrénom() As String
    placées avec tes autres dim, ou tu les déclares avec Dim, pas redim, après avoir défini le nombre d'entrées.
    ReDim est une instruction qui permet de modifier le dernier indice (voir l'aide avec F1). Donc, tu devrais avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Vnom() As String
    Dim VPrénom() As String
    '.................
    NbEntrées = InputBox("COMBIEN DE PERSONNES DESIREZ VOUS AJOUTER ?", _
    "Base de données de chantal")
    ReDim Vnom(2, NbEntrées) As String
    ReDim VPrénom(2, NbEntrées) As String
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i = 1 To NbEntrées
        Vnom(i, 1) = InputBox("Entrez le nom n° " & i, "Base de données de chantal")
    VPrénom(i, 2) = InputBox("Entrez le prénom n°" & i, _
    "Base de données de chantal")
    Next
    Bon, je comprends pas tout : soit c'est une erreur du bouquin, soit c'est une erreur de compréhension (même si ça fonctionne tant que tu n'as qu'une seule entrée).
    Tu déclares (avec redim) 2 variables tableaux. Pourquoi ? Une seule semble suffire :]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i = 1 To NbEntrées
        Vnom(1, i) = InputBox("Entrez le nom n° " & i, "Base de données de chantal")
        Vnom(2, i) = = InputBox("Entrez le prénom n°" & i, _
    "Base de données de chantal")
    Next
    ainsi codée la variable Vnom est un tableau à 2 indices
    - Premier indice : 1 => Nom ; 2 => prénom
    - second indice variable : le nombre d'entrées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ' recherche de la position du dernier nom saisi
    DernierNom = Range("a6").End(xlDown).Address
    'positionnement sur le dernier nom de la liste
    Range(DernierNom).Select
    ' Entrée des données dans le tableau
    For i = 1 To NbEntrées
        ActiveCell.Offset(1, 0).Value = Vnom(i, 1)
        ActiveCell.Offset(1, 1).Value = VPrénom(i, 2)
        ActiveCell.Offset(1, 0).Select
    Next
    End Sub
    Pourquoi faire simple quand on peut faire compliqué (et faux).
    Pour la recherche du dernier enregistrement, comme Krovax (salutations ), je suis contre les (xlDown) : on n'a pas systèmatiquement la même réponse en fonction de l'état de la cellule et de la suivante (sans compter les cellules vides en plein milieu).
    De plus utiliser des select me fait penser à un débutant : c'est ce que fait excel dans les macros "apprentissage" (Macro>>Nouvelle macro), mais on s'aperçoit assez rapidement de ses limites et de la perte de temps.
    Je pense que on peut améliorer le code, sans trop se fouler. Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub SaisieBD()
    'Déclarations =======================================================
    Dim NbEntrées As Integer
    Dim DernierNom As Range
    Dim X As Integer
    'M(ise à l')E(tat) I(nitial) ========================================
    NbEntrées = InputBox("COMBIEN DE PERSONNES DESIREZ VOUS AJOUTER ?", _
    "Base de données de chantal")
    Dim Vnom(2, NbEntrées) As String
    'Entrées des noms ====================================================
    For X = 1 To NbEntrées
        Vnom(1, X) = InputBox("Entrez le nom n° " & i, "Base de données de chantal")
        Vnom(2, X) = InputBox("Entrez le prénom n°" & i, _
    "Base de données de chantal")
    Next
    'recherche cellule du dernier nom ===================================
    DernierNom = Range("A" & Rows.Count).End(xlUp)
    ' inscription à la suite de l'existant ==============================
    For X = 1 To NbEntrées
        DernierNom.Offset(X, 0) = Vnom(1, i)
        DernierNom.Offset(X, 1) = Vnom(2, i)
    Next
    End Sub
    Si tu as des questions, n'hésite pas
    A+

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour gorfael
    Jolie analyse du code, je mettais contenté de regarder le problème de la dernière ligne grosse erreur de ma part visiblement.
    En tout cas ca me conforte dans l'idée que j'ai bien fait de ne pas me lancer dans un bouquin pour apprendre le VBA les tutos de se site sont vraiment très très bien fait et a mon avis largement suffisant

    Le deux lien utile (tu les retrouvera en haut de la page )
    les tutos
    http://excel.developpez.com/cours/?p...#environnement
    la faq
    http://excel.developpez.com/faq/?page=VBA
    Et si tu décide de changer de bouquin (je ne sais pas ce que val les critiques mais je sais que parmis ce qui les rédige il y a des gens sacrément calé )
    http://excel.developpez.com/livres/

Discussions similaires

  1. Userform/Saisie dans une base de données /Liens hypertexte
    Par GADENSEB dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/04/2014, 15h24
  2. Connaitre le nombre de saisies dans une base de données
    Par b.bilel dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/01/2008, 22h09
  3. intégrer un fichier image dans une base de donnée?
    Par Lody dans le forum Requêtes
    Réponses: 9
    Dernier message: 16/03/2006, 19h08
  4. [SYBASE]Libérer espace libre dans une base de données ?
    Par le_parrain dans le forum Sybase
    Réponses: 3
    Dernier message: 14/05/2004, 09h36
  5. [Strategie][Java][XML] Import dans une base de données
    Par nad dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 23/09/2002, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo