VB définir un range
Résolu
margir4233
Messages postés
67
Date d'inscription
Statut
Membre
Dernière intervention
-
margir4233 Messages postés 67 Date d'inscription Statut Membre Dernière intervention -
margir4233 Messages postés 67 Date d'inscription Statut Membre Dernière intervention -
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?
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?
A voir également:
- Impossible de définir la propriété hidden de la classe range
- Définir google comme page d'accueil - Guide
- Winmend folder hidden - Télécharger - Confidentialité
- Ajoutez à la liste de contacts ana le goff, inscrite le 27 novembre 2015, dans la catégorie i. puis triez les contacts en les classant : par ordre alphabétique de leur nom de famille (critère principal), puis par date du plus récent au plus ancien (critère secondaire). quel mot apparaît à la verticale dans la colonne "catégorie" entre les lignes 200 et 209 (en-tête compris) ? ✓ - Forum Word
- Input signal out of range - Forum Ecran
- Dans le code de la page, modifiez la couleur de fond de la classe .pix. un code de 4 chiffres doit apparaître dans la grille. lequel ? ✓ - Forum Excel
7 réponses
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
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
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
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
Je t'ai fait un petit exemple
http://www.cjoint.com/c/FFro5NyM27e
Cdlmnt
http://www.cjoint.com/c/FFro5NyM27e
Cdlmnt
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
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
As tu jeté un œil sur l'exemple que je t'ai proposé ?
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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?
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?
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
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
Ca me marque l'erreur suivante
Erreur de compilation: Type d'argument ByRef incompatible