Microsoft 365 VBA - Dupliquer une plage de données selon une valeur

MarinaF

XLDnaute Nouveau
Bonjour,

J'ai déjà trouvé des sujets sur le forum mais j'arrive pas à trouver le code exact pour ce que je souhaite :(

En gros, je souhaiterai que lorsque que j'insère le chiffre 24 dans une certaine cellule, une plage de donnée soit recopiée 2 fois sur les lignes en dessous.
Je pensais utiliser une Do While, mais je débute vraiment dans les VBA et je m'en sors pas... Pourriez vous m'aider ?

Je ne peux pas partager mon fichier mais je vous ai fait un screenshot de la partie concernée.

Je souhaiterais que si dans ma cellule B4, il y a le chiffre 24, cela duplique la plage de donnée C4:AX4 dans la plage C5:AX5 et C6:AX6.
Si jamais (je sais pas si ça change qqch) dans les colonnes "Tps module", il y a une formule. Sinon le reste des données sont entrées manuellement.

Un grand merci d'avance pour votre aide ! :)
 

Pièces jointes

  • ex vba.PNG
    ex vba.PNG
    19.1 KB · Affichages: 19
C

Compte Supprimé 979

Guest
Bonjour MarinaF

Voici un exemple de ce qu'on peut faire ;)
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  ' Si saisie dans la cellule
  If Target.Address = "$B$4" Then
    ' Si saisie du nombre indiqué
    If Target.Value = 24 Then
      [C4:AX4].Copy
      ' Désactiver les évènements lors du changement
      Application.EnableEvents = False
      [C5:C6].Insert
      Application.EnableEvents = True
    End If
  End If
End Sub

Code à mettre dans "Feuil1", pour y accéder ALT+F11 et double clique sur le nom

@+
 

Pièces jointes

  • MarinaF_Exemple.xlsm
    15.5 KB · Affichages: 3
Dernière modification par un modérateur:

MarinaF

XLDnaute Nouveau
Merci BrunoM45 !
C'est quasi ce que je cherchais. Le problème que j'ai, c'est la fonction Insert. Elle décale toutes les lignes et me change le format de mes celleules. Et vu que mon fichier va être protéger pour les autres utilisateurs, cela ne fonctionne plus...
Par quoi puis-je remplacer Insert ? pour que cela me copie que le contenu des cellules sans la mise en forme et si je fichier est protégé ?
 

MarinaF

XLDnaute Nouveau
Je vais vous expliquer un peu plus en détail comment mon tableau fonctionne peut-être.

En fait, le chiffre 24 correspond à la période de mardi à jeudi. (11 = lundi, 22 = mardi 33= mercredi et etc).

Dans mon tableau, je rentre différentes prestations par jour.
La colonne "Module" est le type de prestation, "Tps module" est le temps qui est nécessaire pour cette prestation (il y a une formule qui reprend automatiquement le temps selon le type de prestation), "heure" est l'heure à laquelle la prestation est effectué et "corr." est un taux de correction. Il peut y avoir jusqu'à 12 prestations par jour et par ligne donc.

Parfois, les prestations sont les même du mardi au jeudi par exemple, et il faut recopier toutes les données de "Module", "heure" et "Corr." à la main. (Ces données sont dans un programme externe que je ne peux pas avoir directement dans Excel). Il n'est pas possible de faire un copier/coller de la ligne à cause de mes colonnes "Tps module" qui contient une formule qui est protégée.

Je voulais donc une méthode pour dupliquer les données quand elles sont les même sur plusieurs jours consécutifs. Etant donné que les cellules sont à remplir, je ne pense pas qu'il y a de risque d'écraser des données. (Je peux me tromper mais je ne pense pas)
 

MarinaF

XLDnaute Nouveau
Rebonjour à tous !

Au final, j'ai procédé de la manière suivante :

Sub VP()

If Range("b4") = 24 Then
Range("c4:ax4").Select
Selection.Copy
Range("c5:ax6").Select
Selection.PasteSpecial xlPasteFormulasAndNumberFormats

End If
End Sub

Le problème que je rencontre maintenant, c'est une colonne sur 3 (la colonne D qui correspond à "Tps module" contient une formule. Selon la valeur de la colonne précédente, elle va afficher un temps.
J'ai absolument besoin que personne ne touche à cette formule, et j'ai donc protégé ma feuille.
Le problème, c'est que à cause de sa ma macro ne fonctionne plus...
Du coup, je pensais sélectionner uniquement les cellules à modifier de cette manière :

Sub VP()

If Range("b4") = 24 Then
Range("c4", "e4:g4").Select
Selection.Copy
Range("c5", "e5:g5").Select
Selection.PasteSpecial xlPasteFormulasAndNumberFormats

End If
End Sub

Mais, ça ne fonctionne toujours pas, j'ai toujours la fenêtre pop-up qui s'ouvre pour m'indiquer que des cellules sont protégées et qu'il me faut un mot de passe.

Avez-vous une solution à me proposer ?

Merciiiii :)
 

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 098
Membres
112 661
dernier inscrit
ceucri