VB définir un range

Résolu/Fermé
margir4233 Messages postés 67 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 22 février 2023 - 17 juin 2016 à 15:45
margir4233 Messages postés 67 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 22 février 2023 - 18 juin 2016 à 14:55
Bonjour,

Je suis vraiment débutante en VB et je fais beaucoup de récupération de code pour apprendre... votre aide serait appréciée.

J'ai une macro pour effacer mes données
Call ClearContent("CommandeJour", True, "A7:j2000")

Le problème c'est que je voudrais nommer un range pour A7:J2000, qui va varier en fonction du nombre de ligne dans mon onglet CommandeJour. Donc le range va toujours commencer à A7, mais va finir à JX ou X varie en fonction d'un nombre de ligne qui, je pense, peut être trouvé de la façon suivante (bout de code d'une autre macro qui fonctionne)


Dim NoLigne As Integer
NoLigne = 0
For Each Qte In Range("CommandeJour[Quantité]")
If Qte <> "" And Qte <> "0" Then
NoLigne = NoLigne + 1

C'est compréhensible?

7 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
17 juin 2016 à 15:51
Bonjour

Pour récupérer la dernière ligne non vide de ton onglet
DerLig = Cells.Find("*", , , , xlByRows, xlPrevious).Row

Puis
plage = "A7:J" & DerLig

Et l'appel à ta procédure
Call ClearContent("CommandeJour", True, plage)

Cdlmnt
0
margir4233 Messages postés 67 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 22 février 2023
17 juin 2016 à 16:15
J'essai ça à l'instant, merci beaucoup!
0
margir4233 Messages postés 67 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 22 février 2023
17 juin 2016 à 16:39
Est-ce qu'il faut que je définisse Plage
Ca me marque l'erreur suivante

Erreur de compilation: Type d'argument ByRef incompatible
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
17 juin 2016 à 16:43
Peux tu envoyer le code de
1. La procédure ClearContent
2. La procédure qui contient l'appel à ClearContent

Ou mieux
Peux tu envoyer la partie concernée de ton fichier, sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu

1) Tu vas dans https://www.cjoint.com/
2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
en bleu souligné ; tu le sélectionnes et tu fais "Copier"
5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse
tu fais "Coller".

Cdlmnt
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
17 juin 2016 à 16:58
Je t'ai fait un petit exemple
http://www.cjoint.com/c/FFro5NyM27e

Cdlmnt
0
margir4233 Messages postés 67 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 22 février 2023
17 juin 2016 à 17:14
Merci ccm81
Je pense que c'est effectivement le code de ClearContent qui doit bloquer le tout.
Voici le code, donc faudrait que je remplace ce qui concerne le range ci-dessous par P ou Plage que j'ai défini comme tu m'as montré?

Sub ClearContent(SheetSource As String, WithRange As Boolean, Optional Range As String)
UnProtectSheet ("CommandeJour")
Worksheets(SheetSource).Range(Range).ClearContents

ProtectSheet ("CommandeJour")
End Sub
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
17 juin 2016 à 17:18
As tu jeté un œil sur l'exemple que je t'ai proposé ?
0
margir4233 Messages postés 67 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 22 février 2023
17 juin 2016 à 17:32
Un gros merci pour ta patience, je crois plus ça va plus je m'enfonce...
Voici le fichier, c'est dans l'onglet CommandeJour
C'est le bouton Finaliser la commande du jour

Le but c'est de sélectionner la plage de lignes non vide dans CommandeJour et d'aller copier à la suite dans CommandeFacturation

http://www.cjoint.com/c/FFrpCJ1PtKa
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 17/06/2016 à 18:05
Le code est dans Module 1 (j'ai fait simple)
J'ai affecté la macro Transfert_CJ_CF au bouton "Sauvegarder la commande"
J'ai supposé qu'après le transfert, les données sont effacées dans la feuille "CommandeJour"
http://www.cjoint.com/c/FFrp6zwmV2e

Cdlmnt
0
margir4233 Messages postés 67 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 22 février 2023
17 juin 2016 à 18:15
Un grand merci ccm81
J'apprend par moi même, c'est pas évident, une chance qu'il y a des gens généreux comme ceux qui partage sur ce forum.
J'essaie de contribuer mais en VB je ne suis pas de calibre (encore...)
C'est très apprécié!
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
17 juin 2016 à 18:19
De rien

Si c'est fini, du moins pour aujourd'hui ;-) peux tu mettre le sujet à résolu (en dessous du titre de ton premier message)

Bonne fin de journée
0
margir4233 Messages postés 67 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 22 février 2023
17 juin 2016 à 19:35
Allo
On y presque, il n'y a que le bout de la macro qui va copier dans CommandeFacturation

plage.Copy Sheets(CFact).Cells(lifinCF + 1, 1)

ça ne fait rien dans mon fichier (j'ai dû reprendre mon fichier avant de te l'envoyer car j'ai la dernière version d'excel et j'avais des messages d'erreur de version)

Pourtant en pas à pas, ça fonctionne très bien dans le fichier que tu m'as envoyé.

Est-ce que ça peut être parce que j'ai Excel 2016?
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
18 juin 2016 à 11:11
1. Est-ce que ça peut être parce que j'ai Excel 2016
je ne pense pas mais avec mon vieil excel 2003 ....

Quelques idées
1. ça ne fait rien dans mon fichier
1.1. as tu un message d'erreur ?
1.2. as tu affecté la macro au bouton ?
1.3. dans le fichier que tu m'avais envoyé et dans la feuille Commandefacturation il y avait des lignes après les premières lignes vides (vers les n° 200), que j'ai supprimées, vérifies ce qu'il y a au fond de cette feuille
2. les noms des feuilles concernées sont ils corrects (dans la macro) ?
3. exécutes là en pas à pas et passes sur les variables pour contrôler leur valeur
4. insères la ligne soulignée pour voir (et contrôler) l'adresse de la plage à copier
Set plage = .Range(.Cells(lidebCJ, 1), .Cells(lifinCJ, cofinCJ))
MsgBox plage.Address
0
margir4233 Messages postés 67 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 22 février 2023
18 juin 2016 à 14:55
ccm81, tu est génial ou géniale!!!
Effectivement, il y avait des lignes copiées vers les 200 et ça copiait très bien mais à la suite!
Oh que ça fait ma journée ça, un immmmmmense merci, t'a pas idée.

Et je retiens aussi les trucs en point 3 et 4

Génial!
Bonne journée :) et encore merci!!!!
0