Erreur d'éxécution '1004 : Méthode Select de la classe Range a échoué
Bonjour à tous,
Je viens vers vous car depuis 2 jours je galère avec mon code.
Je cherche à remplir une feuille suivant une autre feuille avec quelques mise en page et quelques formules.
J'ai déclaré des variables correspondants à certaines zone de chaque feuille et en exécutant il me met une erreur 1004 !!!
Mais je ne vois pas d'où cela vient, j'ai changé la variable par une sélection directe des cellules mais idem
Si quelqu'un pouvait m'aider....je lui en serait reconnaissant.
Sub MISE_EN_PAGE_FEUIL_DEPART()
Dim PlageD As Range 'déclare la variable PlageD (Plage A4:N44 de l'onglet PRIX DEPART)
Dim PAPASource As Range 'déclare la variable PAPASource (Plage correspondant aux PAPA dans l'onglet calcul)
Dim PAPADest As Range 'déclare la variable PAPADest (Plage correspondant aux PAPA dans l'onglet PRIX DEPART)
'Définition de PlageD correspondant à A4:N44 de l'onglet PRIX DEPART
Set PlageD = Sheets("PRIX DEPART").Range("A4:N44")
'Efface Plage de l'onglet PRIX DEPART
PlageD.Clear
'Copie des cellules A4 à N44 dans l'onglet calcul
Sheets("calcul").Range("A4:N44").Copy
'Sélection de la PlageD A4:N44 dans l'onglet PRIX DEPART <-----C'EST ICI QU'IL Y A ERREUR
PlageD.Select
'Collage spécial format de cellule
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'Copie des cellules A4 à N44 dans l'onglet calcul
Sheets("calcul").Range("A4:N44").Copy
'Sélection de la PlageD A4:N44 dans l'onglet PRIX DEPART
PlageD.Select
'Collage spécial valeur
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
'Variable h pour connaître l'adresse de la cellule contenant "PAPA"
h = Sheets("PRIX DEPART").Range("A4:A44").Find("PAPA").Address
'Variable t pour connaître l'adresse de la cellule contenant "MAMAN" et délimiter les "PAPA"
t = Sheets("PRIX DEPART").Range("A4:A44").Find("MAMAN").Offset(-1, 0).Address
'Variable n pour connaître le numéro de la dernière ligne des PAPA
n = Sheets("PRIX DEPART").Range(t).Row
'Définition de PAPASource correspondant à la plage PAPA dans l'onglet calcul
Set PAPASource = Sheets("calcul").Range(h & ":D" & n)
'Définition de PAPADest correspondant à la plage PAPA dans l'onglet PRIX DEPART
Set PAPADest = Sheets("PRIX DEPART").Range(h & ":D" & n)
'Efface le contenu de la plage HOMARDS
PAPADest.Clear
'Pour toutes les cellules de la PlageD
For Each i In PlageD
If i.Value = "" Then 'Si la cellule est vide
i.NumberFormat = "@" 'on attribue le format texte
End If
If i.Value = 0 Then 'Si la cellule = 0
i.Value = "" 'cellule = vide
End If
Next
'Pour toutes les cellules de la PlageD
For Each cellule In PlageD
If IsNumeric(cellule) And cellule > 0 Then 'Si la cellule est un nombre
cellule.Value = Application.WorksheetFunction.MRound((cellule + 0.15) / 0.9, 0.05) 'on calcul le prix de vente mini arrondi à 0.05
End If
Next
'Copie de la plage PAPASource dans l'onglet "calcul"
PAPASource.Copy
'Sélection de la plage PAPADest
PAPADest.Select
'Collage spécial format de cellule
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'Copie de la plage PAPASource
PAPASource.Copy
'Sélection de la plage PAPADest
PAPADest.Select
'Collage spécial valeur
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
'Pour toutes les cellules de PAPADest
For Each i In PAPADest
If i.Value = "" Then 'Si la cellule est vide
i.NumberFormat = "@" 'on attribue le format texte
End If
If i.Value = 0 Then 'Si la cellule = 0
i.Value = "" 'cellule = vide
End If
Next
'Pour toutes les cellules de PAPADest
For Each cellule In PAPADest
If IsNumeric(cellule) And cellule > 0 Then 'Si la cellule est un nombre
cellule.Value = cellule + 5.5 'on calcul le prix de vente PA+5,5€
End If
Next
'Inscription "*" dans la cellule A6
Range("A6").FormulaR1C1 = "PPPPPP *"
'Mettre en rouge "*"
With ActiveCell.Characters(Start:=1, Length:=8).Font
.Name = "Sitka Banner Semibold"
.FontStyle = "Normal"
.Size = 10
.Color = -65536
End With
With ActiveCell.Characters(Start:=8, Length:=1).Font
.Color = -16776961
End With
'Inscription "* LIVRAISON LE JEUDI ET VENDREDI" dans les cellules E6 à E9
Range("E6").FormulaR1C1 = "*LIVRAISON"
Range("E7").FormulaR1C1 = "LE"
Range("E8").FormulaR1C1 = "JEUDI ET"
Range("E9").FormulaR1C1 = "VENDREDI"
'Mettre en rouge les caractères
Range("E6:E9").Font.Color = -16776961
'Libérer de la mémoire
Set PlageD = Nothing
Set HOMARDSource = Nothing
Set HOMARDDest = Nothing
End Sub- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
Pour pouvoir sélectionner votre PlageD, il faut que la feuille (= "PRIX DEPART") où elle se situe, soit active.
Bonsoir,
En plus du code, il serait bien de nous indiquer avec une capture d'écran qu'elle ligne est surlignée lors du débogage
A+
Bonsoir Thev et BrunoM45,
Déjà merci de s'intéresser à mon problème.
Thev, la feuille calcul est dans le même classeur et est active, en amont de ce "bout" de code, on travaille dessus.
BrunoM45, la ligne surlignée est la ligne 4 (tu verras (je me permets le tutoiement
J'ai résolu mon problème
La remarque de Thev m'a fait réfléchir.... MERCI Thev
Pour pouvoir sélectionner votre PlageD, il faut que la feuille (= "PRIX DEPART") où elle se situe, soit active.
Pour moi feuille active signifie : feuille sur laquelle on travail
Or mon code s'applique à une autre feuille ( "PRIX DEPART") du même classeur sur laquelle je suis donc :
1 - j'ai ajouté des ".Activate sur les lignes qui posaient problème situées juste avant le collage spécial afin de me trouver systématiquement sur la FEUILLE ACTIVE. Ceci à 2 endroits du code et.... CA FONCTIONNE !!!
'Copie des cellules A4 à N44 dans l'onglet calcul
Sheets("calcul").Activate
Range("A4:N44").Copy
'Sélection de la PlageD A4:N44 dans l'onglet PRIX DEPART
Sheets("PRIX DEPART").Activate
PlageD.Select
Bonjour Bioteau
@Thev que je salue, pourrais te dire aussi ...
Il faut savoir faire de la programmation objets (VBA) et utiliser correctement les instructions
Il est inutile de faire des "Select" ou "Activate"
On peut remplacer
'Copie des cellules A4 à N44 dans l'onglet calcul
Sheets("calcul").Range("A4:N44").Copy
'Sélection de la PlageD A4:N44 dans l'onglet PRIX DEPART <-----C'EST ICI QU'IL Y A ERREUR
PlageD.Select
'Collage spécial format de cellule
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'Copie des cellules A4 à N44 dans l'onglet calcul
Sheets("calcul").Range("A4:N44").Copy
'Sélection de la PlageD A4:N44 dans l'onglet PRIX DEPART
PlageD.Select
'Collage spécial valeur
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=FalsePar tout simplement
'Copie des cellules A4 à N44 dans l'onglet calcul
Sheets("calcul").Range("A4:N44").Copy Destination:= Sheets("PRIX DEPART").PlageD
' Si il y a des formules à supprimer
Sheets("PRIX DEPART").PlageD.Value = Sheets("PRIX DEPART").PlageD.ValueA+
Merci BrunoM45 pour tes commentaires avisés.
En fait, dans les différentes étapes que j'ai menée pour essayer de résoudre le problème d'éxécution '1004, j'ai voulu dissocier un maximum les lignes pour trouver d'où venait le problème. Le problème résolu, après plus de 2 jours de galère (je ne suis qu'un débutant), je n'ai pas chercher à récrire les lignes de code .... j'étais tellement content .
Mais tu as raison, les select et paste prennent de la mémoire et sont inutiles. Je vais donc rectifier mon code.
Et cela peut servir à d'autres.
A bientôt, certainement, sur EXCEL-PRATIQUE et merci à tous.