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

Boîte d'avertissement avant copie de données

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

B

bencourriel

Guest
Bonjour à tous!

J'ai monté un petit code VBA pour copier des données d'un premier fichier EXCEL (Saisie) vers un deuxième fichier EXCEL (Base de données). Grosso, la macro cherche la dernière ligne vierge dans le fichier "Base de données" et copie les données de la feuille "Saisie". Tout fonctionne mais j'aimerais ajouter un bout de code pour faire ceci :

Si la DATE inscrite au fichier "Saisie" se trouve dans l'une des lignes de la première colonne du fichier "Base de données", ouvrir une boîte texte offrant la possibilité à l'usager de poursuivre ou d'annuler. Si l'usager poursuit, j'aimerais que la macro supprime toutes les lignes contenant cette date avant d'exécuter la macro que j'ai créée. Dans le cas où l'usager choisi annuler, tout s'arrête.

Je joins un fichier EXCEL avec deux feuilles représentant chacune l'un des deux fichiers EXCEL auxquels je fais référence. Merci à l'avance pour vos précieux conseils!
 

Pièces jointes

Re : Boîte d'avertissement avant copie de données

Bonjour,

Un essai :

Code:
Option Explicit
Sub transfert()
Dim MaDate As Long, DerLig As Long, Style As Long, Reponse As Long
Dim DerCol As Byte, Longueur As Byte
Dim DerCel As Range
Dim Msg As String
Msg = "Souhaitez-vous vraiment continuer?"
Style = vbYesNo + vbCritical + vbDefaultButton2
Reponse = MsgBox(Msg, Style)
If Reponse = vbNo Then Exit Sub
With Sheets("1er fichier - Saisie")
    MaDate = .Range("C2").Value
    DerLig = .[B65000].End(xlUp).Row
    DerCol = .[IV5].End(xlToLeft).Column
    .Range(.Cells(6, 2), .Cells(DerLig, DerCol)).Name = "base"
End With
With Sheets("2e fichier - Base de données")
    If Not IsError(Application.Match(MaDate, .Columns(1), 0)) Then
        Longueur = Application.CountIf(.Columns(1), MaDate)
        .Cells(Application.Match(MaDate, .Columns(1), 0), 1).Resize(Longueur).EntireRow.Delete
    End If
    Set DerCel = .[A65000].End(xlUp)(2)
    Range("base").Copy
    DerCel.Offset(, 1).PasteSpecial xlPasteValues
    DerCel.Resize(Range("base").Rows.Count).Value = Format(MaDate, "d-mmm-yy")
End With
End Sub

Bon courage
 
Re : Boîte d'avertissement avant copie de données

Bonjour bhbh, le forum,

Merci beaucoup bhbh pour ta réponse. Ça fonctionne très bien. Désolé du délai de réponse, j'ai voulu bien tester le module et essayer des choses avant de poser une question complémentaire si je peux me permettre :

Je comprends que le code suivant permet de comparer deux plages de données dans un même fichier Excel.

With Sheets("1er fichier - Saisie")
MaDate = .Range("C2").Value
DerLig = .[B65000].End(xlUp).Row
DerCol = .[IV5].End(xlToLeft).Column
.Range(.Cells(6, 2), .Cells(DerLig, DerCol)).Name = "base"
End With
With Sheets("2e fichier - Base de données")
If Not IsError(Application.Match(MaDate, .Columns(1), 0)) Then
Longueur = Application.CountIf(.Columns(1), MaDate)
.Cells(Application.Match(MaDate, .Columns(1), 0), 1).Resize(Longueur).EntireRow.Delete
End If

Si les plages de données étaient dans deux fichiers XLS différents, que devrait-on mettre à la place de "With Sheets("1er fichier - Saisie")"?

À voir qu'on peut réussir à faire autant de choses en si peu de lignes de code, je crois qu'un bon livre de VBA ne me fera pas de tort...

Merci pour tout!
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

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