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 :

question VBA remplissage automatique


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
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Par défaut question VBA remplissage automatique
    Bonjour à tous,

    j'ai fait une macro qui permet de remplir les cellules de la colonne C en fonction du texte de la colonne B (choix dans une liste déroulante) et ca fonctionne très bien.
    Mais j'aurais voulu que si un utilisateur remplissait plutôt la colonne C, ca remplisse dans l'autre sens la colonne B automatiquement également...mais je ne sais pas si c'est possible.
    en gros si en colonne B j'ai 1 alors en C j'ai France, B=2 alors C= Chine, B=3 alors C= USA
    mais si je sélectionne plutôt France en C, est ce que ca peut automatiquement me mettre le 1 dans la colonne B? etc....

    merci d'avance pour votre aide!
    et bonne journée

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, voici une suggestion en utilisant l'évènement _Change de la feuille. Si un changement est détecté en colonne C, on attribue la valeur correspondante en colonne B. Cette macro est à coller dans le code de la feuille, pas dans un module standard.

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
     
        Set KeyCells = Range("C:C")
     
        If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
            ' Si la cellule modifiée est dans la colonne C, alors mettre à jour la colonne B.
            Select Case Target.Value
                Case "France"
                    Cells(Target.Row, "B").Value = 1
                Case "Chine"
                    Cells(Target.Row, "B").Value = 2
                Case "USA"
                    Cells(Target.Row, "B").Value = 3
            End Select
        End If
    End Sub

  3. #3
    Membre habitué
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Par défaut
    merci pour ton retour,

    j'ai fait un peu le même genre que toi (ci dessous) ce qui me permet de compléter B puis C de manière automatique mais est ce que ca peut le faire dans l'autre sens sans avoir à écrire une macro démesurée?

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("B12:B500")) Is Nothing Then
    Dim ligne As Integer
    For ligne = 12 To 500
     
    If Cells(ligne, 2) = "1" Then
         Cells(ligne, 3) = "France"
    End If
    If Cells(ligne, 2) = "2" Then
         Cells(ligne, 3) = "Chine"
    End If
    If Cells(ligne, 2) = "3" Then
         Cells(ligne, 3) = "USA"
    End If
     
     
    Next ligne
    End If
    End sub
    merci d'avance pour tes conseils

  4. #4
    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
    je propose de mettre un tableau dans une autre feuille en colonne A le code et en colonne B les pays (pour éventuelle évolution)
    puis :
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.EnableEvents = False
    Dim F As Worksheet
    Dim plage1 As Range
    Dim plage2 As Range
    Set F = Sheets("feuil2")
    Set plage1 = F.Range("A2:A" & F.Range("A" & Rows.Count).End(xlUp).Row)
    Set plage2 = F.Range("B2:B" & F.Range("B" & Rows.Count).End(xlUp).Row)
        If Target.Column = 1 Then
        Set C = plage1.Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not C Is Nothing Then Cells(ActiveCell.Row, 2) = F.Cells(C.Row, 2)
       End If
       If Target.Column = 2 Then
        Set D = plage2.Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not D Is Nothing Then Cells(ActiveCell.Row, 1) = F.Cells(D.Row, 1)
       End If
     Application.EnableEvents = True
    End Sub

  5. #5
    Membre habitué
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Par défaut
    Bonjour,

    Merci pour cette solution qui me parait très pratique pour la maintenance, le fait que ce soit sur une autre feuille.
    Seul petit problème c'est que ca ne fonctionne pas!
    peux tu m'aider?

    merci d'avance et bonne journée

  6. #6
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 509
    Par défaut
    Bonjour à tous,
    Pas de réponse, voici une autre approche

    • Soit une feuille Settings avec un CodeName : sys_Settings
    • Soit sur cette feuille un tableau nommé : vt_Pays avec deux colonnes Index et Pays
    • Remplir le tableau avec les villes et index voulu.


    Dans l'évènement Change de la feuille où seront entrées les données mettre le code ci-dessous.
    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
    Option Explicit
    Option Compare Text
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error GoTo Catch
        Application.EnableEvents = False
     
        ' // Si vide, ou plusieurs cellules on quitte
        If Target.Count > 1 Or Target.Value = vbNullString Then GoTo Catch
     
        ' // Si la frappe est dans la colonne B alors on teste
        If Not Intersect(Range("B:B"), Target) Is Nothing Then
            Dim SearchedRange As Excel.Range
            Set SearchedRange = sys_Settings.Range("vt_Pays[Index]").Find(Val(Target.Value), , xlValues, xlWhole)
            If Not SearchedRange Is Nothing Then Target.Offset(0, 1).Value = SearchedRange.Offset(0, 1).Value
            'Todo "Annuler l'entrée?"
     
            ' // Si la frappe est dans la colonne C alors on teste
        ElseIf Not Intersect(Range("C:C"), Target) Is Nothing Then
            Set SearchedRange = sys_Settings.Range("vt_Pays[Pays]").Find(Target.Value, , xlValues, xlPart)
            If Not SearchedRange Is Nothing Then Target.Offset(0, -1).Value = SearchedRange.Offset(0, -1).Value
            'Todo "Annuler l'entrée?"
        End If
     
    Catch:
        If Err.Number > 0 Then
            MsgBox "Oups... Nous avons rencontré une erreur : " & Err.Description
            Err.Clear
        End If
        Application.EnableEvents = True
     
    End Sub

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/02/2023, 18h42
  2. [XL-2013] Question sur Remplissage Automatique
    Par islande dans le forum Excel
    Réponses: 4
    Dernier message: 04/10/2021, 20h11
  3. [XL-2013] Choix d'une ligne pour un remplissage automatique de calendrier - vba
    Par idemanz7 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/03/2018, 00h22
  4. VBA Validation Remplissage automatique Formulaire WEB
    Par mathieulai dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/07/2017, 16h58
  5. [VBA-E] Form Excel VB, remplissage automatique d'un tableau
    Par evema dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/04/2007, 14h37

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