Macro decallage cellule si

Bonjour tout le monde,
bon me voilà avec une demande un peu tordu je vais donc tenter d’être le plus précis possible quand à ma demande et utiliser des exemples simples,j’ai en ligne 1 des dates qui se suivent, les week-end se mettent en couleur,en dessous j’ai 2 lignes identiques, qui s’importe depuis un autre onglet, que je vais appeler Prévisionnel (ligne 2) et Réel (ligne 3) ensuite j’ai un USF avec une ComboBox, un CommandButton et des OptionButton, donc je tape un numéro dans ma ComboBox, je coche une de mes OptionButton je clic sur mon CommandButton, là, ma macro cherche le numéro le trouve puis cherche la date du jour en ligne 1 et sélectionne la cellule de la ligne 3 (réel) dans la même colonne, puis selon l’OptionButton coché change le format de la cellule sélectionnée en vert ou rouge ou orange. Voilà le déroulement de ma macro actuelle, mais je voudrai que si par exemple je coche l’OptionButton qui formate rouge alors décaler toute la ligne d’une cellule, certes pour ça il suffirait d’insérer une cellule, mon problème c’est que je voudrai que quand en ligne 1 (date) il y ai un samedi que là, la ligne se décale de 2 et ce chaque fois qu’il y a un samedi j’espère que mon explication est compréhensible . . .si ce n’est pas le cas alors je ferai passer mon fichier.

Voici le code de USF :

Private Sub UserForm_Initialize()

datesaisie = Day(Now) & "/" & Month(Now) & "/" & Year(Now) ' j'inscris la date sans l'heure
NumofModif.SetFocus

End Sub
Sub modifier_Click()

Dim b As Long, a As Long, c As Variant
Dim d As Date

a = 1
b = NumofModif
c = 4
d = datesaisie

Do 'je cherche mon numero d'OF dans la colo A
a = a + 1
Loop Until Application.Cells(a, 1) = b

Do 'je cherche la date saisie (datesaisie) sur la ligne du N° d'OF trouvé
c = c + 1
Loop Until Application.Cells(a, c) = d

Application.Cells(a + 2, c).Select 'Je séléctionne la cell

If Recu = True Then
ActiveCell.Select
With Selection.Interior
.ColorIndex = 5
.Pattern = xlSolid
End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders.LineStyle = xlContinuous
ElseIf NonReçu = True Then
ActiveCell.Select
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid

End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders.LineStyle = xlContinuous

ElseIf Retard = True Then
ActiveCell.Select
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders.LineStyle = xlContinuous
ElseIf Envoye = True Then
ActiveCell.Select
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
With Selection.Borders(xlDiagonalDown)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders.LineStyle = xlContinuous

End If

Unload Modification

End Sub


--
MERCI A CCM à déclarer source d'intéret public . .. .. pensez à marquer vos topic résolus quand c'est le cas .. . . .
Configuration: asus P5V800 / P4 2,8 Ghz / 1,5 Go Windows XP FireFox / IE 7

35 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Une macro Excel lit la date et sélectionne la cellule de la colonne Réel correspondant au numéro saisi dans une ComboBox, puis colore cette cellule selon l'OptionButton activé en gérant un décalage. Le besoin est d’ajouter un décalage de ligne lorsque la date de la ligne 1 tombe un samedi, et ce décalage doit s’appliquer à chaque occurrence de samedi. Des échanges évoquent aussi des difficultés liées à des versions Excel anciennes (2002), des soucis de références VBA et des questions sur ce que signifie exactement décaler une ligne. En pratique, un lien de test et des conseils pour vérifier les références et tester une version alternative sont mentionnés comme éléments utiles, notamment pour contourner des blocages liés à l’éditeur.

Bobot (l’IA à votre service)
  1. une question que voulez-vous dire par "neutraliser le code" ? verouillé par mot de passe?

    ah et euuuh oups pardon j'ai commi une erreur je n'ai pas testé ce dernier fichier du post 30 mille excuses . . .j'ai eu une petite confusion, je teste ç a ce soir et vous tiens au courant excusez moi (ponpon et le pingou)

    et je n'ai pas voulu dire que le code lui meme pose problème mais les modif que j'y fais . . . mais bon là j'ai fais une erreur donc il faut que je teste le fichier du post 30 pour savoir ce qu'il en est.

    Encore merci pour tous vos efforts messieurs.

    1. Bonjour,
      C’est parfait (bonjour Le Pingou et merci), comme j’ai neutralisé mon code dans la version du poste 30, cela veut dire que le problème ne vient pas de mon code.
      1. Bonjour, oui j'ai essayé les 2 derniers qu'il a posté les 2 pose le meme problème . . .je pense que c'est le code qui pose problème sur ma version d'ecxel (2002) ou je fais une erreur en modifiant le code quand la macro s'arrete sur certaines variables du code de ponpon . . .
        1. certe gbinforme je suis complétement d'accord j'ai surement un problème dans le code mais lequel ? ? ? . . . ? ? ? :)
          1. Bonjour informatifien,
            Avez-vous essayé le fichier que ponpon (bonjour) vous a proposé au poste 30 ?
        2. Contributeur
          bonjour

          .le problème est seulement sur ce fichier . . . .:s etrange n'est ce pas

          L'étrange relève d'un autre domaine que l'informatique car ce qui serait considéré comme étrange en informatique c'est surtout l'erreur humaine qui le provoque et probablement que ton classeur n'est pas tout net et comporte des données, des formules et/ou du code qui ne sont pas corrects.
          1. Ctrl + m pour lancer le menu, ok j'essayerai ça ce soir vu que toujours pas cijoint au boulot :s
            1. Bonjour,
              La version que j’ai mise à disposition au poste 18 le 25 novembre fonctionne correctement.
              Je constate qu’il n’y a aucun bouton de commande dans le fichier.
              Comment déclenchez-vous les procédures ?
              Juste pour voir, essayer cette version pour voir si l’erreur se reproduit : http://www.cijoint.fr/cjlink.php?file=cj200912/cijd8Jyv63.xls .
              1. par contre j'ai du nouveau j'ai le fichier en zip donc j'ai supprimé l'autre, je dézzipe de nouveau j'arrive à lancer la macro mais j'ai une erreur : "erreur de compilation projet ou bibliothèque introuvable" et ce, à la ligne :

                sd = 3 ' valeur du saut samedi / dimanche
                pensant que c'est un problème de variable non déclarée je la déclare . . . sd as long

                je remet la macro en lecture et re le meme message mais cette fois sur: CutCopyMode = False enfin seulement sur cutcopymode. . . .

                Je ferme mon fichier et là quand je le réouvre c'est à ce moment là qu'il bug avec la DLL, je viens de faire deux fois la manipulation en supprimant le fichier et en le redezzipant. . .le problème est seulement sur ce fichier . . . .:s etrange n'est ce pas :((

                1. Salut, gbinforme merci pour l'info, ton inputbox remplace quel controle? les combobox ? ou textebox?

                  pour ta ligne de commande je l'ais tester comme ecrit dans le post dont j'ai mi le lien message 25 mais sans résultat . . .
                  1. Contributeur
                    bonjour

                    Le problème sur le contrôle RefEdit avec un objet UserForm a des explications d'origine :

                    https://support.microsoft.com/fr-fr/help/213776 (traduction automatique)

                    Si tu as cette erreur avec la DLL "REFEDIT.DLL" présente dans ..\Microsoft Office\OFFICE..\, selon ta version, c'est sans doute un souci dans le registre que tu peux corriger (avec les précautions d'usage !!!) avec :

                    menu démarrer , exécuter :

                    regsvr32 "C:\Program Files\Microsoft Office\OFFICE11\REFEDIT.DLL"

                    en mettant bien sûr la bonne version de ton poste.

                    Lorsque l'on touche au registre, c'est l'utilisateur qui prend le risque et l'assume.

                    On peut aussi éviter d'utiliser ce contrôle avec un inputbox type 8 : chacun choisit...
                    1. Bonjour gbinforme,
                      Merci de votre réponse dont je vais en profité.
                      Bonne journée.
                  2. Bonjour,
                    Etrange se problème car les procédures sont compatibles pour les versions 1997 et plus.
                    Est-il possible de connaitre le nom de la [DLL] manquante ?
                    1. Salut, bon j'ai un problème j'ai toujours la même version d'ecxel sur mon nouveau poste mais quand j'ai voulu ouvrir le fichier, j'ai la dll de refedit manquante, mais seulement sur ce fichier. . . un collègue a eu le meme problème la semaine dernière ça viens apparement de variable dans le code qui poseraient problème. .. .donc il faut que je retélécharge le fichier depuis chez moi pffff c'est pénible , je suis désolé ponpon . . . .:( de pas pouvoir être plu réactif mais celà dis vu le résultat que tu as laissé pour test c'est bien ce que je cherché. . . .
                      1. Bonjour,
                        L’information est dans la procédure [Sub modifier_Click()] de la feuille [Modification] , note explicative [' [li=35] écrire sur la ligne 35 pour test] sur la ligne concernée.
                        Chercher cette ligne (presque en fin de procédure):
                        ActiveSheet.Paste Destination:=Cells(35, co + s + sd) ' [li=35] écrire sur la ligne 35 pour test
                        Il vous suffit de remplacer la valeur [35] par la variable [li] :
                        ActiveSheet.Paste Destination:=Cells(li, co + s + sd) ' [li=35] écrire sur la ligne 35 pour test
                        1. Bonjour ponpon,

                          je m'excuse pour le retard pris pour te répondre . . . .mais j'ai changé de place à mon boulot donc nouveau PC, nouvelle installation etc . .. désolé :(

                          je n'avais donc pas eu le temps de vérifier ta macro, je n'arrive pas à la faire marcher car partant de mon USF il ne trouve pas la ligne qui fonctionne pour ton test, mais à voir le décallage qu'il y a , c'est exactement ce qu'il me fallai, par contre comment dois je faire pour adapter ton code pour que celà fonctionne avec les bonnes lignes?
                          1. Bonjour,
                            En marge, concernant : erreur objet de bibliothèque introuvable , se n’est pas une erreur imputable à la version Excel mais certainement un problème de références VBA.Bonne journée.
                            1. Bonjour,

                              merci encore pour votre patience, car pas facile de suivre un problème ne pouvant evoluer que le soir,j'ai travailler ma macro sur excel 2002 voilà pour l'info de ma version, et le soir je suis sur 2003 j'ai donc aussi des problèmes de controle quand je telecharge le fichiers de chez moi décidement tou ça complique beaucoup . . .donc je regarderai votre dernière version du fichier ce soir et vous tiens au courant . . .ce qui me semble bizarre c'est que j'ai crée le fichier rar et le zip à partir du meme fichier xls . . . .etrange. . .
                              1. Bonjour,
                                Suite.
                                Il y a un problème avec les références de l’éditeur VBA. Faite Alt+F11 et dans la barre des menus, sur Outils et clic Références … Contrôler si toutes les références cochées sont présentes … Si le mot [Manquant] se trouve devant le nom (probablement [Microsoft Office XP Web Components], décoché la case.
                                Fermer et enregistrer le fichier.
                                J’attends vos nouvelles
                                1. Bonjour,
                                  Eh bien, j’ai tout tranféré et le contrôle [Calendrier] de la référence [Microsoft Calendar Control 2007] est présent.
                                  Tout fonctionne correctement selon ma procédure.
                                  Je vais de se pas voir votre courriel.
                                  • 1
                                  • 2