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)
Tu peux maintenant déplacer le bouton

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 Sub

Attention :

  • 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 quand il y en a une centaine pour une colonne... enfin, c'est bien les formules de chaque nouvelle cellule de ma matrice qu'il faut que j'entre à la main, c'est bien ça ?

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 ), sinon c'est excellent !

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 ) : est-il possible que lorsqu'on ajoute un nouveau produit, les formules des facteurs B et C s'intègrent elles-aussi, comme pour la matrice ?

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,

je n'avais pas vu que tes facteurs B et C résultaient de formules.

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 = xlThick

Pour 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 ), mais à modifier des macros existantes, ne serait-ce que pour les adapter à tes feuilles (changer les numéros de lignes, de colonnes...)

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 Sub

Modifier 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.Unprotect

et 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"

Rechercher des sujets similaires à "formules commentaire possible pas"