Inversion de cellules
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Amadéus a écrit :Bonjour
Pour tous ceux qui cherchent à mettre le chemin d'accès, le répertoire, le nom du classeur actif, le nom de la feuille active, celui de la seconde ou éniéme feuille du classeur actif,
dans une cellule où dans une formule,
Classeur joint
Cordialement,
Amadéus
bonjour Amadéus,
1 - Ces formules m'interessent au + haut point , mais j'aimerais avoir des explications.
est-ce des fonctions complémentaires que tu a créer ?
2 - Je fais des macros depuis MULTIPLAN et je voudrais me convertir en langage VBA.
Je crois que si tu pouvais me traduire la macro1 comme EXEMPLE , je pourrais démarrer !
Ci-joint un fichier qui etait une réponse à un "forumeur".
https://www.excel-pratique.com/~files/doc/o1R6Winversion3.xls
Salutations.....Claude.
Salut le forum
La macro donnée par Amadéus pourrait ressembler à ceci.
Sub InversionCellule()
Dim Cellule1 As Range
Dim Cellule2 As Range
Dim Temp
Set Cellule1 = Application.InputBox("Sélectionner la première cellule", , , , , , , 8)
Set Cellule2 = Application.InputBox("Sélectionner la deuxième cellule", , , , , , , 8)
Temp = Cellule1.Value
Range(Cellule1.Address) = Range(Cellule2.Address)
Range(Cellule2.Address) = Temp
Set Cellule1 = Nothing
Set Cellule2 = Nothing
End SubMytå
Bonjour Mytå, dubois
Petite rectif, cette macro n'est pas de moi.
Pour la partie concernant les formules, il s'agit de simples formules qui utilisent les "noms intégrés" Excel, en fait des noms dans une autre langue qu'excel reconnait.
Ces formules (qui existaient bien avant mon apprentissage à Excel) trouvent justement leur origine dans les fonctions XL4 et Macros XL4 que sont CELLULE et LIRE.CELLULE.
Bien cordialement
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
merci Mytä , Amadéus de me prêter attention,
OK pour les formules , çà m'est revenu.
Pour la macro ,je trouve Mytä "un peu sec" !
Comme je l'ai dit + haut : je suis un vieux d'Excel qui désire changer de langage macro.
Tel-quel , Mytä ; je ne peux exploiter ton code ! Sinon le copier bêtement et ce n'est pas
le but..............J'aurais souhaiter que :
1 - Le code VBA fasse exactement la même chose que la macro1 ; j'aurais pu alors
mieux analyser et comprendre ,donc apprendre .
2 - Un minimum d'explication entre les lignes.
A noter que cette macro n'a aucun intérêt en soi , mais comme exercice elle peut m'aider.
C'est peut-être pas le bon exemple pour démarrer ?
Croyez-moi je fais des efforts ! Aidez-moi SVP.
Amicalement.....Claude.
Salut Claude
Pour apprendre les macros en VBA après Excel 4, j'ai démarré par enregistrer quelques macros dans lesquels j'ai fait quelques mouvements, changé une formule ou l'autre, effacer une ligne et l'insérer ailleurs, déplacer une cellule, etc. Ensuite, je suis allé étudier le code, puis je l'ai modifié. J'ai constaté que le VBA permet une souplesse énorme et que c'est un vrai langage de programmation. En même temps, c'est plus logique que le 4.
La réponse que Mita t'a donnée est tout à fait juste, mais ce n'est que par l'exercice que tu arriveras à comprendre. Essaie de l'écrire et fait la tourner ligne après ligne pour en comprendre chaque pas. Comme je vois que tu aimes bien programmer, je pense que tu vas très vite saisir le fonctionnement du VBA. Et surtout avec l'aide en ligne, on apprend très vite. (tu sélectionne une fonction ou un nom et tu presses F1)
En tout cas, je t'encourrage à apprendre VBA qui est nettement plus performant que le 4 et en plus qui risque de durer plus longtemps.
Amicalement
Dan de pic
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonsoir à tous,
J'ai bosser toute la journée sur cette macro ,en modifiant çà et là le code de Mytä.
Il y a des choses que je ne comprend pas encore , mais ça tourne bien et c'est encourageant pour la suite.
Ci-joint: ma première macro VBA. j'attends vos remarques !
https://www.excel-pratique.com/~files/doc/inversion4.xls
J'aurais souhaité que les 1ère InputBox ne comportent pas de fenêtre de saisie ,
c'est-à-dire comme un MsgBox ; mais je n'ai pas réussi.
Comme je veux aller au bout du bout ; créer un programme et non le subir , un
petit coup de pouce serait le bienvenu pour y arriver.
Merci d'avance à tous.
Amicalement votre.
claude.
Salut le forum
Pour ta MessageBox
réponse = MsgBox(("ATTENTION ! " & ActiveCell.Address & " est bien votre cellule de départ " & Chr(13) & Chr(13) & "voulez vous continuer ?"), 4)
If réponse = 7 Then Exit Sub
Set Cellule1 = ActiveCellDevrait faire ce que tu demandes.
Mytå
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
bonjour,
il faut une pause après ton code , pour sélectionner la 2ème cellule.
J'essaye de mettre un branchement en "a1" mais n'arrive pas à écrire le IF !
If ("a1") = 1 Then
Deuxieme
End If
Réponse = MsgBox(("ATTENTION !.....;
End Sub
Sub Deuxieme
Réponse = MsgBox(("ATTENTION !.....;
Range("a1") = 2
;;;;
End Sub
il y a surement une autre solution.
sinon comment écrire la premiere ligne :" si cellule a1=1" ?
Salutation......Claude
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
re,
j'oubliais ; il faudrait changer l'intitulé du sujet "Inversion de cellules" non ?
claude.
Salut le forum
Claude voila ton code un peu modifier pour faire la même chose que la MacroXL4
Les variables sont déclarées en Private pour qu'elles gardent leurs valeurs.
Option Explicit
Private Etat As Byte
Private Cellule1 As Range
Private Cellule2 As Range
Private Temp
Sub InversionCellule2()
Dim Reponse As Long
If Etat = 0 Then
Set Cellule1 = ActiveCell
Temp = Cellule1.Value
Range(Cellule1.Address).Interior.ColorIndex = 3
Etat = 1
Exit Sub
End If
Etat = 0
Set Cellule2 = ActiveCell
Range(Cellule2.Address).Interior.ColorIndex = 3
Reponse = MsgBox(("ATTENTION ! " & Cellule2 & " va être remplacé par " & Cellule1 & Chr(13) & Chr(13) & _
"voulez vous continuer ?"), 4)
If Reponse = 7 Then GoTo Fin
Range(Cellule1.Address) = Range(Cellule2.Address)
Range(Cellule2.Address) = Temp
''''''''''ANNULE l'opération et refait la manip inverse si annuler = oui!
Reponse = MsgBox("Les cellules ont été inversées !" & Chr(13) & Chr(13) & "Voulez-vous ANNULER l'opération ?", 4)
If Reponse <> 7 Then
Range(Cellule2.Address) = Range(Cellule1.Address)
Range(Cellule1.Address) = Temp
End If
Fin:
Union(Range(Cellule1.Address), Range(Cellule2.Address)).Interior.ColorIndex = 0
Set Cellule1 = Nothing
Set Cellule2 = Nothing
End SubMytå
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonjour au Québec et merci Mytä ,
un seul mot : BRAVO !
Je tournais autour de la solution, mais sans conclure.
Je vais pouvoir petit à petit convertir mes fichiers. Car cet Exemple contient pas mal de
fonctions types.
Pour un premier jet , c'est encourageant !
à+ pour d'autres questions certainement .
Bien amicalement..........Claude.
PS: à ce stade , je ne vois pas le petit bouton "RESOLU" !
Salut Claude et le forum
Au plaisir de se rencontrer sur d'autres ficelles.
Mytå