Une colle pour Excelphiles
Hors ligneTigene Le 30/12/2005 à 11:20 Profil de Tigene Configuration de Tigene

Viconaute Modérateur
Tu vois pourquoi tu es référencé sur google
--

Ce n'est pas parce qu'on a quelque chose à dire, qu'il faut forcément l'ouvrir

Hors ligneAnthony Le 30/12/2005 à 14:00 Profil de Anthony Configuration de Anthony

Admin
Google représente 20 % des visites au maximum ;-) le reste provient d'un tapage "direct" de l'url dans le navigateur.
--

Hors ligneLebabs Le 30/12/2005 à 19:40 Profil de Lebabs Configuration de Lebabs

Bonjour à tous,
En effet, voilà des chiffres qui me laissent baba. Je me doutais bien que pas mal de monde passe par là, mais j'étais loin d'en soupçonner l'importance.

Comme promis, voici ma réponse au défi lancé plus haut:
Avant daller plus loin, je rappelle que je ne suis quun amateur averti. Je veux dire par là que si les pros de la programmation trouvent quelques maladresses dans ce qui va suivre, jaccepterai leurs critiques avec joie, pourvu quelles soient constructives.

Dans un premier temps jai ouvert une feuille de calcul  (Feuil1) dans laquelle jai limité à 5 la largeur des colonnes de A à Z . Même chose pour les lignes de 1 à 15  dont la hauteur a été fixée à 30.

La plage A1 à Z15 est entièrement blanche (Cest plus sympa)
La plage G8 à I10  est quadrillée et entourée en traits gras. (Format de cellules, bordures)
Tous les caractères de cette grille  sont centrés et assez gros et gras. (Ex Arial 20)

Les caractères des cellules M8 à M11 sont également centrés et de même taille que ceux de la grille. (Ce sera laddition)
Le bord supérieur de la cellule M11 est souligné par un trait gras. (Format de cellules, bordures)
Un gros + gras est placé en L9 et L10.
La formule : =Somme(M8:M10) est placée dans la cellule M11
La cellule M11 peut être protègée (Mais exclusivement celle-ci.)

Les lignes de 1 à 5 sont utilisées par du texte dinvite au jeu, mais nont aucun rôle dans le déroulement du programme.

Un texte WordArt  affiche : « Vous avez perdu ». Ce texte prend toute la largeur de lécran. (Il disparaîtra pendant le jeu).
Un autre texte WordArt, plus petit affiche : « Rejouer ? », et un troisième : « Quitter ». Ces deux-là disparaîtront aussi pendant le jeu.

Attention, ces textes WordArt se nommant automatiquement à leur création, il est important de connaître leur nom. (Il suffit de cliquer dessus. Leur nom saffiche dans la fenêtre au dessus de A1) . En principe, ce devrait être WordArt 1, WordArt 2 et WordArt 3, sauf si vous avez affiché plusieurs modèles avant de vous décider. Dans ce cas, il y aura une légère modif à faire dans les macros. (Je les signalerai en temps utile).


Passons maintenant aux macros : Le plus simple est de les recopier telles quelles.


Sub auto_exec()
    'Mise en place automatique à l'ouverture du jeu.
    Application.Run ("MiseEnPlace")
End Sub


Sub MiseEnPlace()
'Efface l'ancienne addition
    Range("M8:M10").Select
    Selection.ClearContents
'Met les chiffres en place dans la grille
    Dim colonne As Integer, ligne As Integer, chiffre As Integer
    chiffre = 1
    For colonne = 1 To 3
    For ligne = 1 To 3
    Feuil1.Cells(7 + colonne, 6 + ligne).Value = chiffre
    chiffre = chiffre + 1
    Next ligne
    Next colonne
    'Remet le compteur de coups joués à 1
    Range("Z1").Value = 1
    Range("A2").Select
    'Efface les messages de partie perdue.
    ActiveSheet.Shapes("WordArt 1").Visible = False
    ActiveSheet.Shapes("WordArt 2").Visible = False
    ActiveSheet.Shapes("WordArt 3").Visible = False
End Sub


Sub PremiersChiffres()
    'Place le chiffre choisi dans l'addition
    Cells(7 + Range("Z1").Value, 13).Value = ActiveCell.Value
    ActiveCell.Value = ""
    'Incrémente le compteur de coups joués
    Range("Z1").Value = Range("Z1").Value + 1
    'Lance le message de partie perdue si les trois coups ont été joués sans atteindre "12"
    If Range("Z1").Value = 4 Then
    Application.Run ("Resultat")
    End If
End Sub


Sub TroisièmeChiffre()
    'Déplace le chiffre dans tous les sens s'il doit permettre d'arriver à "12"
    Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, f As Integer, g As Integer
     a = ActiveCell.Row
     b = ActiveCell.Column
     g = ActiveCell.Value
5
            'D'abord, à l'horizontale (décalage aléatoire)
            Randomize
            e = 1 - Int(Rnd * 3)
            c = ActiveCell.Row + e
            'Recalcule le décalage s'il doit faire sortir le chiffre de la grille
            If c < 8 Or c > 10 Then
            GoTo 5
            End If
10
                'Ensuite, à la verticale (décalage aléatoire)
                Randomize
                f = 1 - Int(Rnd * 3)
                d = ActiveCell.Column + f
                'Recalcule le décalage s'il doit faire sortir le chiffre de la grille
                If d < 7 Or d > 9 Then
                GoTo 10
                'Recalcule le décalage s'il est egal à 0
                ElseIf a = c And b = d Then
                GoTo 10
  
    End If
                        'Place dans l'ancienne cellule le chiffre qui est écrasé par celui qui s'échappe.
                        Cells(a, b).Value = Cells(c, d).Value
                        'Place le chiffre qui s'échappe dans la cellule ainsi recalculée
                        Cells(c, d).Value = g
                        Range("Z2").Value = 1
                        Range("Z1").Value = Range("Z1").Value + 1
End Sub


Sub erreur()
    'Place dans l'addition le premier chiffre disponible restant dans la grille,
    'à condition qu'il soit supérieur à 0 et qu'il ne totalise pas "12"
    Dim a As Integer, b As Integer, d As Integer
    For a = 1 To 3
    For b = 1 To 3
    d = Feuil1.Cells(7 + a, 6 + b).Value
    If d > 0 And Range("M11").Value + d <> 12 Then
    Range("M10").Value = d
    Cells(7 + a, 6 + b).Value = ""
    'Arrête les boucles dès que la condition est remplie
    GoTo 10
    End If
    Next b
    Next a
10
End Sub


Sub Resultat()
    'Fait apparaître le message de partie perdue.
    ActiveSheet.Shapes("WordArt 1").Visible = True
    ActiveSheet.Shapes("WordArt 2").Visible = True
    ActiveSheet.Shapes("WordArt 3").Visible = True
End Sub


Sub quitter()
    ActiveWorkbook.Close
End Sub


Dans les macros « MiseEnPlace » et « Resultat », faire correspondre sil y a lieu, le nom des WordArt avec ceux de la feuille de calcul. (Lordre daffichage na aucune importance.)

Retour à la feuille de calcul :
Clic droit sur « Rejouer ? » ..Affecter une macro : »Mise en place ».
Clic droit sur « Quitter »..Affecter une macro : « Quitter »
Clic droit sur longlet « Feuil1 »..Visualiser le code.
Sur cette page blanche, placer le code suivant :


Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Ne permet de fonctionner que si la cellule cliquée se trouve à l'intérieur de la grille.
    If ActiveCell.Row > 7 And ActiveCell.Row < 11 And ActiveCell.Column > 6 And ActiveCell.Column < 10 Then
        'Interdit le fonctionnement si le message d'erreur n'est pas effacé ou si la cellule sélectionnée est vide
        If Range("Z2").Value = 2 Then
        If ActiveSheet.Shapes("WordArt 3").Visible = True Or ActiveCell.Value = "" Then
        GoTo 10
            'Lance la macro d'affichage des chiffres dans l'addition,tout en évitant d'arriver à "12" en deux coups
            ElseIf Range("M11").Value + ActiveCell.Value <> 12 And Range("Z1").Value < 4 Then
            Application.Run ("PremiersChiffres")
                'lance la macro d'esquive du troisième chiffre, entre le 3eme et le 9eme coup.
                ElseIf Range("Z1").Value > 2 And Range("Z1").Value < 9 And Range("M11").Value + ActiveCell.Value = 12 Then
                Application.Run ("TroisièmeChiffre")
                    'lance la macro d'affichage d'un chiffre aléatoire et de  partie perdue à partir du 9eme coup
                    ElseIf Range("Z1").Value > 8 Then
                    Application.Run ("Erreur")
                    Application.Run ("Resultat")
    End If
    End If
    End If
    'Anti rebond
    Range("Z2").Value = 2
10
End Sub


Retour à la feuille de calcul.
Enregistrer le travail. Cest terminé. Cliquer sur « Rejouer ? »
Si tout sest bien passé, les trois WordArt vont seffacer, laddition se vider et la grille se remplir.
A vous de jouer et amusez vous bien.

Ps: J'ai mis en Z1 et Z2 des valeurs qui devraient être déclarées  comme variables de niveau procédure, mais j'ai du mal à contrôler la durée de vie de ces variables. Si quelqu'un peut me donner la syntaxe, je suis preneur.
--
D'une étincelle peut jaillir la lumière.
Hors ligneTigene Le 31/12/2005 à 16:11 Profil de Tigene Configuration de Tigene

Viconaute Modérateur
super

je vais tester cela dés l'année prochaine.


Bon et joyeux nouvel an au Excellent ou rapide excelphilologue distingués

@+
--

Ce n'est pas parce qu'on a quelque chose à dire, qu'il faut forcément l'ouvrir

Hors ligneAnthony Le 31/12/2005 à 19:24 Profil de Anthony Configuration de Anthony

Admin
Comme d'hab LeBabs a relevé le défi haut la main ;-)
--

Hors ligneLebabs Le 01/01/2006 à 11:21 Profil de Lebabs Configuration de Lebabs

Merci Tigène,
Bonne année à toi aussi, ainsi qu'à tous les membres, sans oublier le Webby.
--
D'une étincelle peut jaillir la lumière.
Hors ligneMickey Le 03/01/2006 à 12:42 Profil de Mickey Configuration de Mickey

Bonjour à tous,
Pas trop la gueule de bois?
Merci pour la réponse à mon défi, mais....Heu...
C'est quoi, un texte WordArt?
Merci de votre réponse.
Hors ligneMickey Le 05/01/2006 à 12:53 Profil de Mickey Configuration de Mickey

Salut à tout le monde,
Voilà, je voulais réaliser l'addition truquée qui a été décrite plus haut, mais j'ai deux problèmes:
1 Je ne sais pas ce qu'est un texte WordArt,
2 Dans la macro Sub Troisième chiffre, J'ai une ligne verte qui dit: Déplace le chiffre dans tous les sens s'il doit permettre......Ensuite, j'ai une ligne rouge qui dit: d'arriver à "12"
J'ai essayé de lancer la macro, mais elle m'envoie un message d'erreur à ce niveau là.
Ou est le problème ?
Merci d'avance.
Hors ligneLebabs Le 10/01/2006 à 12:42 Profil de Lebabs Configuration de Lebabs

Bonjour tout le monde, salut Mickey,
Un texte Word art est tout simplement un objet stylisé, dans lequel tu mets le texte de ton choix. Mode daccès :
A partir de la feuille de calcul :
     Cliquer sur « Insertion », puis « Image » et « WordArt »

Une deuxième façon dy arriver :
Toujours à partir de la feuille de calcul :
     Cliquer sur « Affichage », puis « Barre doutils » et  cocher « Dessin ».
Une barre doutil saffiche au bas de lécran  et WordArt est symbolisé par un gros A bleu.

La ligne rouge, dans la macro, est effectivement une erreur. En fait, elle devrait être verte et sur la même ligne que celle qui la précède. Je pense que tu as cliqué malencontreusement sur le retour à la ligne. Cette ligne nest que du texte qui explique ce qui va suivre, et na aucune influence sur le déroulement de la macro. ( A condition quelle soit déclarée comme telle.)

Remise en état :
Tu as trois possibilité :
1 Tu supprimes carrément cette ligne rouge. (Cest un peu dommage, car la ligne précédente   naura plus aucune signification)

2 Devant cette ligne rouge, tu mets un apostrophe. (Je crois que les pros appellent ça une cote.). La ligne passera au vert, et tout fonctionnera.

3  Tu fais passer cette ligne rouge dans le prolongement de la verte qui la précède.

Cest tout. Amuse toi bien.
A +
--
D'une étincelle peut jaillir la lumière.
Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels