Erreur '1004' : Cette sélection n'est pas valide
Bonjour,
J'ai un petit problème sur mon code : Je veux pouvoir redimensionner mes plages de données à chaque fois qu'est enregistré une nouvelle donnée.
Ici l'avant dernière ligne de mon code (Plage.SpecialCells...) ne fonctionne pas et j'ai le message d'erreur "Cette sélection n'est pas valide. vérifiez que les zones de copie et de collage ne se chevauchent pas, sauf si elles ont la même taille et la même forme".
Dim Plage As Range, LastCol2 As Integer
With Sheets("Données N°Marché")
' Enregistrement du N°Marché dans la base de données : Fonctionne parfaitement
Set CelluleRecherche = .Range("ListeRéférents2").Find(ValeurRechercheReferent, LookIn:=xlValues, LookAt:=xlWhole)
Ligne_insertion_marché = .Cells(Rows.Count, CelluleRecherche.Column).End(xlUp).Row + 1
.Cells(Ligne_insertion_marché, CelluleRecherche.Column) = Sheets("Enregistrer un marché").Range("N°MarchéFormulaire")
'Redimensionnement des plages de données nommée /!\ C'est là que ça coince !
LastCol2 = .Cells(1, Columns.Count).End(xlToLeft).Column
Set Plage = Columns(1).Resize(, LastCol2).EntireColumn
Plage.SpecialCells(xlCellTypeConstants, 23).CreateNames Top:=True, Left:=False, Bottom:=False, Right:=False
End WithJe me demande si cela ne vient pas de ma variable Plage car j'ai un doute sur la validité de sa déclaration, mais là je coince...
En vous remerciant par avance !
Bonjour,
Plusieurs remarques :
Tout d'abord impossible pour moi de tester sans fichier joint, donc je vous donnerai seulement des conseils.
Conseil 1 : exécutez en pas a pas et après l'affectation de Plage, regardez sa valeur, par exemple en tapant dans la fenetre immediate :
? Plage.AddressEnsuite,
Attention, vous utilisez un integer (lastCol2) pour aller chercher une valeur qui peut exéder la valeur maximal d'un integer ! Préférez le type Long
LasCol2 As LongEnsuite, pas besoin de .EntireColumn puisque vous partez de Column(1) qui est… déjà une colonne.
Et enfin, vérifiez que les noms n'existent pas déjà car autrement cela aussi peut créer des erreurs.
EDIT : excusez moi je viens de (certainement) voir l'erreur :
Vous écrivez
Set Plage = Columns(1).Resize(, LastCol2).EntireColumnqui veut dire
Set Plage = ActiveSheet.Columns(1).Resize(, LastCol2).EntireColumnil manque le point...
remplacez par et réessayez
Set Plage = .Columns(1).Resize(, LastCol2) ' sans .EntireColumn redondantBonjour,
Ce serait bien quand même que tu te mettes à joindre le classeur qui va bien avec...
A+
J'ai effectué les changements, et effectivement ça fonctionne !
Néanmoins, j'ai essayé de trouver d'où venait l'erreur en rajoutant mon code initial, et maintenant même dans son état initial le code fonctionne...
Je vous transfert le fichier "anonymisé" si ça peut vous être utile
En tous pour moi ça fonctionne, alors merci et bonne journée !