Problème Code VBA et formules

Loisel

XLDnaute Nouveau
Bonjour le forum,

Grâce à l'aide de l'un de vous, j'ai pu mettre en forme le code vba dans le fichier joint.

Mais lors du lancement de la macro instruction, si les conditions sont respectées, à l'inverse les données saisies dans les colonnes désignées sont systématiquement supprimées.

Ce que je voudrais : c'est avoir simultanément la recherche des conditions inscrites dans la macro tout en conservant les données existantes dans tous les autres cas.

Vous trouverez dans le fichier 2 onglets : l'un tab sur lequel agit la macro et l'autre tableau souhaité.

Quelqu'un parmi vous pourrait-il m'apporter de l'aide à nouveau ?
 

Pièces jointes

  • code vba.xlsm
    46.5 KB · Affichages: 53
  • code vba.xlsm
    46.5 KB · Affichages: 61
  • code vba.xlsm
    46.5 KB · Affichages: 60
Dernière édition:

moustic54

XLDnaute Occasionnel
Re : Problème Code VBA et formules

Bonjour Loisel, bonjour François

Je suis novice mais il me semble qu'il ne soit pas approprié de mettre ton code sur la feuille "tab".
Les pro d'Excel pourront te dire ce qu'ils en pensent.
J'ai repris ton tableau que j'ai renommé Test new (le code se trouve sur cette nouvelle feuille) et j'ai mis également en vert les cellules sur lesquelles "wwww" doit apparaître.
Tu pourras vérifier le bon fonctionnement du code en les supprimant puis en cliquant à nouveau sur le bouton depuis ta feuille lanceur de macro.

Attention : je ne suis pas un pro et le code est lent lors de son exécution. J'ai testé sur un tableau de plus de 600 lignes :eek:

J'espère, pour toi, que ton post attirera les pro d'Excel comme Chris, Modeste, JP .... qui pourront sans aucun doute améliorer le code et le rendre beaucoup plus fluide.


A +
 

Pièces jointes

  • code vba - 2.xlsm
    62.3 KB · Affichages: 39

Loisel

XLDnaute Nouveau
Re : Problème Code VBA et formules

Bonjour à tous

Un grand merci moustic54 et gosselien de m'avoir répondu.

Moustic54, le monde des codes m'est inconnu donc je ne suis pas une pro non plus :eek:.
Je vais regarder attentivement vos propositions.

Gosselien j'ai pu voir que tu avais mis ton code dans un module mais comment lui as-tu indiqué que le code devait s'exécuter sur la feuille Tab ?
Sans vouloir abuser de ton temps, gosselien pourrais-tu mettre des commentaires, je ne comprends pas comment ce code peut s'appliquer aux colonnes concernées sans les désigner alors que les conditions sont différentes selon le cas :confused:
 
Dernière édition:

gosselien

XLDnaute Barbatruc
Re : Problème Code VBA et formules

Voilà...

Option Explicit

Sub Boucler()
' https://www.excel-downloads.com/threads/probleme-code-vba-et-formules.233930/

' ajout de la feuille où il faut exécuter le code
Sheets("tab").Select
Dim Lastrow As Integer, Maxcol As Integer, I As Integer, J As Integer
Lastrow = Range("H65000").End(xlUp).Row ' dernière ligne en colonne H
Maxcol = 39 ' ton tableau semble s'arrêter en colonne 39
For I = 2 To Lastrow ' on commence en ligne 2
For J = 31 To Maxcol ' on commence en colonne 31
If Cells(I, J) = "" Then ' si la cellule est vide
Cells(I, J).FormulaR1C1 = "=IF(AND(RC[" & 8 - J & "] =""agence"",OR(RC[" & 6 - J & "]=""inter"",RC[" & 6 - J & "]=""t/s"",RC[" & 6 - J & "]=""liens"",RC[" & 6 - J & "]=""cdr"")),""wwww"","""")"
Else ' si occupée, on passe à la suivante
GoTo suivant1
End If
suivant1:
Next J
Next I
End Sub

' EXPLICATION de la formule
' Cells(I, J).FormulaR1C1 = "=IF(AND(RC[" & 8 - J & "] =""agence"",OR(RC[" & 6 - J & "]....
' en cellule I, J la ligne est équivalente à I et la position de la colonne
' est de 8 (colonne du mot "agence")-j donc: 8-31 = -23 / 8-32 = -24 8-33 = -25 etc...donc la colonne
' change dans la formule en restant au même rapport vis à vis de "agence"
'
 

Loisel

XLDnaute Nouveau
Re : Problème Code VBA et formules

Gosselien,

Nous partons du principe : si la cellule est vide mais les conditions de mon tableau ne sont pas celles-ci :confused:

Conditions :

si colonne H = agence et colonne F = Inter ou t/s
alors les colonnes AE AF AG AH AL seront égales à WWWW

si colonne H = agence et colonne F = brun
alors les colonnes AG AH AI AJ AK AL AM seront égales à WWWW

si colonne H = agence et colonne F = liens
alors les colonnes AE AF AI seront égales à WWWW

si colonne H = agence et colonne F = cdr
alors les colonnes AE AG AH AI AJ AK AL AM seront égales à WWWW


ou si l'on prend par colonne , par exemple la colonne AE les conditions sont
si H = agence et F = cdr ou F = liens ou F = Inter ou F = t/s
alors les cellules de la colonne AE = WWWW

Je ne sais pas comment le mettre en forme dans le code que vous m'indiquez gosselien :confused:
 

Si...

XLDnaute Barbatruc
Re : Problème Code VBA et formules

salut

une autre proposition, sans boucle donc plus rapide et à partir de la formule donnée (liens ou lienx ?)
VB:
Sub MAJ1_Click()
  Dim P As Range
  Set P = Range("AE2:AM" & Cells(Rows.Count, 6).End(xlUp).Row)
  On Error Resume Next
  P.SpecialCells(xlCellTypeFormulas) = ""
  P.SpecialCells(4).FormulaR1C1 = _
        "=IF(AND(RC8=""agence"",OR(RC6=""Inter"",RC6=""t/s"",RC6=""liens"",RC6=""cdr"")),""wwww"","""")"
End Sub

nota : code commenté dans le fichier joint
 

Pièces jointes

  • formule VBA.xlsm
    30.6 KB · Affichages: 34

Loisel

XLDnaute Nouveau
Re : Problème Code VBA et formules

Bonjour Si ......

En effet, votre code est beaucoup plus rapide ainsi :)
Merci aussi pour les explications associées.

Toutefois sauf erreur de ma part, votre proposition comme celle de Gosselien envisage les mêmes conditions sur la totalité des colonnes AE à AM.
Or en ce qui me concerne selon la colonne sus-citée les conditions à prendre en compte sont variables. :(

Je vous mets ci-dessous les conditions envisagées selon la colonne (de AE à AM) :

Colonne AE
si H = agence et F = inter ou t/s ou liens ou cdr alors AE = wwww

Colonne AF
si H = agence et F = inter ou t/s ou liens alors AF = wwww

Colonne AG
SI H = agence et F = inter ou t/s ou brun ou cdr alors AG = wwww

.........

Ces mêmes conditions reprises selon un autre principe

Conditions :

si colonne H = agence et colonne F = Inter ou t/s
alors les colonnes AE AF AG AH AL seront égales à WWWW

si colonne H = agence et colonne F = brun
alors les colonnes AG AH AI AJ AK AL AM seront égales à WWWW

si colonne H = agence et colonne F = liens
alors les colonnes AE AF AI seront égales à WWWW

si colonne H = agence et colonne F = cdr
alors les colonnes AE AG AH AI AJ AK AL AM seront égales à WWWW
 

Loisel

XLDnaute Nouveau
Re : Problème Code VBA et formules

Bonsoir à tous

Je reviens vers vous car je ne suis pas arrivée à mettre en forme vos codes pour répondre aux différentes conditions énoncées dans mes post.

Moustic54, votre code fonctionne mais j'ai mis plus de 6 mn après avoir lancé votre macro avant d'avoir à nouveau la main sur le fichier :(

Gosselien et Si, n'est-il pas possible de modifier les macro transmises pour que toutes les conditions, énoncées plus haut, puissent être prises en compte :confused:
Je suis perdue. En tentant de le faire je n'ai obtenu que des erreurs dont l'une = 400 :confused: :confused:

A défaut, pourriez-vous, s'il vous plait, améliorer le code de Moustic54 beaucoup trop lent pour pouvoir être utilisé, si cela est possible bien entendu ?

Merci d'avance pour votre aide dont j'ai bien besoin... :eek:
 
Dernière édition:

gosselien

XLDnaute Barbatruc
Re : Problème Code VBA et formules

Je retente en piquant le code de Si.... (j'espère qu'il ne m'en voudra pas)
il manque surement quelque chose mais tu pourras peut être faire la suite :)

Sub Autre() ' code de Si...
' https://www.excel-downloads.com/threads/probleme-code-vba-et-formules.233930/
'
Dim P As Range
Set P = Range("AE2:AE78") ' & Cells(Rows.Count, 6).End(xlUp).Row)
P.Interior.ColorIndex = 26
On Error Resume Next
P.SpecialCells(xlCellTypeFormulas) = ""
P.SpecialCells(4).FormulaR1C1 = _
"=IF(AND(RC8=""agence"",OR(RC6=""Inter"",RC6=""t/s"",RC6=""liens"",RC6=""cdr"")),""wwww"","""")"

Set P = Range("AF2:AF78")
P.Interior.ColorIndex = 27
On Error Resume Next
P.SpecialCells(xlCellTypeFormulas) = ""
P.SpecialCells(4).FormulaR1C1 = _
"=IF(AND(RC8=""agence"",OR(RC6=""Inter"",RC6=""t/s"",RC6=""liens"")),""wwww"","""")"

Set P = Range("AG2:AG78")
P.Interior.ColorIndex = 28
On Error Resume Next
P.SpecialCells(xlCellTypeFormulas) = ""
P.SpecialCells(4).FormulaR1C1 = _
"=IF(AND(RC8=""agence"",OR(RC6=""Inter"",RC6=""t/s"",RC6=""brun"",RC6=""cdr"")),""wwww"","""")"

End Sub
 

Loisel

XLDnaute Nouveau
Re : Problème Code VBA et formules

Re

Gosselien, moi aussi j'ai repris le code de Si mais contrairement à vous qui savez ce que vous écrivez, ce n'est pas mon cas :eek:

Je pensais donc qu'il fallait changer son code

Code:
Sub MAJ1_Click()
   Dim P As Range
   Set P = Range("AE2:AM" & Cells(Rows.Count, 6).End(xlUp).Row)
   On Error Resume Next
   P.SpecialCells(xlCellTypeFormulas) = ""
   P.SpecialCells(4).FormulaR1C1 = _
         "=IF(AND(RC8=""agence"",OR(RC6=""Inter"",RC6=""t/s"",RC6=""liens"",RC6=""cdr"")),""wwww"","""")"
End Sub

En ajoutant à chaque fois une nouvelle lettre pour "range" de chaque colonne :confused:
donnant ainsi :
Dim P as Range
Set P = range ("AE2: AE) ...... --> ici ne n'avait pas mis de n° de lignes, le tableau étant évolutif, je préférais prendre la colonne AE dans sa totalité

puis
Dim Q as Range
Set Q = range ("AF2 : AF) ..........

Pour l'avoir essayer, je peux vous assurer qu'Excel n'aime pas beaucoup "ce dialecte" :eek:
 
Dernière édition:

Loisel

XLDnaute Nouveau
Re : Problème Code VBA et formules

Entendu Gosselien

Ok...
on peut aller chercher la dernière cellule de la colonne H de cette manière alors :

Dim Last As Long
Last = Range("H65000").End(xlUp).Row
Set P = Range("AE2:AE" & Last)

Pourquoi la colonne H ?
C'est parce qu'il s'agit de la colonne qui contient "agence" c'est-à -dire la condition commune ou critère commun quelque soit la colonne de AE à AM.
Ai-je bien compris ? :eek:

J'ai encore une question :
Code:
Set P = Range("AE2:AE78" & Cells(Rows.Count, 6).End(xlUp).Row)

Cela signifie bien : nombre de ligne pour la colonne 6 (F) jusqu'à la dernière ligne pleine ou renseignée
C'est çà ? Mais pourquoi ne doit-on pas reprendre cette formulation pour les colonnes AF et suivantes ? :confused:
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 326
Messages
2 087 313
Membres
103 513
dernier inscrit
adel.01.01.80.19