Microsoft 365 utilisation conditionnelle des données d'un formulaire

Aurore76

XLDnaute Nouveau
Bonjour à tous,

J'essaye de créer un tableau de gestion des courriers entrants et sortants de mon administration. J'ai fait un formulaire "ajout de courrier entrant" sur un premier onglet qui complète le tableau "chrono arrivé" sur un deuxième onglet. Et j'ai un formulaire "ajout d'un courrier départ" qui complète le tableau "chrono départ".

Deux questions:
- ya un bug sur la macro qui permet de d'ajouter un courrier départ à partir du formulaire mais je ne comprends pas ou est le problème....
- est-ce qu'il y a moyen en plus de remplir le chrono départ, qu'à partir du formulaire départ, quand on met un n° dans la case "en réponse au courrier...", les données 'service, date de départ et n° de départ" aillent se coller dans le chrono arrivée dans les cellules qui vont bien sur la ligne qui porte le n° du courrier arrivé renseigné?

Je mets le tableau en question en PJ ça sera peut etre plus clair que mon charabia du dessus.

D'avance merci!

Aurore
 

Pièces jointes

  • chrono courrier 2022 test macro.xlsm
    34.3 KB · Affichages: 15

Jacky67

XLDnaute Barbatruc
Bonjour à tous,

J'essaye de créer un tableau de gestion des courriers entrants et sortants de mon administration. J'ai fait un formulaire "ajout de courrier entrant" sur un premier onglet qui complète le tableau "chrono arrivé" sur un deuxième onglet. Et j'ai un formulaire "ajout d'un courrier départ" qui complète le tableau "chrono départ".

Deux questions:
- ya un bug sur la macro qui permet de d'ajouter un courrier départ à partir du formulaire mais je ne comprends pas ou est le problème....
- est-ce qu'il y a moyen en plus de remplir le chrono départ, qu'à partir du formulaire départ, quand on met un n° dans la case "en réponse au courrier...", les données 'service, date de départ et n° de départ" aillent se coller dans le chrono arrivée dans les cellules qui vont bien sur la ligne qui porte le n° du courrier arrivé renseigné?

Je mets le tableau en question en PJ ça sera peut etre plus clair que mon charabia du dessus.

D'avance merci!

Aurore
Bonjour,
Une piste ....
La macro "AjoutCourrierEntrant" pourrait ressembler à cela
VB:
Sub AjoutCourrierEntrant()
'
' AjoutCourrierEntrant Macro
'
    Dim FCible As Worksheet, derlg&
    Set FCible = Sheets("chrono arrivé")
    derlg = FCible.Cells(FCible.Rows.Count, "A").End(xlUp).Row + 1
    With Sheets("formulaire arrivé")
        If Application.CountA(.Range("D7,G7,D10,D13,D16")) = 5 Then
            FCible.Cells(derlg, 1) = "A"
            FCible.Cells(derlg, 2) = derlg - 1
            FCible.Cells(derlg, 3) = .[D7]
            FCible.Cells(derlg, 4) = .[D13]
            FCible.Cells(derlg, 5) = .[D10]
            FCible.Cells(derlg, 6) = .[G7]
            FCible.Cells(derlg, 7) = .[D16]
            .Range("D7,G7,D10,D13,D16").ClearContents
        Else
            MsgBox "Saisie incomplète" & vbLf & "Donnée non enregistrée", vbCritical, "Erreur"
        End If
    End With
End Sub
Dans cette exemple la feuille "chrono arrivé" est vide, mis à part la colonne titre.
Si cela convient, adapter la macro "AjoutCourrierDepart Macro" selon ce modèle
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour,

J'ai juste remanié la saisie du courrier sortant (départ). Votre feuille était protégée, c'est la raison qui faisait buter votre macro.
Dans la macro ci-dessous, l'utilisateur est informé de l'enregistrement du courrier. Les données du formulaire sont effacées s'il répond oui à la question qui lui est posé.
Le numéro de courrier est égale au numéro max de la colonne +1.

VB:
Sub AjoutCourrierDepart()
'
' AjoutCourrierDepart Macro
'
    Dim valeurs(1 To 1, 1 To 8)
    Dim NumDepart As Integer

    With ThisWorkbook
        '
        ' NumDepart = Max de la colonne + 1
        NumDepart = Application.Max(Sheets("Chrono départ").Range("T_Départs[n° de départ]")) + 1
        With .Sheets("formulaire départ")
            valeurs(1, 1) = "D"
            valeurs(1, 2) = NumDepart
            valeurs(1, 3) = .Range("D7")
            valeurs(1, 4) = .Range("D13")
            valeurs(1, 5) = .Range("G10")
            valeurs(1, 6) = .Range("D10")
            valeurs(1, 7) = .Range("D16")
            valeurs(1, 8) = .Range("G7")
        End With
        
        With .Sheets("Chrono départ").ListObjects("T_Départs")
            ' Ligne ajoutée en position 1 avec les valeurs collectée plus haut
            .ListRows.Add(1).Range.Value = valeurs
            ' Copier le format de la dernière ligne
            .ListRows(.ListRows.Count).Range.Copy
            ' le coller en ligne 1
             .ListRows(1).Range.PasteSpecial xlPasteFormats
        End With
        ' Enlève la marquise de sélection autour de la zone copiée
        ' vide le presse-papier
        Application.CutCopyMode = False
        '
        ' signaler à l'utilisateur que le courrier à bien été enregistrer
        ' et lui demander s'il veut effacer les données
        If MsgBox("le courrier au départ a bien été enregistré sous le numéro : " & NumDepart _
                    & vbCrLf & vbCrLf & _
                    "Effacez les données du formulaire ?", _
                    vbYesNo, _
                    "Saisie courrier au départ") = vbYes Then
                '
                ' Vider les cellules du formulaire si la réponse est oui
                ' Déprotéger la feuille en premier puis la reprotéger
                With .Sheets("Formulaire départ")
                    .Unprotect
                    .Range("$D$7,$D$10,$D$13,$D$16,$G$7,$G$10") = Empty
                    .Protect
                End With
        End If
        
    End With
  
End Sub

Le tableau a été modifié en Tableau structuré. Vous avez office 365, il est temps de s'y mettre :)
cordialement
 

Pièces jointes

  • chrono courrier 2022 test macro.xlsm
    44.5 KB · Affichages: 20

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Une fois le courrier au départ enregistré avec son numéro, il est facile de retrouver ses données par formules ou power-query. Power query est même plus adapté pour rechercher plusieurs courriers sortants qui répondent à un seul courrier entrant (ou contraire également), l'important ici est qu'ils aient un identifiant unique.

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 945
Membres
101 849
dernier inscrit
florentMIG