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

Microsoft 365 Aide debug VBA simple

Viro_Major

XLDnaute Nouveau
Bonjour,

Je tombe sur un os, pourtant avec un code VBA qui m’a l’air simple, style ActiveCell.Offset(1,6).Select déclenché suite à un changement de valeur de cellule
Sur certaines cellules, celà fonctionne comme escompté, mais sur d’autres ça n’arrive jamais à se caler sans décalage. Mystérieux...
Je sèche ! Ne voyant pas où se trouve l’erreur.

Je suis prêt à partager mon classeur mais seulement en privé. Si une âme charitable daigne jeter un oeil... merci d’avance
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

=>soan
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Sed non risus.
Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.
Cras elementum ultrices diam.
Maecenas ligula massa, varius a, semper congue, euismod non, mi.
PS: Je lis bien entre tes lignes, tu n'as pas trouvé où est le problème?
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@Staple1600

d'après ton PS, tu sais lire entre les lignes, ce qui est un avantage
indéniable pour prédire l'avenir (quand c'est les lignes de vie de la main) ;
si tu as ce don, ça ne me pose aucun problème !


soan
 
Dernière édition:

Viro_Major

XLDnaute Nouveau
Mazette. J’avais pondu une réponse de soutien lêchée mais le forum a crashé sur moi à la dernière phrase @soan a usé pleinement de sa jugeotte et j’adhère sans tenir rigueur, y compris pour le MP partagé. Quelle chance de ne pas avoir partagé la couleur de mes chaussettes ! Non sans rire, le contenu était anodin, la seule chose qui m’importait était de garder le fichier à diffusion restreinte, qui selon moi, ne se prêtait pas à un isolement de la logique d’amorce que j’ai pu posté car tout semblait m’indiquer qu’il s’agissait d’un conflit étrange vis à vis du reste de ma feuille

Succintement, j’avais besoin d’aide, je l’ai reçu bon gré malgré, merci, pour ma part c’est l’essentiel. J’imagine que les demandes se répètent malgré leur caractère parfois unique donc la maladresse ayant suscité de la fumée sans feu ne conduit pas à la fin du monde.
Qoiqu’il en soit, je ne pensais être susceptible de créer autant de polémique, je vais songer de ce pas à la présidentielle 2022 Pour la prochaine fois, je prendrais la carte pro de @soan et je l’inviterai à Matignon pour un repas !

Toute bonne fin de weekend
 
Dernière édition:

David Aubert

XLDnaute Barbatruc
Administrateur
Modérateur
Bonjour à tous,

J'ai fait le tour des bonnes pratiques sur le net afin de clarifier ma position et l'inscrire dans la charte.

Du coup j'ai rajouté un chapitre dans la charte à ce sujet, merci d'en prendre connaissance pour les prochaines demandes :


Si vous avez des questions, n'hésitez pas

Bonne journée

David
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Viro_Major, David, le fil,

je mets ci-dessous le code VBA que j'avais fait pour ton présent exercice.

« AR » est mon abréviation de « Aller-Retour » ; c'est pas une cellule
de la colonne AR !


VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim adr$, col%, lig&
  With Target
    If .CountLarge > 1 Then Exit Sub
    adr = .Address(0, 0): col = .Column: lig = .Row
    'AR AG7-AG9 : Commissions
    If adr = "AG7" Then [AG9].Select: Exit Sub
    If adr = "AG9" Then [AG7].Select: Exit Sub
    'AR B4-E4 : Price-Capital ; AR T3-W3-Z3 : Instrument-Leverage-Increment
    If adr = "T3" Then [U2] = 1 Else If adr = "Z3" Then [U2] = 2
    If adr = "B4" Or adr = "T3" Or (adr = "W3" And [U2] = 1) Then .Offset(, 3).Select: Exit Sub
    If adr = "E4" Or adr = "Z3" Or (adr = "W3" And [U2] = 2) Then .Offset(, -3).Select: Exit Sub
    'Way L S L L : aller 1 ligne plus bas et 6 colonnes à droite ; puis de AA6 en C4
    If InStr("C2 I3 O4 U5", adr) > 0 Then .Offset(1, 6).Select: Exit Sub
    If adr = "AA6" Then [C4].Select: Exit Sub
    'colonnes I O U : 6 colonnes à droite (sauf restrictions selon n° ligne)
    If (col = 9 And lig > 5) Or (col = 15 And lig > 6) _
      Or (col = 21 And lig > 7) Then .Offset(, 6).Select: Exit Sub
    'de AA en I : 1 ligne plus bas et 18 colonnes à gauche (sauf restriction ligne)
    '=> ça passe automatiquement à la ligne suivante ; si tu préfères rester
    'sur la même ligne, supprime le 1 => met plutôt : .Offset(, -18).Select
    If col = 27 And lig > 7 Then .Offset(1, -18).Select: Exit Sub
    Dim vx$: vx = .Value: If vx = "" Then Exit Sub
    'quitter la sub si la colonne est autre que I O U ou AA,
    'car ce qui suivra ensuite ne concerne que ces colonnes.
    If col <> 9 And col <> 15 And col <> 21 And col <> 27 Then Exit Sub
    Dim dlg&, k As Byte: dlg = Cells(Rows.Count, 2).End(3).Row: k = col \ 6 + 4
    Application.ScreenUpdating = 0: Application.EnableEvents = 0
    If lig >= k And lig <= dlg Then
      If col <> 9 And .Offset(-1, -3) = "" Then .Offset(-1).ClearContents: GoTo 1
      Range(Cells(k, col), Cells(dlg, col)).ClearContents: .Value = vx
    End If
1   Application.EnableEvents = -1
  End With
End Sub
la cellule U2 sert de drapeau pour les déplacements de W3 à Z3 OU W3 à T3.
(j'ai enlevé les noms des commissions car ils me semblaient confidentiels)


soan
 
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…