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 :

Mettre à jour une ligne depuis une ComboBox dans une autre feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Formateur
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 70
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Par défaut Mettre à jour une ligne depuis une ComboBox dans une autre feuille
    Bonjour

    Ayant peu de notion VBA, je vais essayer d'être le plus explicite possible

    J'ai deux feuilles, contenant des données, chaque ligne contient un numéro ID dans la colonne A4:A15000. Certaines lignes sont aussi copiée dans la feuille-2 (pour l'instant manuellement)
    J'aimerais, lorsque je modifie une infos dans une ligne depuis ma comboBox de ma feuille-1, que la macro cherche si le numéro ID de la ligne se trouve déjà dans la feuille-2.
    Si c'est le cas, elle me met à jour la ligne entière de la feuille-2, sinon elle me copie la nouvelle ligne dans la cellule A4 de la feuille-2 ( ce qui sous-entend que les autres lignes se décalent vers le bas )

    pfuii!

    merci de votre aide
    LeoPaul

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    début de piste à adapter sachant que chui débutant aussi en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub chercheEtCopié()
    Dim plage As Range
    Set plage = Sheets("feuil2").Range("A2:A" & [A65536].End(xlUp).Row)
    MonCode = ComboBox1.Value
    For Each Cell In plage
     If Cell.Value = MonCode Then
     MsgBox ("Code existe déja")
     Else
     'ton code pour remplir feuil2
     End If
     Next Cell
    End Sub

  3. #3
    Membre habitué
    Femme Profil pro
    Formateur
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 70
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Par défaut "comment remplacer l'ID trouvée en feuille-2"
    Bonjour

    c'est justement là que je bloque, je n'ai aucune idée comment faire pour que la macro "remplace / met à jour" la ligne contenant déjà le m ID dans la feuille.2.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Par défaut
    Bonjour LeoPaul, bonjour Bennasr.

    Je te joins un exemple.

    Le principe est le suivant :

    1) A l'initialisation on enregistre deux dictionary.
    Le premier correspond aux ID de la Feuil1, la clé étant l'ID et l'item le n° de la ligne.
    Le second sera celui de la Feuil2 avec le même principe.

    On alimente la Combobox avec les clés du premier dictionary.

    2) En validant la combobox :
    A toi d'insérer le code qui permet de modifier tes informations de la Feuil1 (je suppose plusieurs colonnes après la première)
    Une fois modifiée, on vérifie si la valeur de la Combobox existe dans les clés du dico 2.
    Ce qui revient à vérifier si l'ID de la Feuil1 que tu viens de modifier existe dans la Feuil2.
    S'il existe, on copie la ligne correspondante de la Feuil1 (l'utilité d'avoir enregistré le n° de la ligne), sur la Feuil2 (ce qui remplacera toutes les valeurs par celles modifiées, plus simple que de faire cellule par cellule, mais on pourra limiter la zone si le nombre de colonnes est connu d'avance).
    Si l'ID n'existe pas, on insère la ligne de la Feuil1 correspondante à la ligne 4 de la Feuil2 en décalant les autres lignes vers le bas.

    J'espère répondre à la demande.
    N'hésite pas si tu as d'autres questions.

    Le code ci-dessous, en plus du fichier :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Dim f1 As Worksheet, f2 As Worksheet
    Dim l1 As Long, l2 As Long
    Dim d1 As Object, d2 As Object
    Private Sub CommandButton1_Click()
        '--- Ajouter ton code qui enregistre les valeurs de modif dans ta Feuil1
        ' Tes modifications ici
        '--- On cherche si la valeur de la Combobox existe dans la Feuil2
        If IsNumeric(Me.ComboBox1.Value) = True Then
            v = CLng(Me.ComboBox1.Value)
                Else: v = Me.ComboBox1.Value
        End If
        '- Si l'ID existe en Feuil2, on copie colle la ligne au même emplacement
            If d2.Exists(v) Then
                f1.Rows(d1(v)).Copy f2.Rows(d2(v))
        '- Sinon on l'insère en ligne 4 de la Feuil2
                    Else
                        f1.Rows(d1(v)).Copy: f2.Rows("4").Insert Shift:=xlDown
            End If
        '--- On décharge le presse papier
        Application.CutCopyMode = False
        '--- On décharge l'usf
        Unload Me
    End Sub
     
    Private Sub UserForm_Initialize()
        '--- On définit les variables
        Set f1 = Feuil1: Set f2 = Feuil2
        Set d1 = CreateObject("Scripting.Dictionary"): Set d2 = CreateObject("Scripting.Dictionary")
        l1 = f1.Cells.Find("*", , , , xlByRows, xlPrevious).Row: l2 = f2.Cells.Find("*", , , , xlByRows, xlPrevious).Row
            '--- On remplit les dictionary
            '- Feuil1
            For Each Cell In f1.Range("a1:a" & l1)
                If Cell.Value <> "" Then d1(Cell.Value) = Cell.Row
            Next Cell
            '- Feuil2
            For Each Cell In f2.Range("a1:a" & l2)
                If Cell.Value <> "" Then d2(Cell.Value) = Cell.Row
            Next Cell
                '--- On alimente la Combobox
                Me.ComboBox1.List = d1.Keys
    End Sub
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Merci thebenoit59 pour ta disponibilité , bonjour les membres de ce syper site
    c'est la demande de LeoPaul mais j'ai beaucoup profité surtout que c'est la première fois que je comprends un peu l'utilisation du dictionnaire
    c'est un tuto pour moi
    BONNE JOURNÉE A VOUS TOUS

  6. #6
    Membre habitué
    Femme Profil pro
    Formateur
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 70
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Par défaut
    youaaa !

    Merci

    je comprends pourquoi on t'appelle "The" Benoit59

    au plaisir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  2. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  3. [MySQL] inserer une ligne d'une table dans une autre table
    Par piero53 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 14/12/2008, 18h29
  4. Mettre à jour les lignes d'une colonne dans dataTable
    Par Mikelester12 dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/07/2007, 08h31
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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