Procédure de mise à jour et copie de plages de données

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 !

Fdaga

XLDnaute Nouveau
Supporter XLD
Bonjour,

J'ai besoin d'aide pour une association pour la mise en place d'un fichier avec une seule avec une MsgBox pour choisir les options : modifier, enregistrer, quitter. ci joint deux pro

Fichier constitué de 3 feuilles : Un onglet « PLAGES » masqué de 60 plages de 7 lignes, 1 onglet de « SAISIE », 1 onglet pour stocker dans l’onglet « COMPIL » masqué les informations de chaque plage sur une ligne

Fonctionnement souhaité

A partir de la page « Saisie », chaque structure peut taper son code secret puis la procédure VBA :

Copie, dans l’onglet « PLAGES » , la plage correspondant au code entré

La colle dans la plage vierge de l’onglet « SAISIE »

Invite à modifier les données,

Copier les données modifiées ou non dans la plage correspondant au code de l’onglet « PLAGES » et

copier les données dans l’onglet « COMPIL »

Effacer le code et les données dans l’onglet Saisie

Sauvegarder et quitter


D'AVANCE, GRAND MERCI
 

Pièces jointes

Bonjour,

J'ai besoin d'aide pour une association pour la mise en place d'un fichier avec une seule avec une MsgBox pour choisir les options : modifier, enregistrer, quitter. ci joint deux pro

Fichier constitué de 3 feuilles : Un onglet « PLAGES » masqué de 60 plages de 7 lignes, 1 onglet de « SAISIE », 1 onglet pour stocker dans l’onglet « COMPIL » masqué les informations de chaque plage sur une ligne

Fonctionnement souhaité

A partir de la page « Saisie », chaque structure peut taper son code secret puis la procédure VBA :

Copie, dans l’onglet « PLAGES » , la plage correspondant au code entré

La colle dans la plage vierge de l’onglet « SAISIE »

Invite à modifier les données,

Copier les données modifiées ou non dans la plage correspondant au code de l’onglet « PLAGES » et

copier les données dans l’onglet « COMPIL »

Effacer le code et les données dans l’onglet Saisie

Sauvegarder et quitter


D'AVANCE, GRAND MERCI
Pour réaliser cela avec VBA dans Excel, vous devrez créer une macro qui implémente votre logique. Voici un exemple de code VBA pour vous aider à démarrer. Cela inclut une boîte de message (MsgBox) pour choisir l'option, et la logique pour copier/coller les données entre les feuilles.

```vba
Sub GestionSaisie()
Dim codeSecret As String
Dim plageSource As Range
Dim plageDestination As Range
Dim choix As Integer

' Demande le code secret
codeSecret = InputBox("Veuillez entrer votre code secret :")

' Vérifie si le code secret est valide
If codeSecret = "" Then
MsgBox "Code invalide. Opération annulée.", vbExclamation
Exit Sub
End If

' Déblocage de la feuille "PLAGES"
Sheets("PLAGES").Visible = xlSheetVisible

' Sélectionne la plage correspondant au code secret
Set plageSource = Sheets("PLAGES").Range("A1:A7") ' Modifiez la plage selon votre structure réelle
' Définissez la plage de destination dans le feuille "SAISIE"
Set plageDestination = Sheets("SAISIE").Range("A1:A7") ' Modifiez la plage selon votre structure réelle

' Copie la plage du code secret dans la feuille de saisie
plageSource.Copy Destination:=plageDestination

' Cache à nouveau la feuille "PLAGES"
Sheets("PLAGES").Visible = xlSheetHidden

' Boîte de message pour les actions
choix = MsgBox("Choisissez une action : " & vbCrLf & "1. Modifier" & vbCrLf & "2. Enregistrer" & vbCrLf & "3. Quitter", vbQuestion + vbYesNoCancel)

Select Case choix
Case vbYes ' Modifier
MsgBox "Vous pouvez maintenant modifier les données."
Exit Sub

Case vbNo ' Enregistrer
' Copie les données modifiées dans "COMPIL"
plageDestination.Copy
Sheets("COMPIL").Cells(Sheets("COMPIL").Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial xlPasteValues

' Nettoie la feuille de saisie
plageDestination.ClearContents

' Affiche un message de confirmation
MsgBox "Données enregistrées avec succès.", vbInformation

Case vbCancel ' Quitter
MsgBox "Opération annulée. Toutes les données saisies seront perdues.", vbExclamation
Exit Sub
End Select

' Sauvegarde le fichier
ThisWorkbook.Save

' Quitte Excel
Application.Quit

End Sub
```

Voici un résumé de ce que ce code fait :

1. Demande à l'utilisateur d'entrer un code secret.
2. Copie la plage de données correspondant à ce code de l'onglet "PLAGES" à "SAISIE".
3. Propose trois options via une MsgBox : Modifier, Enregistrer, Quitter.
4. Si "Enregistrer" est sélectionné, copie les données modifiées dans "COMPIL" et nettoie la feuille "SAISIE".
5. Sauvegarde le fichier et quitte Excel après l'enregistrement.

Veillez à ajuster les plages (`Range("A1:A7")`) selon vos besoins réels et tests dans un environnement contrôlé avant une utilisation en production.
 
Bonjour,
Merci pour cette procédure. Mais j'ai omis de préciser que le code attribué à chaque association nomme la plage de l'association.
Le code est entré par le gérant de chaque association dans la cellule B2 de l'onglet Saisie
Comment dans la ligne "Set plageSource = Sheets("PLAGES").Range("A1:A7") ' Modifiez la plage selon votre structure réelle"
remplacer "Range("A1:A7") par la valeur entrée dans la cellule B2
Encore merci
 
Bonjour,
Merci pour cette procédure. Mais j'ai omis de préciser que le code attribué à chaque association nomme la plage de l'association.
Le code est entré par le gérant de chaque association dans la cellule B2 de l'onglet Saisie
Comment dans la ligne "Set plageSource = Sheets("PLAGES").Range("A1:A7") ' Modifiez la plage selon votre structure réelle"
remplacer "Range("A1:A7") par la valeur entrée dans la cellule B2
Encore merci
Pour utiliser le code entré par l'utilisateur dans la cellule B2 pour déterminer la plage à copier, vous devez modifier la ligne `Set plageSource` pour utiliser la valeur dans B2 comme nom de la plage. Voici comment vous pouvez le faire :

```vba
Sub GestionSaisie()
Dim codeSecret As String
Dim plageSource As Range
Dim plageDestination As Range
Dim choix As Integer

' Récupère le code secret depuis la cellule B2
codeSecret = Trim(Sheets("SAISIE").Range("B2").Value)

' Vérifie si le code secret est valide
If codeSecret = "" Then
MsgBox "Code invalide. Opération annulée.", vbExclamation
Exit Sub
End If

' Vérifie si la plage nommée existe
On Error Resume Next
Set plageSource = Sheets("PLAGES").Range(codeSecret)
On Error GoTo 0

If plageSource Is Nothing Then
MsgBox "Le code secret ne correspond à aucune plage. Opération annulée.", vbExclamation
Exit Sub
End If

' Définissez la plage de destination dans la feuille "SAISIE"
Set plageDestination = Sheets("SAISIE").Range("A1:A7") ' Modifiez la plage selon votre structure réelle

' Copie la plage du code secret dans la feuille de saisie
plageSource.Copy Destination:=plageDestination

' Boîte de message pour les actions
choix = MsgBox("Choisissez une action : " & vbCrLf & "1. Modifier" & vbCrLf & "2. Enregistrer" & vbCrLf & "3. Quitter", vbQuestion + vbYesNoCancel)

Select Case choix
Case vbYes ' Modifier
MsgBox "Vous pouvez maintenant modifier les données."
Exit Sub

Case vbNo ' Enregistrer
' Copie les données modifiées dans "COMPIL"
plageDestination.Copy
Sheets("COMPIL").Cells(Sheets("COMPIL").Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial xlPasteValues

' Nettoie la feuille de saisie
plageDestination.ClearContents

' Efface le code dans B2
Sheets("SAISIE").Range("B2").ClearContents

' Affiche un message de confirmation
MsgBox "Données enregistrées avec succès.", vbInformation

Case vbCancel ' Quitter
MsgBox "Opération annulée. Toutes les données saisies seront perdues.", vbExclamation
Exit Sub
End Select

' Sauvegarde le fichier
ThisWorkbook.Save

' Quitte Excel
Application.Quit

End Sub
```

### Explications :
1. **Lecture de B2 :** Le code lit la valeur entrée dans la cellule `B2` de l'onglet "SAISIE".
2. **Utilisation comme plage nommée :** Tente d'utiliser cette valeur comme nom de plage dans "PLAGES".
3. **Vérification d'existence :** Vérifie si une plage correspond au nom donné. Si ce n'est pas le cas, la procédure est annulée avec un message d'erreur.
4. **Copie de données et actions de l'utilisateur :** Réalise les actions suivant le choix fait dans la MsgBox, comme précédemment.
 
Bonjour,

Une difficulté persiste :
dans
' Sélectionne la plage correspondant au code secret
Set plageSource = Sheets("PLAGES").Range("RefPlage")


RefPlage n'est pas reconnu

Merci du complément d'information

Sub GestionSaisie()
Dim RefPlage As String
Dim plageSource As Range
Dim plageDestination As Range
Dim choix As Integer

' Demande le code secret
'codeSecret = InputBox("Veuillez entrer votre code secret :")

' Récupère le code secret depuis la cellule B2
RefPlage = Trim(Sheets("SAISIE").Range("B2").Value)

' Vérifie si le code secret est valide
If RefPlage = "" Then
MsgBox "Code invalide. Opération annulée.", vbExclamation
Exit Sub
End If

' Déblocage de la feuille "PLAGES"
Sheets("PLAGES").Visible = xlSheetVisible

' Sélectionne la plage correspondant au code secret
Set plageSource = Sheets("PLAGES").Range("RefPlage")
' Modifiez la plage selon votre structure réelle
 
Bonjour,

Une difficulté persiste :
dans
' Sélectionne la plage correspondant au code secret
Set plageSource = Sheets("PLAGES").Range("RefPlage")


RefPlage n'est pas reconnu

Merci du complément d'information

Sub GestionSaisie()
Dim RefPlage As String
Dim plageSource As Range
Dim plageDestination As Range
Dim choix As Integer

' Demande le code secret
'codeSecret = InputBox("Veuillez entrer votre code secret :")

' Récupère le code secret depuis la cellule B2
RefPlage = Trim(Sheets("SAISIE").Range("B2").Value)

' Vérifie si le code secret est valide
If RefPlage = "" Then
MsgBox "Code invalide. Opération annulée.", vbExclamation
Exit Sub
End If

' Déblocage de la feuille "PLAGES"
Sheets("PLAGES").Visible = xlSheetVisible

' Sélectionne la plage correspondant au code secret
Set plageSource = Sheets("PLAGES").Range("RefPlage")
' Modifiez la plage selon votre structure réelle
Il semble que vous essayez d'utiliser le contenu d'une variable (`RefPlage`) pour sélectionner dynamiquement une plage sur la feuille. Dans le code VBA, vous devez utiliser la variable directement, sans guillemets, pour sélectionner une plage par nom. Voici les ajustements nécessaires dans le code :

Modifiez cette ligne :
```vba
' Sélectionne la plage correspondant au code secret
Set plageSource = Sheets("PLAGES").Range("RefPlage")
```

En :
```vba
' Sélectionne la plage correspondant au code secret
Set plageSource = Sheets("PLAGES").Range(RefPlage)
```

### Explication :
- **Sans guillemets autour de `RefPlage`** : Dans VBA, lorsque vous utilisez le nom d'une variable pour référencer une plage, vous ne devez pas inclure ce nom entre guillemets. Les guillemets autour de "RefPlage" traitent cette partie comme du texte littéral, ce qui n'est pas ce que vous voulez. Vous devez plutôt passer la variable elle-même, qui détient le nom de la plage.

Assurez-vous également que :
- La feuille "PLAGES" contient bien des plages nommées correspondant aux codes secrets que vous prévoyez d’utiliser.
- Si un code secret ne correspond pas à une plage nommée valide, la méthode `Set plageSource` échouera à nouveau. Si nécessaire, gérez l'erreur avec un `On Error Resume Next` / `On Error GoTo 0` pour vérifier et alerter si la plage est manquante.
 
- 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

Retour