Microsoft 365 Enregistrer une nouvelle donnée dans un tableau

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 !

Alain 79

XLDnaute Occasionnel
Supporter XLD
Bonjour,
Je recherche la formule pour enregistrer des numéros de dossiers sur un même compte client, c'est simple mais je bloque (c'est surement la chaleur ou plutôt l'âge).
Je joins un fichier exemple qui est plus parlant e crois.
D'avance merci à ceux ou celui qui pourra m'aider.
 

Pièces jointes

Solution
Bonsoir,
Votre nouveau fichier n'a rien à voir avec le précédent, surtout au niveau des calculs de colonnes déjà occupées.
Ci joint une PJ réactualisée avec :
VB:
Sub EnregistrementDossier()
Dim Ligne%, Colonne%, Dossier$
Ligne = [NumLigne]
Dossier = Sheets("Saisie").Range("F5")
With Sheets("Repertoire")
    If Application.CountIf(.Rows(Ligne), Dossier) > 0 Then MsgBox "Ce dossier a déjà été enregistré.": Exit Sub
    For Colonne = 16 To 27 ' De la colonne P à AA
        If .Cells(Ligne, Colonne) = "" Then Exit For
    Next Colonne
    .Cells(Ligne, Colonne) = Dossier
End With
End Sub
J'en ai profité pour simplifier les deux autres macros, à tester :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim L%
For L = 6 To 19...
Merci d'avoir répondu. Mais la réponse ne peut pas s'appliquer pour moi car le fichier d'exemple est une petite partie d'un fichier beaucoup plus important auquel je ne peux pas rajouter le formulaire proposé. La macro d'enregistrement du nouveau dossier s'exécute à partir d'élément contenu dans une feuille.
@+ Alain
 
Bonsoir Alain, Fanfan,
Si j'ai bien compris, peut être avec :
VB:
Sub EnregistrementDossier()
Dim ligne%, DC%
ligne = [NumOrdre] + 1
With Sheets("Repertoire")
    DC = Application.CountIf(.Rows(ligne), "<>")
    .Cells(ligne, DC + 1) = Sheets("Saisie").[F5]
End With
End Sub
 
Bonsoir Sylvanu
Après quelques essais sur mon fichier d'exemple, ça fonctionne mais un autre problème apparaît, à savoir que si j'enregistre plusieurs fois le compte, le dossier est de nouveau enregistré dans a cellule suivante. En effet, dans le vrai fichier le compte comporte d'autres informations que celles indiquée dans l'exemple et la saisie de ces informations ne s'effectue pas en une seule, d'où l'obligation d'effectuer plusieurs enregistrements.
Le dossier comporte d'autres informations autre que son numéro de classement, et à défaut d'autre solution, je pense que j'ajouterai une colonne au tableau du dossier pour spécifier l'enregistrement au compte.
En tout cas, un grand merci pour cette première solution.
 
Re,
Peut être pouvez vous vérifier que ce dossier n'a pas déjà été enregistré, par ex avec :
VB:
Sub EnregistrementDossier()
Dim Ligne%, DC%, Dossier$
Ligne = [NumOrdre] + 1
Dossier = Sheets("Saisie").[F5]
With Sheets("Repertoire")
    If Application.CountIf(.Rows(Ligne), Dossier) > 0 Then MsgBox "Ce dossier a déjà été enregistré.": Exit Sub
    DC = Application.CountIf(.Rows(Ligne), "<>")
    .Cells(Ligne, DC + 1) = Dossier
End With
End Sub
 
Bonjour,
Désolé mais je rencontre un problème lorsque j'applique la macro proposée à mon vrai fichier.
J'ai refait le fichier d'exemple qui s'apparente un peu plus à mon vrai fichier et qui montre les anomalies suivantes :
1) lors de l'enregistrement du 1er dossier, le collage s'effectue sur la colonne précédente par rapport à celle du 1er dossier (dans l'exemple, le n° de dossier est collé dans la colonne Q et R
2) lorsqu'un n° de dossier est enregistré (colonne R) l'enregistrement d'un 2éme dossier écrase le contenu du premier dossier (le n° du 2éme dossier est collé dans la colonne déjà occupée R au lieu de S
Par contre si on fait un 2éme enregistrement du même dossier la boite de dialogue s'affiche bien et la macro est arrêtée.
Mes compétences sont insuffisantes pour comprendre ce qui ne va pas, alors je sollicite à nouveau votre aide.
 
Bonsoir,
Votre nouveau fichier n'a rien à voir avec le précédent, surtout au niveau des calculs de colonnes déjà occupées.
Ci joint une PJ réactualisée avec :
VB:
Sub EnregistrementDossier()
Dim Ligne%, Colonne%, Dossier$
Ligne = [NumLigne]
Dossier = Sheets("Saisie").Range("F5")
With Sheets("Repertoire")
    If Application.CountIf(.Rows(Ligne), Dossier) > 0 Then MsgBox "Ce dossier a déjà été enregistré.": Exit Sub
    For Colonne = 16 To 27 ' De la colonne P à AA
        If .Cells(Ligne, Colonne) = "" Then Exit For
    Next Colonne
    .Cells(Ligne, Colonne) = Dossier
End With
End Sub
J'en ai profité pour simplifier les deux autres macros, à tester :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim L%
For L = 6 To 19
    Cells(L, "C") = Cells(6, L + 5)
Next L
End Sub

Sub EnregistrementCompte()
Dim Ligne%, Colonne%
Ligne = [NumLigne]
With Sheets("Repertoire")
    For Colonne = 2 To 16
        .Cells(Ligne, Colonne) = Sheets("Saisie").Cells(5, Colonne + 9)
    Next Colonne
End With
End Sub
Normalement elles font la même chose.
 

Pièces jointes

Re,
Etes vous sur de votre macro Worksheet_SelectionChange ?
Dans l'état, à chaque fois que vous cliquez dans une cellule cette macro s'exécute.
Normalement on en réduit la portée que sur une plage.
Que vouliez vous faire ?
 
Re,
Etes vous sur de votre macro Worksheet_SelectionChange ?
Dans l'état, à chaque fois que vous cliquez dans une cellule cette macro s'exécute.
Normalement on en réduit la portée que sur une plage.
Que vouliez vous faire ?
Bonjour,
Je teste dans la journée la macro que vous m'avez envoyé, en effet ça fonctionne sur le fichier d'exemple fourni dont le tableau représente les mêmes colonnes et emplacements que l'original, seul des colonnes supplémentaires sont ajoutées à droite du tableau.
Au départ, j'utilisai la macro Worksheet_SelectionChange pour compléter les éléments sur la feuille lorsque l'on sélectionner un nom, mais effectivement ça me posait un problème lors que j'exécutais d'autres macros sur la même feuille, alors je l'ai supprimé et créé un bouton lié à une macro pour mettre à jour les éléments d'identification. Je n'arrivai pas trouver la solution pour éviter son exécution.
Une fois que j'aurai effectué le test sur mon fichier, je reviendrai vous indiquez le résultat.
En attendu, je vous remercie vivement de l'aide que vous m'apportez car à mon âge (très bientôt 80 ans) et n'ayant jamais suivi de formation je ne peux faire que des macros basiques, et bien que j'essaie de comprendre celles que vous m'envoyez, je ne suis pas capable de les créer. J'ai découvert Excel en version Excel 4 sans le VBA, ça ne date pas d'hier.
Encore mille fois merci et bonne journée
 
Re
Les premiers essais pour la macro "EntregistrementDossier" sont concluant et une nouvelle fois je vous en remercie.
Maintenant je vais regarder de plus près les deux autres macros fournies pour les adapter à mon fichier car elles seront plus rapides d'exécution.
Pour l'instant je vais marquer la question comme étant solutionnée et reviendrai créer une nouvelle discussion si je rencontre des problèmes.
1752482014076.png
 
Re,
J'ai découvert Excel en version Excel 4 sans le VBA, ça ne date pas d'hier.
C'est vrai que ça ne date pas d'hier, mais le langage Excel4 était bien pratique et à rendu bien des services ... en attendant le VBA.
j'utilisai la macro Worksheet_SelectionChange pour compléter les éléments sur la feuille
Vous avez deux macros possible :
Worksheet_SelectionChange qui s'active quand on clique sur une cellule.
Worksheet_Change qui s'active quand on modifie une cellule.
Dans votre cas c'est cette dernière que vous auriez du utiliser.
Comment limiter le champ d'action de ces deux macros.
Target représente la plage sélectionnée.
Il faut limiter la portée en faisant :
VB:
If Not Intersect(Target, Plage) Is Nothing Then
La macro ne s'activera que si la cellule cliquée ou modifiée est dans Plage.
Par ex pour votre macro :
Code:
Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C5")) Is Nothing Then
        ' Cette macro ne s'éxecutera que si on a modifié la cellule C5.
        Dim L%
        For L = 6 To 19
            Cells(L, "C") = Cells(6, L + 5)
        Next L
    End If
End Sub
Cette macro ne s'activera que si vous modifiez la valeur en C5 qui la liste déroulante Désignation.
 
Re,
Je viens d'enregistrer le contenu de votre message afin de l'analyser et le comprendre pour pouvoir l'utiliser, car c'est très intéressant et utile.
Vous feriez un excellent professeur car les explications sont claires, nettes et précises.
Encore un fois, merci
 
- 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
12
Affichages
619
Retour