Excel - VBA - Un PasteSpecial/Clear qui ne fonctionne pas
Résolu/Fermé
HugoHerbomez
Messages postés
57
Date d'inscription
dimanche 15 juillet 2012
Statut
Membre
Dernière intervention
2 mars 2017
-
Modifié par HugoHerbomez le 24/01/2017 à 10:57
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 - 25 janv. 2017 à 12:02
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 - 25 janv. 2017 à 12:02
A voir également:
- Excel - VBA - Un PasteSpecial/Clear qui ne fonctionne pas
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Clear dns cache - Guide
- Aller à la ligne excel - Guide
5 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
Modifié par Patrice33740 le 24/01/2017 à 11:32
Modifié par Patrice33740 le 24/01/2017 à 11:32
Bonjour,
Essaies :
Cordialement
Patrice
Essaies :
Option Explicit Sub Test() Dim rng As Range With ActiveSheet Select Case .Name Case "Traitement Biocide" Set rng = .Range("B2:L2", "B2:B11") Case "Changement de filtre" Set rng = .Range("B2:K2", "B2:B11") Case "Opérations Hebdomadaire" Set rng = .Range("B2:M2", "B2:B11") End Select End With With Worksheets("Impression Temporaire") .Range("B2:M2", "B2:B11").Clear rng.Copy Destination:=.Range("B2") .Range("B2").Resize(1, rng.Columns.Count).ColumnWidth = _ rng.ColumnWidth End With End Sub
Cordialement
Patrice
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
25 janv. 2017 à 11:30
25 janv. 2017 à 11:30
Bonjour,
Essaies de remplacer :
Essaies de remplacer :
.Range("B2").Resize(1, rng.Columns.Count).ColumnWidth = rng.ColumnWidthPar
.Columns.AutoFit
HugoHerbomez
Messages postés
57
Date d'inscription
dimanche 15 juillet 2012
Statut
Membre
Dernière intervention
2 mars 2017
2
25 janv. 2017 à 11:35
25 janv. 2017 à 11:35
Merci Patrice,
Le problème est à moitié réglé du coup, mais au moins mon texte dans les cellules est visible dorénavant. J'essaierai de trouver le vrai problème et je le posterai sur la discussion.
Sujet Résolu :)
Le problème est à moitié réglé du coup, mais au moins mon texte dans les cellules est visible dorénavant. J'essaierai de trouver le vrai problème et je le posterai sur la discussion.
Sujet Résolu :)
Bonjour
voir surtout la syntaxe des ranges
voir la macro
A+
Maurice
voir surtout la syntaxe des ranges
voir la macro
Private Sub CommandButton1_Click() Pas = False With Worksheets("Impression Temporaire") .Range("B2:M11").Clear If StrComp(ActiveSheet.Name, "Traitement Biocide") = 0 Then Range("B2:L11").Copy Pas = True ElseIf StrComp(ActiveSheet.Name, "Changement de filtre") = 0 Then Range("B2:K11").Copy Pas = True ElseIf StrComp(ActiveSheet.Name, "Opérations Hebdomadaire") = 0 Then Range("B2:M11").Copy Pas = True End If If Pas = True Then .Range("B2").PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False End If End With Application.CutCopyMode = False End Sub
A+
Maurice
Bonjour
Pour avoir la largeur colonne
A+
Maurice
Pour avoir la largeur colonne
If Pas = True Then ' Copy valeur .Range("B2").PasteSpecial xlPasteValues ' Copy largeur Colonne .Range("B2").PasteSpecial xlPasteColumnWidths End If
A+
Maurice
HugoHerbomez
Messages postés
57
Date d'inscription
dimanche 15 juillet 2012
Statut
Membre
Dernière intervention
2 mars 2017
2
24 janv. 2017 à 14:10
24 janv. 2017 à 14:10
Merci momo pour tes réponses mais j'ai déjà presque réussi à résoudre mon problème grâce à Patrice, le problème est, si je peux te demander de regarder dans notre conversation à Pascal et moi, que je n'arrive pas récupérer la largeur de mes colonnes. Le code devrait fonctionner mais non, j'espère ne pas avoir oublié de transmettre une information, ce qui a l'air d'être le cas!
Si tu peux y jeter un coup d'oeil et voir si tu ne peux pas ajouter un élément à son code ce serait très gentil
Cordialement,
Hugo
Si tu peux y jeter un coup d'oeil et voir si tu ne peux pas ajouter un élément à son code ce serait très gentil
Cordialement,
Hugo
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
Modifié par eriiic le 25/01/2017 à 10:41
Modifié par eriiic le 25/01/2017 à 10:41
Bonjour,
S'il faut jeter un oeil c'est à toi de le faire sur la réponse de momo.
Pour les largeurs de colonnes c'est bien :
eric
S'il faut jeter un oeil c'est à toi de le faire sur la réponse de momo.
Pour les largeurs de colonnes c'est bien :
.Range("B2").PasteSpecial xlPasteColumnWidths
eric
HugoHerbomez
Messages postés
57
Date d'inscription
dimanche 15 juillet 2012
Statut
Membre
Dernière intervention
2 mars 2017
2
>
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
Modifié par HugoHerbomez le 25/01/2017 à 10:56
Modifié par HugoHerbomez le 25/01/2017 à 10:56
Bonjour Eric,
S'il faut jeter un oeil c'est à toi de le faire sur la réponse de momo.
Pour les largeurs de colonnes c'est bien :
Je le sais bien que c'est la bonne commande, mais pascal m'a donné un bout de code et je ne sais pas adapté cela au sien, c'est pour cela que je demande qu'il aille regarder afin de me dire comment procédé ! Tout était expliqué dans mon message eric.
Si tu peux je voudrais bien que tu regardes toi aussi, voici le code qui était dans les commentaires de moi et Pascal :
Le problème étant qu'avec ce code je devrais avoir les bonnes largeurs de colonne mais que ce n'est pas le cas. Avec Pascal ce code fonctionne mais pas avec moi. Et je n'ai pas réussi à trouver un bon résultat moi même avec .Range("B2").PasteSpecial xlPasteColumnWidths en trifouillant le code ci dessous
Bien cordialement,
Hugo
S'il faut jeter un oeil c'est à toi de le faire sur la réponse de momo.
Pour les largeurs de colonnes c'est bien :
Je le sais bien que c'est la bonne commande, mais pascal m'a donné un bout de code et je ne sais pas adapté cela au sien, c'est pour cela que je demande qu'il aille regarder afin de me dire comment procédé ! Tout était expliqué dans mon message eric.
Si tu peux je voudrais bien que tu regardes toi aussi, voici le code qui était dans les commentaires de moi et Pascal :
Le problème étant qu'avec ce code je devrais avoir les bonnes largeurs de colonne mais que ce n'est pas le cas. Avec Pascal ce code fonctionne mais pas avec moi. Et je n'ai pas réussi à trouver un bon résultat moi même avec .Range("B2").PasteSpecial xlPasteColumnWidths en trifouillant le code ci dessous
Option Explicit Sub Test() Dim rng As Range With ActiveSheet Select Case .Name Case "Traitement Biocide" Set rng = .Range("B2:L2", "B2:B11") Case "Changement de filtre" Set rng = .Range("B2:K2", "B2:B11") Case "Opérations Hebdomadaire" Set rng = .Range("B2:M2", "B2:B11") End Select End With With Worksheets("Impression Temporaire") .Range("B2:M2", "B2:B11").Clear rng.Copy Destination:=.Range("B2") .Range("B2").Resize(1, rng.Columns.Count).ColumnWidth = _ rng.ColumnWidth End With End Sub
Bien cordialement,
Hugo
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
Modifié par eriiic le 25/01/2017 à 11:36
Modifié par eriiic le 25/01/2017 à 11:36
J'aurais préféré voir ton essai plutôt que la version qui ne fonctionne pas.
te met toutes tes colonnes à la largeur de la 1ère colonne du range copié
Refait ton .copy avant :
Et comme dit momo également :
pourquoi Set rng = .Range("B2:L2", "B2:B11")
alors que c'est équivalent à :
Tu n'as pas l'air de savoir très bien ce que tu fais.
C'est normal au début mais dans ce cas on se sert de la fenêtre Espion pour contrôler si une expression correspond à ce qu'on veut.
Fait glisser rng dans la fenêtre espion et ajoute lui .Address pour lire sa valeur.
eric
.Range("B2").Resize(1, rng.Columns.Count).ColumnWidth = rng.ColumnWidth
te met toutes tes colonnes à la largeur de la 1ère colonne du range copié
Refait ton .copy avant :
rng.Copy .Range("B2").PasteSpecial xlPasteColumnWidths
Et comme dit momo également :
pourquoi Set rng = .Range("B2:L2", "B2:B11")
alors que c'est équivalent à :
Set rng = .Range("B2:L11")
Tu n'as pas l'air de savoir très bien ce que tu fais.
C'est normal au début mais dans ce cas on se sert de la fenêtre Espion pour contrôler si une expression correspond à ce qu'on veut.
Fait glisser rng dans la fenêtre espion et ajoute lui .Address pour lire sa valeur.
eric
HugoHerbomez
Messages postés
57
Date d'inscription
dimanche 15 juillet 2012
Statut
Membre
Dernière intervention
2 mars 2017
2
Modifié par HugoHerbomez le 25/01/2017 à 12:17
Modifié par HugoHerbomez le 25/01/2017 à 12:17
Mon essai et cette version sont les même donc je ne vois pas ce que je peux te monter d'autre. il n'y a que cette partie de code qui impact sur mon copier coller.
te met toutes tes colonnes à la largeur de la 1ère colonne du range copié
Du coup je comprend enfin pourquoi je n'arrive pas à obtenir des largeur différente, merci.
Refait ton .copy avant :
rng.Copy
.Range("B2").PasteSpecial xlPasteColumnWidths
Les largeurs des colonnes se mettent comme il faut mais les données et la mise en forme ne sont pas présente, comment y ajouter les données ET la mise en forme? (couleur de fond de la cellule, et bordures)
Ensuite non je ne sais pas trop ce que je fais car je n'arrive pas à obtenir ce que je veux. (c'est pour cela que je suis ici, et j'ai bien écrit dans mon premier message que je débute dans VBA) Ce que a dit momo est équivalent en effet mais que je le mette ou pas cela ne changera rien à mon problème. Je le modifierai plus tard quand j'aurai enfin résolu le gros du problème.
Edit :
C'est bon j'ai réussi, en faite la version de Momo il manquait encore la mise en forme, mais comme je suis débutant je n'arrivais juste pas à associer les deux codes.
Au final J'ai ça et ça fonctionne
Merci à tous,
Hugo !
te met toutes tes colonnes à la largeur de la 1ère colonne du range copié
Du coup je comprend enfin pourquoi je n'arrive pas à obtenir des largeur différente, merci.
Refait ton .copy avant :
rng.Copy
.Range("B2").PasteSpecial xlPasteColumnWidths
Les largeurs des colonnes se mettent comme il faut mais les données et la mise en forme ne sont pas présente, comment y ajouter les données ET la mise en forme? (couleur de fond de la cellule, et bordures)
Ensuite non je ne sais pas trop ce que je fais car je n'arrive pas à obtenir ce que je veux. (c'est pour cela que je suis ici, et j'ai bien écrit dans mon premier message que je débute dans VBA) Ce que a dit momo est équivalent en effet mais que je le mette ou pas cela ne changera rien à mon problème. Je le modifierai plus tard quand j'aurai enfin résolu le gros du problème.
Edit :
C'est bon j'ai réussi, en faite la version de Momo il manquait encore la mise en forme, mais comme je suis débutant je n'arrivais juste pas à associer les deux codes.
Au final J'ai ça et ça fonctionne
With ActiveSheet Select Case .Name Case "Traitement Biocide" Set rng = .Range("B2:L11") Case "Changement de filtre" Set rng = .Range("B2:K20") Case "Opérations Hebdomadaire" Set rng = .Range("B2:M20") End Select End With With Worksheets("Impression Temporaire") .Range("B2:M20").Clear rng.Copy .Range("B2").PasteSpecial xlPasteColumnWidths .Range("B2").PasteSpecial xlPasteAll End With
Merci à tous,
Hugo !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
Modification de la macro de Patrice
A toi de voir pour moi ses fini
A+
Maurice
Modification de la macro de Patrice
A toi de voir pour moi ses fini
Sub TestColonne() With Worksheets("Impression Temporaire") 'Range("B2:M2", "B2:B11").Clear .Range("B2:M11").Clear Select Case ActiveSheet.Name Case "Traitement Biocide" 'Range("B2:L2", "B2:B11").Copy Range("B2:L11").Copy Case "Changement de filtre" 'Range("B2:K2", "B2:B11").Copy Range("B2:K11").Copy Case "Opérations Hebdomadaire" 'Range("B2:M2", "B2:B11").Copy Range("B2:M11").Copy Case Else ' Mettre un messge box Exit Sub End Select .Select ' Copy valeur Range("B2").PasteSpecial xlPasteValues ' Copy largeur Colonne Range("B2").PasteSpecial xlPasteColumnWidths Application.CutCopyMode = False End With End Sub
A+
Maurice
Modifié par HugoHerbomez le 24/01/2017 à 11:46
J'ai essayé ton code beaucoup plus propre, j'arrive enfin à coller mes données ainsi que la mise en forme. Un seul problème persiste, il ne garde pas la largeur de mes colonnes, et je ne peux pas le faire autrement, c'est indispensable pour l'une de mes feuilles.
je comprend ton code mais pas cette partie :
Mon dernier problème doit donc être là dedans, pourrais tu y ajouter quelques modifications afin que je garde la largeur de chacune de mes colonnes?
Par la suite je veux bien que tu m'expliques l'origine de mon problème, j'aimerai bien comprendre !
Bien cordialement,
Hugo
24 janv. 2017 à 12:13
« il ne garde pas la largeur de mes colonnes » : Ça devrait !!!
Explication :
copie la plage rng vers B2 de la feuille Impession Temporaire (comme un copier/coller manuel)
Redimensionne B2 pour avoir autant de colonnes que rng avec et y affecte les mêmes largeurs de colonne que rng
24 janv. 2017 à 13:13
J'ai mis la dernière ligne de code en commentaire et j'ai réessayé une seconde fois je ne vois aucuns changements, pourtant il n'y a aucuns éléments extérieurs qui viennent perturber cette partie de code, donc je ne comprend pas...
Pour plus de précision mes colonnes ont été agrandi manuellement et non par fusion de colonne.
Si vous avez une alternative je suis preneur ?
Merci beaucoup
Modifié par Patrice33740 le 24/01/2017 à 13:23
N'y aurait-t-il pas une autre macro qui perturbe celle-la
24 janv. 2017 à 13:26