A voir également:
- VBA excel insertion resultat inputbox
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
- Excel compter cellule couleur sans vba - Guide
17 réponses
Salut,
Il est trés difficile de répondre car tu exposes les problémes sans expliquer le but de ton programme et dans quel cadre il doit être utilisé.
Le bout de VBA que tu transmets, qu'est il censé faire?
A+
Rv
Il est trés difficile de répondre car tu exposes les problémes sans expliquer le but de ton programme et dans quel cadre il doit être utilisé.
Le bout de VBA que tu transmets, qu'est il censé faire?
A+
Rv
charluche
Messages postés
57
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
10 novembre 2009
28 août 2007 à 17:54
28 août 2007 à 17:54
En fait je souhaite dessiner des conteneurs sur in pont de bateau,
cette macro dessine des formes rectangulaires (comme un conteneur) et affiche le poids et la hauteur du colis popur un futur calcul de barycentre. en fait j ai une autre macro qui me calcule les coordonnees du centre de la feuillle et cette derniere fait la forme et me donne la hauteur et le poids.
J espere etre assez precis?
Merci de ton interet.
Charluche
cette macro dessine des formes rectangulaires (comme un conteneur) et affiche le poids et la hauteur du colis popur un futur calcul de barycentre. en fait j ai une autre macro qui me calcule les coordonnees du centre de la feuillle et cette derniere fait la forme et me donne la hauteur et le poids.
J espere etre assez precis?
Merci de ton interet.
Charluche
charluche
Messages postés
57
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
10 novembre 2009
28 août 2007 à 18:08
28 août 2007 à 18:08
En fait voici toute les macro:
Sub macrobateau()
'selection premier onglet par defaut
Set myDocument = Worksheets(1)
'nettoyage des colonnes B et C des coordonnées existantes
Columns("B:C").Select
Selection.ClearContents
'ajout de titres pour coordonnées
Range("B1").Select
ActiveCell.FormulaR1C1 = "centreX"
Range("C1").Select
ActiveCell.FormulaR1C1 = "centreY"
'cellule de reference
Range("A1").Select
Ligne = 1
Colonne = 1
'routine pour toutes les formes présentes sur la feuille(boucle qui scrute les formes)
For Each sh In myDocument.Shapes
If sh.Type = msoAutoShape Then
sh.Select
x = Windows(1).Selection.ShapeRange.Left
y = Windows(1).Selection.ShapeRange.Top
lo = Windows(1).Selection.ShapeRange.Width
la = Windows(1).Selection.ShapeRange.Height
' calcul du centre par rapport au coordonnees récupérées
centreX = x + (lo / 2)
centreY = y + (la / 2)
ActiveCell.Offset(Ligne, Colonne) = centreX
ActiveCell.Offset(Ligne, Colonne + 1) = centreY
Ligne = Ligne + 1
End If
Next
End Sub
Sub Conteneur()
'ajout de titres pour coordonnées
Range("D1").Select
ActiveCell.FormulaR1C1 = "Hauteur"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Poids"
'cellule de reference
Range("C1").Select
Ligne = 1
Colonne = 1
'Informations sur le conteneur
Longueur = InputBox("Longueur du conteneur en metre, si vous ne connaissez pas la longueur exacte, tapez 1 et ajustez manuellement avec les poignees.", "Longueur du conteneur", "1")
Largeur = InputBox("Largeur du conteneur en metre, si vous ne connaissez pas la longueur exacte, tapez 1 et ajustez manuellement avec les poignees.", "Largeur du conteneur", "1")
Hauteur = InputBox("Hauteur du conteneur en metre, cette hauteur sera automatiquement ponderee du coefficient 2/3 pour le calcul du KG.", "Hauteur du conteneur")
Poids = InputBox("Poids du conteneur en tonnes.", "Poids du conteneur")
ActiveCell.Offset(Ligne, Colonne) = Hauteur
ActiveCell.Offset(Ligne, Colonne + 1) = Poids
Ligne = Ligne + 1
'dessin de la forme
Set myDocument = Worksheets(1)
With myDocument.Shapes
With .AddShape(msoShapeRectangle, 5, 5, Longueur, Largeur)
End With
End With
End Sub
Je ne sais pas si c est vraiment digeste mais bon ca donne un idee peut etre un peu plus precise. Le but est d utiliser la deuxieme macro pour dessiner des colis et rentrer les coordonnes du centre de gravite en hauteur et son poids (coeff pour ponderer dans l'optique du calcul de barycentre) dans la feuille de calcul. Une fois la forme dessinee et les info retree, la premiere macro calcul le centre de gravite de la forme dans un repere x,y. Ces deux dernieres donnees seront elles aussi utilisees pour le calcul du barycentre.
Les problemes sont donc les suivants:
Quand je rajoutre une deuxieme forme, les poids et hauteur de la preniere forme sont effaces.
Si je supprime une forme parmis d autre, je voudrai que les infos (poids et hauteur) soient aussi supprimees pour qu il y est correspondance entre les resultats des 2 macros.
Voila, encore toute mes excuses pour les manques d information et mille merci pour ton interet
Charluche.
Sub macrobateau()
'selection premier onglet par defaut
Set myDocument = Worksheets(1)
'nettoyage des colonnes B et C des coordonnées existantes
Columns("B:C").Select
Selection.ClearContents
'ajout de titres pour coordonnées
Range("B1").Select
ActiveCell.FormulaR1C1 = "centreX"
Range("C1").Select
ActiveCell.FormulaR1C1 = "centreY"
'cellule de reference
Range("A1").Select
Ligne = 1
Colonne = 1
'routine pour toutes les formes présentes sur la feuille(boucle qui scrute les formes)
For Each sh In myDocument.Shapes
If sh.Type = msoAutoShape Then
sh.Select
x = Windows(1).Selection.ShapeRange.Left
y = Windows(1).Selection.ShapeRange.Top
lo = Windows(1).Selection.ShapeRange.Width
la = Windows(1).Selection.ShapeRange.Height
' calcul du centre par rapport au coordonnees récupérées
centreX = x + (lo / 2)
centreY = y + (la / 2)
ActiveCell.Offset(Ligne, Colonne) = centreX
ActiveCell.Offset(Ligne, Colonne + 1) = centreY
Ligne = Ligne + 1
End If
Next
End Sub
Sub Conteneur()
'ajout de titres pour coordonnées
Range("D1").Select
ActiveCell.FormulaR1C1 = "Hauteur"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Poids"
'cellule de reference
Range("C1").Select
Ligne = 1
Colonne = 1
'Informations sur le conteneur
Longueur = InputBox("Longueur du conteneur en metre, si vous ne connaissez pas la longueur exacte, tapez 1 et ajustez manuellement avec les poignees.", "Longueur du conteneur", "1")
Largeur = InputBox("Largeur du conteneur en metre, si vous ne connaissez pas la longueur exacte, tapez 1 et ajustez manuellement avec les poignees.", "Largeur du conteneur", "1")
Hauteur = InputBox("Hauteur du conteneur en metre, cette hauteur sera automatiquement ponderee du coefficient 2/3 pour le calcul du KG.", "Hauteur du conteneur")
Poids = InputBox("Poids du conteneur en tonnes.", "Poids du conteneur")
ActiveCell.Offset(Ligne, Colonne) = Hauteur
ActiveCell.Offset(Ligne, Colonne + 1) = Poids
Ligne = Ligne + 1
'dessin de la forme
Set myDocument = Worksheets(1)
With myDocument.Shapes
With .AddShape(msoShapeRectangle, 5, 5, Longueur, Largeur)
End With
End With
End Sub
Je ne sais pas si c est vraiment digeste mais bon ca donne un idee peut etre un peu plus precise. Le but est d utiliser la deuxieme macro pour dessiner des colis et rentrer les coordonnes du centre de gravite en hauteur et son poids (coeff pour ponderer dans l'optique du calcul de barycentre) dans la feuille de calcul. Une fois la forme dessinee et les info retree, la premiere macro calcul le centre de gravite de la forme dans un repere x,y. Ces deux dernieres donnees seront elles aussi utilisees pour le calcul du barycentre.
Les problemes sont donc les suivants:
Quand je rajoutre une deuxieme forme, les poids et hauteur de la preniere forme sont effaces.
Si je supprime une forme parmis d autre, je voudrai que les infos (poids et hauteur) soient aussi supprimees pour qu il y est correspondance entre les resultats des 2 macros.
Voila, encore toute mes excuses pour les manques d information et mille merci pour ton interet
Charluche.
Utilisateur anonyme
28 août 2007 à 19:05
28 août 2007 à 19:05
Bonjour,
voici un premier nettoyage de la première routine soumise !
Lupin
voici un premier nettoyage de la première routine soumise !
Sub Conteneur() Dim myDocument As Worksheet Dim Ligne As Long, Colonne As Long Dim Longueur As Long, Largeur As Long Dim Hauteur As Long, Poids As Long ' Ajout de titres pour coordonnées Range("D1:E1") = Array("Hauteur", "Poids") ' Cellule de reference Range("C1").Select ' Initialisation des compteurs Ligne = 1: Colonne = 1 ' Informations sur le conteneur Longueur = InputBox("Longueur du conteneur en metre, si vous ne connaissez pas la longueur exacte, tapez 1 et ajustez manuellement avec les poignees.", "Longueur du conteneur", "1") Largeur = InputBox("Largeur du conteneur en metre, si vous ne connaissez pas la longueur exacte, tapez 1 et ajustez manuellement avec les poignees.", "Largeur du conteneur", "1") Hauteur = InputBox("Hauteur du conteneur en metre, cette hauteur sera automatiquement ponderee du coefficient 2/3 pour le calcul du KG.", "Hauteur du conteneur") Poids = InputBox("Poids du conteneur en tonnes.", "Poids du conteneur") ActiveCell.Offset(Ligne, Colonne) = Hauteur ActiveCell.Offset(Ligne, Colonne + 1) = Poids Ligne = Ligne + 1 ' Dessin de la forme Set myDocument = Worksheets(1) With myDocument.Shapes .AddShape msoShapeRectangle, 5, 5, Longueur, Largeur End With Set myDocument = Nothing End Sub '
Lupin
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
charluche
Messages postés
57
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
10 novembre 2009
28 août 2007 à 19:33
28 août 2007 à 19:33
Bonjour Lupin,
tout d abord, je te remercie de te pencher sur mon probleme.
Je viens de tester ta solution et visiblement ca ne fonctionne pas. Peut etre est ce comme tu dis un nettoyage, auquel cas je te remercie car je fais vraiment du bricolage et ta version m'apprend de nouvelle commandes. Le cas echeant, quand je dessine une deuxieme forme, les poids et hauteurs de la premiere sont effaces.
Dans tous les cas, je te remercie grandement pour ton interet.
Charluche.
tout d abord, je te remercie de te pencher sur mon probleme.
Je viens de tester ta solution et visiblement ca ne fonctionne pas. Peut etre est ce comme tu dis un nettoyage, auquel cas je te remercie car je fais vraiment du bricolage et ta version m'apprend de nouvelle commandes. Le cas echeant, quand je dessine une deuxieme forme, les poids et hauteurs de la premiere sont effaces.
Dans tous les cas, je te remercie grandement pour ton interet.
Charluche.
Utilisateur anonyme
28 août 2007 à 19:50
28 août 2007 à 19:50
re:
qu'est-ce qui ne fonctionne pas ???
Chez moi la macro vire correctement en donnant la valeur 10 à toutes les questions.
Lupin
qu'est-ce qui ne fonctionne pas ???
Chez moi la macro vire correctement en donnant la valeur 10 à toutes les questions.
Lupin
charluche
Messages postés
57
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
10 novembre 2009
28 août 2007 à 20:04
28 août 2007 à 20:04
chez moi seules les celllules d2 et e2 se remplissent quand j execute plusieurs fois la macro alors que je souhaiterai que les caes d3 et e3 se remplissent aussi...
je ne comprends pas non plus.
merci quand meme
charlche
je ne comprends pas non plus.
merci quand meme
charlche
Utilisateur anonyme
28 août 2007 à 20:21
28 août 2007 à 20:21
re:
si je comprend le problème ...
La variable Ligne est initialisé à 1
Ligne = 1
ce qu'il faut c'est de déclarer la variable en static
au lieu de :
Dim Ligne As Long
déclare comme suit :
Static Ligne As Long
Au premier passage, [ Ligne = 0 ], donc au lieu d'incrémenter en fin de routine, on fait
l'incrémentation au début :
Ligne = ( Ligne + 1)
ainsi, on obtient :
Lupin
si je comprend le problème ...
La variable Ligne est initialisé à 1
Ligne = 1
ce qu'il faut c'est de déclarer la variable en static
au lieu de :
Dim Ligne As Long
déclare comme suit :
Static Ligne As Long
Au premier passage, [ Ligne = 0 ], donc au lieu d'incrémenter en fin de routine, on fait
l'incrémentation au début :
Ligne = ( Ligne + 1)
ainsi, on obtient :
Sub Conteneur() Static Ligne As Long ' Ajout de titres pour coordonnées Range("D1:E1") = Array("Hauteur", "Poids") ' Cellule de reference Range("C1").Select ' Initialisation des compteurs Ligne = (Ligne + 1): Colonne = 1 ' Informations sur le conteneur Longueur = InputBox("Longueur du conteneur en metre, si vous ne connaissez pas la longueur exacte, tapez 1 et ajustez manuellement avec les poignees.", "Longueur du conteneur", "1") Largeur = InputBox("Largeur du conteneur en metre, si vous ne connaissez pas la longueur exacte, tapez 1 et ajustez manuellement avec les poignees.", "Largeur du conteneur", "1") Hauteur = InputBox("Hauteur du conteneur en metre, cette hauteur sera automatiquement ponderee du coefficient 2/3 pour le calcul du KG.", "Hauteur du conteneur") Poids = InputBox("Poids du conteneur en tonnes.", "Poids du conteneur") ActiveCell.Offset(Ligne, Colonne) = Hauteur ActiveCell.Offset(Ligne, Colonne + 1) = Poids ' Dessin de la forme Set myDocument = Worksheets(1) With myDocument.Shapes .AddShape msoShapeRectangle, 5, 5, Longueur, Largeur End With Set myDocument = Nothing End Sub '
Lupin
charluche
Messages postés
57
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
10 novembre 2009
28 août 2007 à 20:37
28 août 2007 à 20:37
Ca y est ca fonctionne!!!!
En revanche je veux pas etre lourd mais crois tu que c possible d associer la forme avec les donnees qui sont entrees avec?
Je m explique. Si je rentre un conteneur et que ce conteneur doit etre retire, est il possible qu en selectionnant la forme et en la supprimant, ca supprime aussi les cases poids et hauteur cad dire que les lignes du dessous soit automatiquement remontees?
Charluche.
En revanche je veux pas etre lourd mais crois tu que c possible d associer la forme avec les donnees qui sont entrees avec?
Je m explique. Si je rentre un conteneur et que ce conteneur doit etre retire, est il possible qu en selectionnant la forme et en la supprimant, ca supprime aussi les cases poids et hauteur cad dire que les lignes du dessous soit automatiquement remontees?
Charluche.
charluche
Messages postés
57
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
10 novembre 2009
28 août 2007 à 20:42
28 août 2007 à 20:42
Pour etre plus precis, il faudrait que par exemple, si je supprime la 10eme forme les cellules E11 et D11 soient supprimees. De cette maniere, la 11eme forme aurait alors sa hauteur et son poids en D11 et E12. Cela donnerai une coherence avec la deuxieme macro que tu trouveras plus haut.
Merci
charluche.
Merci
charluche.
Utilisateur anonyme
29 août 2007 à 00:39
29 août 2007 à 00:39
re:
je ne connais pas les évènements "souris", tout ce que je
cannais est le "trappeur" "SelectionChange", permettant
de vérifier s'il s'agit ou non d'un objet de la collection.
En plus pour retenir la position de chaque ligne sachant
qu'elle celle-ci peut-être détruite, il faut lire constament
la position et non-la définir par une variable statique.
je n'ai pas le code sous la main, de toute façon il faudra
travailler en dynamique sur la position d'écriture, alors fait
plutôt ainsi :
Lupin
je ne connais pas les évènements "souris", tout ce que je
cannais est le "trappeur" "SelectionChange", permettant
de vérifier s'il s'agit ou non d'un objet de la collection.
En plus pour retenir la position de chaque ligne sachant
qu'elle celle-ci peut-être détruite, il faut lire constament
la position et non-la définir par une variable statique.
je n'ai pas le code sous la main, de toute façon il faudra
travailler en dynamique sur la position d'écriture, alors fait
plutôt ainsi :
Sub Conteneur() Dim myDocument As Worksheet Dim Ligne As Long, Colonne As Long Dim Longueur As Long, Largeur As Long Dim Hauteur As Long, Poids As Long ' Initialisation des compteurs Colonne = 1 ' Ajout de titres pour coordonnées Range("D1:E1") = Array("Hauteur", "Poids") ' Capture la position d'écriture Ligne = Range("D2:D65536").End(xlDown).Row ' Cellule de réference ' Accentué dans commmentaire seulement Range("C1").Select ' Je recommande plutôt [A1].Select ' Les commandes [ Activecell.Offset(0,0)... ] ' deviennent [ Cells(1,1)... ] ' ( Activecell.Offset ~ Cells ) ' Informations sur le conteneur ' ... ' Dessin de la forme Set myDocument = Worksheets(1) With myDocument.Shapes .AddShape msoShapeRectangle, 5, 5, Longueur, Largeur End With Set myDocument = Nothing End Sub '
Lupin
charluche
Messages postés
57
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
10 novembre 2009
29 août 2007 à 15:35
29 août 2007 à 15:35
Lupin,
je te remercie de tes conseils. Seulement mon niveau en vba etant proche du zero, voire nul, sais tu ou je pourrai trouver de l aide pour mettre en forme tes idees?
Charluche.
je te remercie de tes conseils. Seulement mon niveau en vba etant proche du zero, voire nul, sais tu ou je pourrai trouver de l aide pour mettre en forme tes idees?
Charluche.
Utilisateur anonyme
29 août 2007 à 16:10
29 août 2007 à 16:10
re:
Je n'ai pas beaucoup de temps sur le moment, mais je peut essayer de te pondre un début de solution.
Tout d'abord, quelques questions, pour connaître tes connaissances :
1.) Connais-tu l'enregistreur de macro ?
2.) Connais-tu l'éditeur VBE ?
3.) Est-tu familière la programmation orienté objet ?
4.) Connais-tu VB, seulement VB et pas VBA ?
Je te reviens avec un début de code !
Cordialement
Lupin
Je n'ai pas beaucoup de temps sur le moment, mais je peut essayer de te pondre un début de solution.
Tout d'abord, quelques questions, pour connaître tes connaissances :
1.) Connais-tu l'enregistreur de macro ?
2.) Connais-tu l'éditeur VBE ?
3.) Est-tu familière la programmation orienté objet ?
4.) Connais-tu VB, seulement VB et pas VBA ?
Je te reviens avec un début de code !
Cordialement
Lupin
charluche
Messages postés
57
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
10 novembre 2009
29 août 2007 à 16:48
29 août 2007 à 16:48
Pour etre franc avec toi, je te repondrai que je ne connais que l enregistreur de macro!!! Pour le reste js suis une truffe finie, je me debrouille avec les aides de office. Comme tu as pu le constater ca ne donne pas des resultats mirobolants. Ca ne fait qu une semaine que je suis avec vba. L enregistreur de macro je ne le faisait aue pour des trucs bidons style imprimer ou mettre en forme des cellules en cliquant sur un bouton, rien de trascendant quoi.
Merci de ton interet.
Charluche.
Merci de ton interet.
Charluche.
Utilisateur anonyme
30 août 2007 à 14:52
30 août 2007 à 14:52
Bonjour,
après quelques tests, je n'arrive pas à capturer l'évènement de sélection sur un [ shape ].
ce qui complique de beaucoup la question. Je vais penser à tous ça et si je trouve une
solution je te reviens avec !
Lupin
après quelques tests, je n'arrive pas à capturer l'évènement de sélection sur un [ shape ].
ce qui complique de beaucoup la question. Je vais penser à tous ça et si je trouve une
solution je te reviens avec !
Lupin
charluche
Messages postés
57
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
10 novembre 2009
30 août 2007 à 16:58
30 août 2007 à 16:58
Merci Lupin,
c est vraiment gentil de ta part de t occuper ainsi de mon cas car du fait de mes competences, je suis completement bloque.
Merci
Charluche.
c est vraiment gentil de ta part de t occuper ainsi de mon cas car du fait de mes competences, je suis completement bloque.
Merci
Charluche.
Utilisateur anonyme
31 août 2007 à 19:14
31 août 2007 à 19:14
Bonjour charluche,
voici donc un premier jet de ce que j'ai pu faire ...
Ne pouvant capturer l'évènement Select de la Shape, j'ai lié celle-ci a une cellule, et
lorsque tu clique sur cette cellule, la ligne et la shape correspondante sont effacer.
http://membre.oricom.ca/lupin/documents/ex_ajout_shapes.zip
n.b. Ce lien n'a qu'une durée de vie temporaire.
p.s. Un clic dans la colonne F sur le nom de la shape détruit celle-ci et la toute la ligne.
Lupin
voici donc un premier jet de ce que j'ai pu faire ...
Ne pouvant capturer l'évènement Select de la Shape, j'ai lié celle-ci a une cellule, et
lorsque tu clique sur cette cellule, la ligne et la shape correspondante sont effacer.
http://membre.oricom.ca/lupin/documents/ex_ajout_shapes.zip
n.b. Ce lien n'a qu'une durée de vie temporaire.
p.s. Un clic dans la colonne F sur le nom de la shape détruit celle-ci et la toute la ligne.
Lupin