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

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

  • Initiateur de la discussion Initiateur de la discussion Aurore76
  • 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 !

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

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:
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

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
 
Alors là ça dépasse de loin mon maigre niveau en Excel, je ne sais meme pas ce qu'est Power Query 😊

Va falloir que je trouve autre chose ou que je revois mes attendus à la baisse...

Merci pour vos réponses

Aurore
 
- 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
3
Affichages
649
Réponses
7
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…