Des formules dans un commentaire ?!!! possible ou pas ?
hello à vous
sacré boulot que vous faites là !
poulpow, remarque pour assurer l'avenir de ton fichier :
ajoute des commentaires dans tes macros, si possible quasiment à chaque ligne.
et mets des protections partout
bon dév
jmd a écrit :hello à vous
sacré boulot que vous faites là !
poulpow, remarque pour assurer l'avenir de ton fichier :
ajoute des commentaires dans tes macros, si possible quasiment à chaque ligne.
et mets des protections partout
bon dév
Oué, sacré boulot que fait Myta
Merci pour tes conseils. Le truc, c'est que Excel et ses formules, ça va mais alors les macros... c'est du chinois pour moi !
Je ne sais pas si Myta passe encore sur la discussion, mais si c'est le cas, pourrais tu me dire comment faire pour augmenter la plage où s'applique la macro. Car comme je l'ai dit précédemment, il faudra que mon responsable puisse par la suite rajouter de nouveaux produits donc si c'est pas trop compliqué, peux-tu m'indiquer la démarche à suivre ?
Et autre question, comment faire pour déplacer le bouton "Mise à jour des commentaires" ? J'aimerais qu'il soit un peu plus haut.
Voilà, merci encore.
Bonjour Poulpow,
Pour déplacer un bouton :
- Fais apparaitre la barre d'outils "Visual Basic"
- Clique sur le bouton "Mode Création" (la petite équerre)
Désactive le mode création pour exécuter tes macros
Re,
Pour étendre ta plage "produits" une suggestion :
Sub Ajout_Commentaires()
Dim Cellule
Dim Texte As String
Dim I As Byte
Dim x As Integer
Dim y As String
x = Range("R25").End(xlDown).Row ' x = la dernière ligne "produit" renseignée
y = Split(Range("U21").End(xlToRight).Address, "$")(1) ' y = la dernière colonne "produit" renseignée
Application.ScreenUpdating = False
Range("V26", Range(y & x)).ClearComments
With Range("V26:V" & x).Select
For Each Cellule In Selection
Texte = "Norme analytique :" & Chr(10)
For I = 2 To 14
If Not IsEmpty(Cells(Cellule.Row, I)) Then
Texte = Texte & "Lieu " & Cells(Cellule.Row, I) & " : " & _
Format(Round(Application.WorksheetFunction.VLookup(Cells(Cellule.Row, I), Range("Facteur"), 4) / Cells(Cellule.Row, 20)), "#,##0") & Chr(10)
Else
GoTo Saut:
End If
Next I
Saut:
With Cellule
.Select
.AddComment
.Comment.Visible = True
.Comment.Text Text:=Texte
.Comment.Shape.Select True
With Selection
.AutoSize = True
End With
With Selection.Font
.Name = "Tahoma"
.FontStyle = "Bold"
.Size = 8
End With
.Comment.Visible = False
End With
Next Cellule
End With
Range("V26:V" & x).Copy
Range("W26", Range(y & "26")).PasteSpecial Paste:=xlPasteComments
Application.CutCopyMode = False
Range("U25").Select
Application.ScreenUpdating = True
End SubAttention :
- Si tu ajoutes des produits, il te faudra étendre les formules à la main vers les nouvelles colonnes
- Si tu enlèves des produits, les commentaires ne seront pas effacés, puisque la macro ne prend en compte que jusqu'au dernier produit renseigné, tant en ligne qu'en colonne
OK merci, c'est déjà très bien ce que tu as fait mais ajouter les formules à la main
Comment ça se fait qu'on ne puisse pas incrémenter avec cette macro ?
En tout cas merci !
Je viens de la mettre en place, ça fonctionne très bien, même en incrémentant mes formules, donc c'est peut être autre chose que tu voulais dire...
Merci pour ton aide.
J'ai pas dit qu'on ne pouvait pas le faire par macro, simplement que celle là ne le fait pas (pas encore
Je n'ai touché à rien parce qu'elle ne le faisait déjà pas (toutes les cellules blanches sont complètement vides), mais c'est améliorable.
Alors tu as encore plusieurs possibilités :
- Faire étendre les formules par la même macro quand tu lances le remplissage des commentaires.
- Créer une autre macro (et un autre bouton), qui ajoute les formules au(x) nouveaux produits, et retracent les bordures de ton tableau par la même occasion.
- Etendre tes formules à la main. Attention pas une par une ! sélectionne les cellules de la dernière colonne contenant les formules (AH26:AH40), place toi en bas à droite de ta sélection (le curseur devient un "+" fin et noir), clic gauche maintenu et déplace toi à droite jusqu'à la dernière colonne que tu veux remplir. ça marche ?
Si tu veux qu'on essaye de faire une macro, confirme d'abord que tu n'enlèves pas des produits existant, sinon ça va être différent.
Confirme aussi que la dernière version de Myta fonctionne comme tu veux, parce que moi je suis parti de là (et j'aurais été bien incapable d'y arriver sans lui
J'ai pas tout pigé à ce que tu m'as dit.
Là, je viens de mettre en place la macro que tu m'as filé. Ainsi, il suffit de sélectionner la dernière colonne, de l'incrémenter sur la colonne suivante. Ensuite, je clique sur "mise à jour des commentaires" et hop, tous les commentaires ressortent sur la nouvelle colonne.
Par contre, la macro pour mettre automatiquement les formules lorsqu'on ajoute un produit, ça marcherait comment ? Il suffirait de remplir la cellule où l'on met le nom de produit et automatiquement, ça remplirait toute la colonne avec les formules qui vont bien (avec en prime le traçage des bords) ? Ca, ça serait vraiment cool ! 8)
Par contre, pour ce qui est des produits qu'on enlève je ne sais pas trop, c'est mon responsable qui voit... moi je n'y suis que pour quelques semaines. On a qu'à faire comme si on en enlevait pas. Tant qu'on peut en rajouter, c'est le principal !
Sinon la macro de Myta fonctionne très bien, c'est exactement ce que je voulais (sauf que le bouton de mise à jour est un peu trop bas, il faudrait le remonter d'une ligne ou deux
OK, je te regarde un truc qui devrait te plaire.
Pour déplacer ton bouton, j'ai déjà répondu plus haut.
Sylvain TBM a écrit :OK, je te regarde un truc qui devrait te plaire.
Pour déplacer ton bouton, j'ai déjà répondu plus haut.
Ah ! Avec le long discours que tu as mis juste après, j'avais même pas vu ! Merci bien.
Au fait, je vois que tu es de Mazamet, tu connais pas un Thomas (22-23 ans) ?
Re,
Tu sais, Mazamet ça a beau être la campagne, avec la com d'agglo il y a près de 85000 habitants... Alors 1 Thomas de 23 ans...
Disons que je le connais peut-être s'il fait de l'escalade ou du VTT (sorti de ça chuis pas très social...)
Pour revenir à ton tableau :
Essaye et dis nous si ça va...
C'est excellent l'insertion de produit, le seul hic, c'est que sur ta feuille, la mise à jour des commentaires ne se fait pas... est-ce que c'est normal ?
Autre chose (je sais, je suis très exigent
Bon en fait, tout fonctionne (c'est parce que la première fois que j'ai essayé, je n'avais pas mis de valeurs dans les ligne et colonne apprues) mais il y a un truc qui m'énerve, c'est que j'arrive à appliquer la macro à ma feuille, simplement, je n'arrive pas à créer le bouton "ajout d'un produit" qui lorsqu'on appuie dessus fait l'ajout automatiquement. Je pense qu'il faut tout simplement créer le lien entre le bouton et la macro, mais je ne sais pas comment faire...
Bonjour,
Pour qu'ils se remplissent automatiquement, colles ce code à la place de la partie que j'ai commentée "on ajoute une colonne "produit""
' on ajoute une colonne "produit"
Cells(21, y + 1).EntireColumn.Insert
Cells(21, y).AutoFill Destination:=Range(Cells(21, y), Cells(21, y + 1)), Type:=xlFillDefault
Cells(21, y + 1).Borders(xlEdgeLeft).Weight = xlThin
Cells(21, y + 1).Borders(xlEdgeRight).Weight = xlThick
Range(Cells(22, y), Cells(x + 1, y)).AutoFill Destination:=Range(Cells(22, y), Cells(x + 1, y + 1)), Type:=xlFillCopy
Cells(22, y + 1).ClearContents
Range(Cells(22, y + 1), Cells(x + 1, y + 1)).Borders(xlEdgeLeft).Weight = xlThin
Range(Cells(22, y + 1), Cells(x + 1, y + 1)).Borders(xlEdgeRight).Weight = xlThickPour le bouton c'est pas compliqué, mais d'habitude je fais pas comme ça... Là c'est parce que j'ai repris le même que celui qui existait.
Donc si tu as copié le bouton existant "Mise à jour des commentaires" :
- en mode création (petite équerre)
- clic droit et "visualiser le code"
- là il t'affiche dans VBE les codes relatifs à la feuille sur laquelle tu as ton bouton, et il crée un code pour ton bouton
- ce code dit quoi faire en cas d'appui sur le bouton
- entre private sub et end sub, tu lui dis Call "nom de ta macro", donc normalement pour toi Call Ajout_Produit
- Donc ça y est, il exécutera la macro "Ajout_Produit" quand tu cliqueras
Ce que je fais d'habitude :
- insertion/image/formes automatiques
- tu crée n'importe quelle forme
- clic droit et "affecter une macro"
Je n'ai pas assez d'expérience pour savoir si c'est une mauvaise solution...
Qui en pense quoi ?
Rien à dire, c'est excellent !
Par contre, un autre truc, il est possible que parfois, seule une colonne ait besoin d'être ajoutée, donc est-ce qu'il serait possible de rajouter un bouton qui permet d'ajouter, le cas voulu, uniquement une colonne ?
Si tu fais ça, ça serait trop beau !
Et pour les boutons, je préfère ta technique, c'est plus facile à appliquer et on a aussi l'avantage de pouvoir faire la forme et le format voulu sans aucun problème !
As tu essayé de comprendre les codes ?
C'est sûr c'est pas toujours parlant, mais en même temps c'est que 3 mots d'anglais et de la logique.
Sachant que les macros sont exécutées de haut en bas, chaque ligne correspondant à une étape. Un peu comme les graphcets qu'on faisait en technologie.
Avec un peu de patience, tu dois arriver, non pas à créer une macro (ça viendra aussi si tu t'y mets
Car ATTENTION : si jamais tu ajoutes une ligne avant la 21, ou une colonne avant la R, tu fous toute la macro en l'air, et il faudra lui refournir manuellement toutes les nouvelles adresses...
Dans ce cas il suffisait de copier la dernière partie de ma macro ("on ajoute une colonne "produit""), et la faire exécuter par une nouvelle macro, sans oublier bien sûr de redéclarer les variables (ici x et y). En modifiant 2 petits trucs le tour est joué.
Pour le nouveau code je t'ai commenté toutes les lignes (en français c'est pas facile mais du devrais comprendre)
Comme te l'avait déjà suggéré jmd, essaye de le faire pour tout le reste, ça t'aidera peut-être à comprendre le VBA
La nouvelle macro :
Sub Ajout_Colonne()
Dim x As Integer
Dim y As Integer
x = Range("R25").End(xlDown).Row ' x = la dernière ligne "produit" renseignée
y = Range("U21").End(xlToRight).Column ' y = la dernière colonne "produit" renseignée
' on ajoute une colonne "produit"
Cells(21, y + 1).EntireColumn.Insert ' insère une colonne entière après le dernier produit
Cells(21, y).AutoFill Destination:=Range(Cells(21, y), Cells(21, y + 1)), Type:=xlFillDefault ' étire le nom du dernier produit en incrémentant, sur 1 cellule à droite
Cells(21, y + 1).Borders(xlEdgeLeft).Weight = xlThin ' bordure gauche du nouveau nom de produit : trait fin
Cells(21, y + 1).Borders(xlEdgeRight).Weight = xlThick ' bordure droite du nouveau nom de produit : trait fort
Range(Cells(22, y), Cells(x, y)).AutoFill Destination:=Range(Cells(22, y), Cells(x, y + 1)), Type:=xlFillCopy ' étire la colonne (depuis le dernier facteur A rempli, jusqu'à la dernière cellule remplie), en copiant les formules, sur 1 cellule à droite
Cells(22, y + 1).ClearContents ' efface le contenu du nouveau facteur A
Range(Cells(22, y + 1), Cells(x, y + 1)).Borders(xlEdgeLeft).Weight = xlThin ' bordure gauche de la nouvelle plage : trait fin
Range(Cells(22, y + 1), Cells(x, y + 1)).Borders(xlEdgeRight).Weight = xlThick ' bordure droite de la nouvelle plage : trait fort
End SubModifier quelques trucs, ça va, je l'ai déjà fais mais c'est vrai qu'après, je pige plus rien. Les codes tout ça, c'est du chinois !
Mais je vais essayer de le faire pour la ligne (au cas où mon responsable me demande de le faire).
En tout cas merci pour ton aide !
jmd a écrit :mets des protections partout
Sylvain a écrit :ATTENTION : si jamais tu ajoutes une ligne avant la 21, ou une colonne avant la R, tu fous toute la macro en l'air, et il faudra lui refournir manuellement toutes les nouvelles adresses...
Pour cela tu pourrais verrouiller toutes les cellules (format de cellule/protection), sauf celles que l'utilisateur doit renseigner (lieux, facteurs A, D et E) jusqu'en bas et jusqu'à droite bien sûr, pas seulement celles qui sont déjà utilisées, mais aussi celles qui le seront...
Ensuite tu protèges ta feuille(outils/protection/protéger la feuille), par exemple en autorisant seulement à sélectionner les cellules déverrouillées, et sans mettre de mot de passe
Dans tes macros tu ajoutes avant la première instruction
ActiveSheet.Unprotectet avant le end sub
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True(proposé dernièrement par Souris84 je crois:wink:)
Ca te met pas à l'abri d'un saboteur, vu que la feuille peut facilement être déprotégée.
Par contre l'erreur étant humaine (surtout sur Excel avec un "blaireau"), ça te mettra au moins à l'abri d'une mauvaise manip'
Tout compris ?
"C'est en forgeant que l'on devient forgeron"
"C'est en sciant que Léonard de Vinci"