Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Enregistrement de données

  • Initiateur de la discussion Initiateur de la discussion link93
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

link93

XLDnaute Occasionnel
Bonjour à tous,

Voila j'ai une question sur la possibilité de sauvegarde des données d'une plage de cellule dans un tableau spécifique mais quand fonction d'un critère les valeurs ne soit changé que sur une ligne.

Je suis ouvert à toutes méthode possible ^^.

ci-joint un fichier excel qui j'espère vous aidera à comprendre mon problème.
 

Pièces jointes

Re : Enregistrement de données

Bonjour mromain,

J'ai eu le temps de voir ton fichier très détaillé et je t'en remercie. De celui ci j'aurai une question.

Est t'il possible plutôt que d'indiquer une plage de cellule ou l'on indique des résultats (B3:B12 de la feuille formulaire) il serait possible de cibler par cellule ?

Car sur mon fichier j'ai des espaces entre les différentes cellule on l'on indique le résultat par service et donc les données sont pas enregistrer dans la BDD à cause des vides d'où ma question sur la possibilité d'indiquer des cellules plutôt qu'une plage.

Thx
 
Re : Enregistrement de données

Bonjour link,

Voici la macro modifiée (je ne l'ai fait que pour les trois premières cases) :
VB:
'Cette macro se déclanche à chaque fois qu'une cellule change de valeur.
'La cellule qui vient de changer de valeur est "Target"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim numLigne As Long, numColonne As Long, feuilleBDD As Worksheet, cellule As Range, mem As Long

    'définir la feuille BDD
    Set feuilleBDD = ThisWorkbook.Sheets("BDD")

    'si la cellule qui vient de changer est B1 (sélection du service)
    If Not Application.Intersect(Target(1, 1), Range("B1")) Is Nothing Then
        
        '## on va donc charger depuis la BDD les données correspondantes au service sélectionné
        
        'rechercherr la cellule correspondante au service dans la première ligne de la BDD
        Set cellule = feuilleBDD.Range("1:1").Find(Range("B1"), , xlValues, xlWhole)
        
        'si la cellule a bien été trouvée
        If Not cellule Is Nothing Then
            'récupérer son numéro de colonne
            numColonne = cellule.Column
            
            'récupérer les données de cette colonne en B3:B12 (désactiver la gestion des évènements pour cette opération)
            mem = Application.EnableEvents: Application.EnableEvents = False
            Range("B3").Value = feuilleBDD.Range("A2").Offset(0, numColonne - 1).Value
            Range("B4").Value = feuilleBDD.Range("A3").Offset(0, numColonne - 1).Value
            Range("B5").Value = feuilleBDD.Range("A4").Offset(0, numColonne - 1).Value
            '...
            Application.EnableEvents = mem
        
        'sinon, afficher un message d'erreur et quitter la macro
        Else
            MsgBox "Le service correspondant n'a pas été trouvé dans la BDD.", , "Erreur"
            Exit Sub
        End If
    
    
    
    'sinon, si la cellule qui vient de changer est dans la zone B3:B12
    ElseIf Not Application.Intersect(Target(1, 1), Range("B3:B12")) Is Nothing Then
        
        '## on va charger dans la BDD la valeur qui vient de changer
        
        'rechercherr la cellule correspondante au service dans la première ligne de la BDD
        Set cellule = feuilleBDD.Range("1:1").Find(Range("B1"), , xlValues, xlWhole)
        
        'si la cellule a bien été trouvée
        If Not cellule Is Nothing Then
            'récupérer son numéro de colonne
            numColonne = cellule.Column
        End If
        
        'rechercherr la cellule correspondante à la catégorie (à gauche de la cellule qui vient de changer) dans la première colonne de la BDD
        Set cellule = feuilleBDD.Range("A:A").Find(Target(1, 1).Offset(0, -1), , xlValues, xlWhole)
        
        'si la cellule a bien été trouvée
        If Not cellule Is Nothing Then
            'récupérer son numéro de ligne
            numLigne = cellule.Row
        End If
        
        'si la ligne et la colonne on bien été trouvés
        If numLigne * numColonne <> 0 Then
            'écrire dans la cellule de la BDD la valeur saisie dans Target
            feuilleBDD.Cells(numLigne, numColonne).Value = Target(1, 1).Value
            
        'sinon, afficher un message d'erreur et quitter la macro
        Else
            MsgBox "Le cellule correspondante (Service/Catégorie) n'a pas été trouvée dans la BDD.", , "Erreur"
            Exit Sub
        End If
    End If
End Sub
a+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
327
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…