Mettre les cellules d'une ligne dans un tableau
Re
Quel nom de module avez-vous donné pour les trois codes ?
Sub TOUT_AFFICHER()
Je n'ai rien changé.
J'ai laissé le code et le module a part.
J'ai conservé l'instruction: Application.Goto Worksheets("ACCUEIL").Range("A1"), True
Voir le pourquoi ci-dessous.
En revanche, je ne l'aI pas mis dans le module DEPLACEMENT.
Faut-il le mettre????
module = TOUTAFFICHER
Sub monter()
et
Sub descendre()
module = DEPLACEMENT
Maintenant si le bouton Tout afficher supposait d'afficher le tableau entier avec la ligne 4, cela peut se faire. Dites-moi si intérêt
Votre principe de flèche pour monter ou descendre m'a donné l'idée de mettre une flèche sens gauche à la place du bouton TOUT AFFICHER.
De la-dessus, je me suis dit, pourquoi aller en bas à droite et cliquer sur la flèche windows pour aller à droite. (image que je vous ai jointe dans post précedent) pourquoi ne pas remettre une flèche droite à coté de la gauche.
De la dessus, j'ai "pompé" votre code pour créer une flèche avec le code pour aller à droite.
Il faut dire que je suis assez content de moi puisque cela fonctionne.
Je conserve toujours la fonction du bouton TOUT AFFICHER pour le cas ou je souhaite revenir directement en A1.
Sub ALLER_GAUCHE_Cliquer()
Dim nbcolumns As Integer
With ActiveWindow
nbcolumns = .VisibleRange.Columns.Count
If .ScrollColumn - nbcolumns <= 0 Then
.ScrollColumn = 1
Else: .ScrollColumn = .ScrollColumn - nbcolumns
End If
End With
If ActiveSheet.Protect = False Then ActiveSheet.Protect
End Sub
Sub ALLER_DROITE_Cliquer()
Dim nbcolumns As Integer
With ActiveWindow
nbcolumns = .VisibleRange.Columns.Count
If .ScrollColumn + nbcolumns <= 0 Then
.ScrollColumn = 1
Else: .ScrollColumn = .ScrollColumn + nbcolumns
End If
End With
If ActiveSheet.Protect = False Then ActiveSheet.Protect
End Submodule = DEPLACEMENTHORIZONTAL
J'ai renommer TOUT AFFICHER par AFFICHER DÉBUT.
Bonne réception.
Votre principe de flèche pour monter ou descendre m'a donné l'idée de mettre une flèche sens gauche à la place du bouton TOUT AFFICHER.
Ok pour vos flèches c'est à vous de voir.
De mon coté j'utilise les fonctionnalités d'excel avant de mettre des codes qui peuvent être évités si excel le fait de base
Ne compliquez pas, mettez tous ces codes dans un seul module que vous appelez "Deplacement" par exemple.
Vous devez absolument alléger. Sans quoi cela devient une usine à gaz et là avec Excel on y est très vite et ne s'y retrouve plus.
Application.Goto Worksheets("ACCUEIL").Range("A1"), True
Elle ne sert à rien.
Puis éviter les GO TO, cela me fait penser à de la programmation des années 90,
Vous voulez faire quoi avec cette instruction ? Sélectionner la cellule A1 ?
Dans quel code la mettez vous ? le code Toutafficher ?
Je conserve toujours la fonction du bouton TOUT AFFICHER
C'est à dire ? Je ne comprends pas ce que vous faites
Re
Ne compliquez pas, mettez tous ces codes dans un seul module que vous appelez "Deplacement" par exemple.
OK. C'est fait.
J'ai supprimer deplacementhorizontale et j'ai tout mis dans le module deplacement.
Vous voulez faire quoi avec cette instruction ? Sélectionner la cellule A1 ?
Oui. Si par exemple je suis en cellule T366 en cliquant sur AFFICHER TOUT ou maintenant AFFICHER DEBUT, je vais sur la cellule A1
Dans quel code la mettez vous ? le code Toutafficher ?
OUI. Tout à fait.
Je conserve toujours la fonction du bouton TOUT AFFICHER
C'est à dire ? Je ne comprends pas ce que vous faites
Explications au dessus.
Puis éviter les GO TO, cela me fait penser à de la programmation des années 90,
C'est la seule fonction dans mes compétences en vba que je connaisse
Bonne réception.
Bonjour Dan,
Je vais être absent de maintenant jusqu'à lundi milieu d'après midi.
Bonne fin de semaine et bon week end.
Encore merci pour ce que vous faites pour moi.
Vous me direz si je dois mettre résolu pour clore ce sujet!
Bonne réception.
Cordialement.
J'ai supprimer deplacementhorizontale et j'ai tout mis dans le module deplacement.
Ok. Je résume pour ce module DEPLACEMENT, on a donc les codes ci-dessous
-Sub monter()
-Sub descendre()
-Sub ALLER_GAUCHE_Cliquer()
-Sub ALLER_DROITE_Cliquer()
-Sub Toutafficher()
Vous confirmez ?
Oui. Si par exemple je suis en cellule T366 en cliquant sur AFFICHER TOUT ou maintenant AFFICHER DEBUT, je vais sur la cellule A1
OK. Si le bouton Affiche début concerne la visibilité du tableau complet, le code simplifié comme ceci
Sub TOUT_AFFICHER()
Dim nbcolumns As Integer
With ActiveWindow
.ScrollColumn = 1
.ScrollRow = 1
End With
With ActiveSheet
.Range("A1").Select
If .Protect = False Then .Protect
End With
End SubAvec ce code plus besoin de cliquer plusieurs fois pour revenir au tableau complet
Je vous propose de passer aux modules CREER......, qui concernent la feuille Rubrique
Là vous avez une série de module. Chaque module reprend uniquement un code concerné par un bouton placé à droite dans la feuille Formulaire
La modification que je vous ai préparée fait en sorte que vous n'aurez plus qu'un seul Module et un seul code pour tous vos boutons
Pour terminer, j'ai besoin de savoir deux choses à ce sujet :
- Le nom du future module.
- Si vous conservez vos point derrière chaque nom placé dans le bouton. Le plus simple étant de ne pas avoir de point car le code va repérer la correspondance entre le texte dans le bouton et le titre des colonnes en feuille Rubrique
Crdlt
Re
Ok. Je résume pour ce module DEPLACEMENT, on a donc les codes ci-dessous
Vous confirmez ?
OUI. Tout à fait.
OK. Si le bouton Affiche début concerne la visibilité du tableau complet, le code simplifié comme ceci
OK. C'est fait et fonctionne bien.
Pour terminer, j'ai besoin de savoir deux choses à ce sujet :
- Le nom du future module.
RUBRIQUE.
- Si vous conservez vos point derrière chaque nom placé dans le bouton.
Si vous conseillez de ne pas mettre de point, je vous suis.
Vous me direz si je dois mettre résolu pour clore ce sujet!
Je vais être absent de maintenant jusqu'à lundi milieu d'après midi.
Bonne réception.
Cordialement.
Ok. Pour le module RUBRIQUE
Si vous conseillez de ne pas mettre de point, je vous suis.
Ok. Donc là vous pouvez déjà :
- supprimer tous les points sur vos boutons
- Supprimer tous les modules CREER (de mon coté, j'ai juste renommé CREER_NOM en RUBRIQUE et supprimé tous les modules CREER...)
- Creer le module RUBRIQUE
Je vous donne le code sous peu
Bah ne mettez pas résolu, à moins que vous vouliez arrêter les modif que je peux vous proposer
Je vais être absent de maintenant jusqu'à lundi milieu d'après midi.
Par des souci. Bon WE à vous
Bonjour Dan.
De retour.
supprimer tous les points sur vos boutons
C'est fait.
Supprimer tous les modules CREER
C'est fait.
Creer le module RUBRIQUE
C'est fait.
renommé CREER_NOM en RUBRIQUE
C'est fait.
Bah ne mettez pas résolu
OK.
Bonne réception.
Bonjour
Vous avez trois choses à effectuer
1. Code Ajout_Rubrique (j'ai donné ce nom au code).
Placez le code dans le modèle Rubrique que vous avez créé
Option Explicit
Sub AJOUT_RUBRIQUE()
Dim metier As String
Dim col As Integer
Dim tb As ListObject
metier = Sheets("FORMULAIRE").Shapes(Application.Caller).DrawingObject.Caption
'metier = Left(metier, Len(metier) - 1) 'ligne à ajouter si point apres texte dans bouton
With Sheets("RUBRIQUE")
On Error Resume Next
col = WorksheetFunction.Match(metier, .Rows(3), 0)
If col = 0 Then MsgBox "Le metier ne semble pas connu ou inexistant en feuille Rubrique", vbCritical, "Rubrique manquante": Exit Sub
On Error GoTo 0
.Visible = True
.Activate
.Unprotect
'selectionner rubrique a modifier
Set tb = .Cells(3, col).ListObject
tb.ListRows(tb.ListRows.Count).Range.Offset(1, 0).Select
'deplacement bouton en rapport a colonne choisie
With .DrawingObjects(1)
.Top = Cells(1, col).Top
.Left = Cells(1, col).Left
End With
End With
Sheets("FORMULAIRE").Visible = False
End Sub2. Code feuille Rubrique : remplacez tous les codes dans la feuille Rubrique par celui-ci
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:AS" & UsedRange.Rows.Count)) Is Nothing Then
Columns("A:AS").AutoFit
'deplacement bouton en rapport a colonne choisie
With DrawingObjects(1)
.Top = Cells(1, Target.Column).Top
.Left = Cells(1, Target.Column).Left
End With
End If
End Sub3. Boutons feuille Formulaire
Attribuez le code Ajout_rubrique à tous les boutons situés à droite dans la feuille Formulaire (sauf probablement les deux boutons du bas)
A chaque fois que vous exécuterez le code Ajout rubrique :
--> le bouton Retour Formulaire dans la feuille Rubrique sera positionné sur la colonne à Modifier. Vous pouvez supprimer le bouton "Retour formulaire" situé à droite dans la feuille Formulaire
--> la cellule sélectionnée sera celle de la colonne concernée par l'ajout. Il vous suffit uniquement d'ajouter l'information dans cette cellule. Vu que vos tableaux sont au format structuré, l'ajout dans la cellule sélectionnée sera automatiquement enregistré dans le tableau structuré.
Faites un test avant de passer au point suivant (il en reste à ce que je vois...
NB : Vérifiez que vous avez aussi supprimé tous les codes se trouvant dans la feuille Formulaire car je ne pense pas vous l'avoir dit avant.
Re,
1. Code Ajout_Rubrique (j'ai donné ce nom au code).
Placez le code dans le modèle Rubrique que vous avez créé
OK fait.
Pour l'instant, je n'ai pas fait les points 2 et 3.
En exécutant cette macro ligne par ligne, message erreur:
metier = Sheets("FORMULAIRE").Shapes(Application.Caller).DrawingObject.Caption
Erreur d'exécution '-2147352571(80020005)':
L'élément portant ce nom est introuvable.
Ca, c'est une chose.
Je passe à la deuxième opération à effectuer:
2. Code feuille Rubrique : remplacez tous les codes dans la feuille Rubrique par celui-ci
Là, je ne comprend pas l'opération à faire. Dans la feuille rubrique, je n'ai que des tableaux hormis un code: RETOUR FORMULAIRE.
A CE NIVEAU JE N'AI RIEN EFFECTUE.
3. Boutons feuille Formulaire
Attribuez le code Ajout_rubrique à tous les boutons situé à droite dans la feuille Formulaire
Donc en partant de NOM jusqu'à DIVERS 3 il y a 23 boutons "d'entreprise".
J'ai donc attribuer 23 fois Ajout_rubrique à ces 23 boutons.
Est ce correct?
Vous pouvez supprimer le bouton "Retour formulaire" situé à droite dans la feuille Formulaire
Je pense que vous avez voulu dire situé à droite dans la feuille RUBRIQUE.
Si oui, ok pas de problème.
NB : Vérifiez que vous avez aussi supprimé tous les codes se trouvant dans la feuille Formulaire car je ne pense pas vous l'avoir dit avant.
Pour moi vous me l'avez dit pas cette formulation que j'ai effectuée:
- Supprimer tous les modules CREER (de mon coté, j'ai juste renommé CREER_NOM en RUBRIQUE et supprimé tous les modules CREER...)
Est ce bien cela qu'il fallait faire lorsque vous dites: NB : Vérifiez que vous avez aussi supprimé tous les codes se trouvant dans la feuille Formulaire
En revanche lorsque vous dites:
de mon coté, j'ai juste renommé CREER_NOM en RUBRIQUE
Moi dans RUBRIQUE j'ai:
Option Explicit
Sub AJOUT_RUBRIQUE()
Dim metier As String
Dim col As Integer
Dim tb As ListObjectEst ce correct?
En exécutant cette macro ligne par ligne, message erreur:
Erreur d'exécution '-2147352571(80020005)':
L'élément portant ce nom est introuvable.
Oui logique. Vous devez toujours cliquer sur un bouton depuis votre feuille Formulaire, sans quoi vous aurez cette erreur.
Raison pour laquelle je vous ai écrit de lier tous vos boutons à cette macro.
Là, je ne comprend pas l'opération à faire. Dans la feuille rubrique, je n'ai que des tableaux hormis un code: RETOUR FORMULAIRE.
Vous avez un code dans la feuille Rubrique !. Clic droite sur l'onglet Rubrique puis choisir "Visualiser le code"
Donc en partant de NOM jusqu'à DIVERS 3 il y a 23 boutons "d'entreprise".
J'ai donc attribuer 23 fois Ajout_rubrique à ces 23 boutons.
Ok.
Pour moi vous me l'avez dit pas cette formulation que j'ai effectuée:
- Supprimer tous les modules CREER (de mon coté, j'ai juste renommé CREER_NOM en RUBRIQUE et supprimé tous les modules CREER...)
Est ce bien cela qu'il fallait faire lorsque vous dites: NB : Vérifiez que vous avez aussi supprimé tous les codes se trouvant dans la feuille Formulaire
------------------------------de mon coté, j'ai juste renommé CREER_NOM en RUBRIQUE
Vous mélangez modules et codes là....
Les modules CREER .... sont supprimés.
Ok pour avoir renommé le module CREENOM en RUBRIQUE
Pour les codes dans la feuille formulaire, même chose que précédemment --> clic droite sur l'onglet Formulaire puis choisir "visualiser le code" pour accéder à la feuille dans l'éditeur VBA. Là --> supprimer tout.
Re,
J'ai totalement "merdé" dans le post précedent.
Avec toutes mes excuses et merci pour vos explications qui m'ont permis de "raccrocher les wagons".
Voila, tout est fait.
J'ai modifier les noms des boutons de la feuille FORMULAIRE qui ne correspondaient pas aux noms des tableaux de la feuille RUBRIQUE.
Je peux ajouter, supprimer, même me déplacer dans la feuille RUBRIQUE et si je selectionne une cellule en dehors du tableau modifié, le bouton RETOUR FORMULAIRE réapparait "par enchantement".
C'est tout simplement GÉNIAL.
MERCI BEAUCOUP.
Bonne réception.
OK.
Dans votre feuille Formulaire, vous pouvez supprimer la colonne W. Je ne sais pas si vous l'aviez fait mais on en avait discuté
On peut passer aux boutons suivants si vous voulez :
- Visualisation Ligne --> expliquez moi le but
- Suppression ligne
Re
- Visualisation Ligne --> expliquez moi le but
Au lieu de visualiser une ligne horizontalement, j'ai fait un récapitulatif (sans aucune inter action) simplement pour voir les données rentrées concernant cette facture. Cela me donne uniquement un récapitulatif vertical.
Si je m'apercois d'une erreur, je ressort et je vais dans MODIFICATION LIGNE ENTREPRISE.
Pour moi, c'est plus facile qu'une lecture verticale.
- Suppression ligne
Dans ce cas, j'ai prévu la possibilité de supprimer une ligne.
Je vois tout de suite votre question:
POURQUOI SUPPRIMER LA TOTALITÉ d'une ligne alors que vous pouvez la modifier.
Oui mais ca c'est moi.
J'ai prévu de supprimer une ligne.
Mon Dieu mon Dieu. Pardonnez moi.
MDR de votre réaction.
Bonne réception.
Bonjour
Si je m'apercois d'une erreur, je ressort et je vais dans MODIFICATION LIGNE ENTREPRISE.
C'est un peu compliqué.
Pourquoi ne pas ajouter un bouton Modification sur votre feuille Formulaire ?
Une fois que vous visualiser la ligne et que vous voulez la modifier, vous feriez un clic sur ce bouton Modification
Ce bouton serait lié au code Sub Modification_ligne_entreprise()
Dans ce cas, j'ai prévu la possibilité de supprimer une ligne.
Là je n'ai pas compris. Vous visualiser la ligne puis vous la supprimez ?
Si je reprends les deux cas, vous visualiser une ligne puis vous décidez de modifier ou supprimer ?
Bonjour Dan,
Dans ce cas, j'ai prévu la possibilité de supprimer une ligne.
J'ai mis dans ce cas, c'est pour le bouton SUPPRESSION LIGNE ENTREPRISE.
Vous visualiser la ligne puis vous la supprimez ?
Non, pas exactement; Je ne la visualise pas. Je la sélectionne, je demande confirmation que c'est bien cette ligne là qu'il faut supprimer et en cas d'accord, je la supprime.
Je me laisse cette oportunité.
C'est un peu compliqué. (concernant la VISUALISATION LIGNE ENTREPRISE).
OK.
Exact.
Ce qui peut être fait c'est sur le bouton de la feuille ACCUEIL sur le bouton jaune MODIFICATION LIGNE ENTREPRISE,
Rajouter au descriptif de ce bouton:
MODIFICATION OU VISUALISATION LIGNE ENTREPRISE.
Dans la feuille formulaire ce serait toujours le bouton NOIR qui remplirait sa fonction, qu'il y ait modification ou pas.
De cette façon le bouton bleu VISUALISATION LIGNE ENTREPRISE , n'a plus lieu d'être.
Bonne réception.
Ce qui peut être fait c'est sur le bouton de la feuille ACCUEIL sur le bouton jaune MODIFICATION LIGNE ENTREPRISE,
Rajouter au descriptif de ce bouton: MODIFICATION OU VISUALISATION LIGNE ENTREPRISE.
Ok pour ce point. J'ai modifié le fichier
J'ai mis dans ce cas, c'est pour le bouton SUPPRESSION LIGNE ENTREPRISE.....
Non, pas exactement; Je ne la visualise pas. Je la sélectionne, je demande confirmation que c'est bien cette ligne là qu'il faut supprimer et en cas d'accord, je la supprime.
Actuellement le bouton est lié à un code Recapitulatif client. Donc là on supprime le lien.
Je propose ceci :
- Vous sélectionnez la cellule de la ligne en colonne A que vous voulez supprimer
- Vous cliquez sur le bouton Supprimer Ligne entreprise
- Le code vous demande si c'est bien la ligne à supprimer
- SI vous confirmez le code supprime la ligne. cette suppression fait en sorte que le num enreg disparaitra pour l'avenir
Par rapport à cette suppression ne faudrait-il pas conserver ces données supprimées dans une feuille. Utile ou pas ?
Re,
Je propose ceci :
OK.
Par rapport à cette suppression ne faudrait-il pas conserver ces données supprimées dans une feuille.
Merci pour cette proposition, mais NON. Dans mon dossier, je fais deux fois la demande de confirmation de suppression, et
pour moi, je n'ai aucune utilité de conserver une trace de cette suppression.
Bonne réception
Re,
Je propose ceci :
OK.
Par rapport à cette suppression ne faudrait-il pas conserver ces données supprimées dans une feuille.
Merci pour cette proposition, mais NON. Dans mon dossier, je fais deux fois la demande de confirmation de suppression, et
pour moi, je n'ai aucune utilité de conserver une trace de cette suppression.
Bonne réception
Pour la suppression, vous pouvez remplacer votre code Suppression client par celui-ci
Sub SUPPRIMER_UN_CLIENT()
Dim code As Integer
Dim lig As Integer
With Sheets("ACCUEIL").ListObjects(1)
If Not Intersect(ActiveCell, .DataBodyRange) Is Nothing Then
lig = ActiveCell.Row - .HeaderRowRange.Row
code = .DataBodyRange(lig, 1)
If MsgBox("Voulez-vous supprimer l'entreprise " & vbCrLf & _
.DataBodyRange(lig, 3) & " - Num enregistrement " & code, vbYesNo + vbDefaultButton2 + vbCritical, "SUPPRESSION CLIENT") = vbYes Then
.ListRows(lig).Range.Delete
End If
End If
End With
End SubFaites un test.
je n'ai aucune utilité de conserver une trace de cette suppression.
Ok.
Après on peut passer au bouton Classement si vous m'expliquez la fonctionnalité.