Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Formule de calcul

Rosario.

XLDnaute Junior
Bonjour,

Pouvez vous svp m'aider je n'arrive pas à trouver la bonne formule, pour un tableau.
Je joint le tableau avec des commentaire pour vous expliquez en détail.
Merci par avance pour votre aide.

Cordialement.
 

Pièces jointes

  • Essai.xlsx
    11.6 KB · Affichages: 37

soan

XLDnaute Barbatruc
Inactif
Bonjour Rosario,

ton fichier en retour ; formule en i4 :

=SI(ESTVIDE(L3);"";SI(NB.SI(E4:H4;"x")=1;"◄";""))

attention : lis très attentivement la grande case jaune de l'énoncé,
puis lis ensuite les autres notes qui sont à gauche !


soan
 

Pièces jointes

  • Formule calcul.xlsx
    11.3 KB · Affichages: 2

Rosario.

XLDnaute Junior
Re Soan,

J'ai mis en commentaire qu'il pouvait y avoir 2 croix car dans le dossier original il n'y a pas de formule de calcul donc si par mégarde nous mettons 2 croix le le petit signe en i4 ce met pour signaler l'erreur.
 

Rosario.

XLDnaute Junior
Soan peux tu me dire stp s'il existe un code vba concernant la copie des croix dans un tableau sans copier les formule de calcul. Exemple dans le fichier joint.
Dans l'attente de ton retour. Merci
 

Pièces jointes

  • Copie de Formule calcul-1.xlsm
    17.4 KB · Affichages: 3

soan

XLDnaute Barbatruc
Inactif
Bonjour Rosario,

hier soir j'étais pas disponible, et j'ai vu ton post #21 que ce matin ; ton fichier en retour.
la cellule active est S19 ; fais Ctrl e ➯ travail effectué ! la cellule active est toujours S19.

ta sub rangecopy() était dans le module de "Feuil1" alors que ce n'est pas une sub événementielle ; elle aurait donc dû être placée dans un module standard tel que Module1 ; j'ai supprimé ta sub rangecopy(), puis j'ai mis dans Module1 ma sub CpyCroix() :​

VB:
Sub CpyCroix()
  Dim cel As Range: Set cel = ActiveCell
  Application.ScreenUpdating = 0
  [D14:I17].Copy: [D1].PasteSpecial -4163
  Application.CutCopyMode = 0: cel.Select
End Sub

ta sub ne pouvait pas marcher pour ce que tu veux faire, car une copie telle que tu l'avais faite copie tout : les formules, les valeurs, les formats, etc... il faut donc faire une copie en valeurs ; dans mon code VBA, -4163 = xlPasteValues ; ta sub rangecopy() faisait 4 copies successives alors que c'est inutile : on peut faire le job en une seule copie, de toute la plage D14:I17 en D1 ; c'est-à-dire à partir de D1, car ici, il faut voir D1 comme étant le coin supérieur gauche de la plage recopiée (qui sera de la même taille en nombre de lignes et colonnes que la plage d'origine).


cette seule instruction suffit pour faire la copie :

[D14:I17].Copy: [D1].PasteSpecial -4163

mais tout c'que j'ai mis en plus est utile :

* sans tout c'qui concerne la variable cel, suite à la copie, la plage de destination D1:I4 est sélectionnée ; si ça ne te gêne pas, ou si c'est ce que tu as envie, alors tu peux utiliser cette sub :

VB:
Sub CpyCroix()
  Application.ScreenUpdating = 0
  [D14:I17].Copy: [D1].PasteSpecial -4163
  Application.CutCopyMode = 0
End Sub

* Application.ScreenUpdating = 0 : désactive la mise à jour de l'écran ➯ exécution plus rapide

* Application.CutCopyMode = 0 : désactive le mode du couper / copier ➯ ça évite le cadre de tirets mobiles qui est autour de la plage d'origine ; donc sans cette instruction, tu verras le cadre de tirets sur le contour de la plage D14:I17.

soan
 

Pièces jointes

  • Formule calcul-1.xlsm
    18.1 KB · Affichages: 5
Dernière édition:

Rosario.

XLDnaute Junior
Bonsoir Soan,
Merci pour ta réponse, ça fonctionne, mais juste une petite chose pourquoi il me met un ' dans les cases vide cela me gêne dans le tableau même si les ' sont invisibles il me compte comme une croix. Aurait tu une solution stp. Je te remercie de nouveau
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Rosario,

regarde ma nouvelle sub :

VB:
Sub CpyCroix()
  Dim cel As Range: Set cel = ActiveCell
  Application.ScreenUpdating = 0
  [D1:I4].ClearContents 'efface anciens "x"
  [D14:I17].Copy: [D1].PasteSpecial -4163
  Application.CutCopyMode = 0: cel.Select
End Sub

seul changement : j'ai ajouté [D1:I4].ClearContents 'efface anciens "x" : ça efface les anciens résultats qui ont été mis par une utilisation précédente de cette macro ; mais ce n'est pas cet ajout qui a réglé le problème des apostrophes « ' » ; en voici la preuve : sur "Feuil1", fais Ctrl e ; ensuite, tu peux vérifier que chaque cellule de E1:H4 contient une apostrophe, soit seule « ' », soit devant un "x" : « 'x » ; je ne sais pas ce que tu as fait pour que ce soit comme ça ; je n'ai jamais ce genre de chose ! peut-être que c'est dû à un import de données d'un fichier ? ou à cause d'une conversion d'un fichier LibreOffice en un fichier Excel ? le seul moyen que j'ai trouvé pour résoudre ce problème a été de recréer la feuille !

va sur "Feuil2" ; j'ai fait un copier / coller manuel du tableau droit Q13:S16 (tout, y compris les formats) ; puis j'ai recréé le tableau de D14:I14 (sans aucune formule, uniquement les bordures, l'alignement centré, et la couleur rouge) ; j'ai alors fait un copier / coller manuel de ce tableau en D1 (tout, y compris les formats) ; j'ai retapé la formule de E14 (recopiée à droite, puis adaptée selon les bornes d'intervalles de notes) ; j'ai sélectionné E14:H14, puis j'ai étiré vers le bas jusqu'en ligne 17 ; enfin, j'ai copié manuellement la formule de i14 (étirée jusqu'en i17) ; maint'nant qu'tu sais comment j'ai recréé la feuille, sur cette même "Feuil2", fais Ctrl e ; ensuite, tu peux vérifier qu'il n'y a plus d'apostrophe dans les résultats : y'a aucun caractère « ' ». (enfin ! )

si y'a un moyen plus simple d'y arriver, sans devoir recréer la feuille, je ne le connais pas ; peut-être qu'un autre intervenant aura une meilleure idée là-dessus ? (moi, j'ai rien d'autre à proposer ! )

soan
 

Pièces jointes

  • Formule calcul-1.xlsm
    20.1 KB · Affichages: 5

Discussions similaires

Réponses
3
Affichages
238
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…