OVH Cloud OVH Cloud

modification macro

6 réponses
Avatar
oceanef
Bonjour à tous,

J'ai la macro çi-dessous que je voudrais faire évoluer :

Sub Macro1()
For k = 1 To [Lookup(9^9,saisie!B:B)]
If Sheets("saisie").Cells(k, 2) > 0 Then
For B = k * 10 To k * 10 + 10
If Sheets("saisie").Cells(B, 1) <> "" Then
ligne = ligne + 1
Sheets("devis").Cells(ligne, 1) = Sheets("saisie").Cells(B, 1)
End If
Next
End If
Next
End Sub

Cette macro me recopie, dans ma feuille devis, le texte contenu dans ma
feuille "saisie" à partir de la ligne10 si la valeur de B1(dans feuille
saisie) est sup à 0.

Dans feuille "saisie" j'ai 3 critères:
A1: ELECTRICITE B1: formule de calcul qui donne résultat
A2: PLOMBERIE B2: formule de calcul qui donne résultat
A3: TOITURE B3: formule de calcul qui donne résultat

A10:ELECTICITE
A11 à A29:plusieurs lignes de textes variables (on peut avoir 15 lignes ou
seulement 5 lignes et certaines sont vides)
A30:PLOMBERIE
A31 à A49: plusieurs lignes de textes variables (on peut avoir 15 lignes ou
seulement 5 lignes et certaines sont vides)
A50:TOITURE
A51 à A69: plusieurs lignes de textes variables (on peut avoir 15 lignes ou
seulement 5 lignes et certaines sont vides)

La macro me recopie, dans ma feuille devis, de la ligne A10+10lignes non
vides+ encore 10 lignes non vides. Du coup je me retrouve avec des doublons
et la catégorie "TOITURE" non prise.

Je souhaiterais, que la macro ne résonne pas en quantité de lignes mais à
chaque changement de critères.

EX: Si (B1 >à 0 alors recopie et insère texte (sans les lignes vides) de A10
à A29 (+ saute une ligne pour aérer avec le texte suivant) sinon
rien et teste ligne suivante B2
Si (B2>à 0 alors recopie et insère texte (sans les lignes vides) de
A30 à A49(+saute une ligne pour aérer avec le texte suivant) sinon rien et
teste ligne suivante B3
Si(B3>à 0 alors recopie et insère texte (sans les lignes vides) de A50
à A69 (+saute une ligne pour aérer avec le texte suivant) sinon rien.

merci
océane

6 réponses

Avatar
jps
pour cela, océane, il faut éviter de taper sur le moniteur avec ton
mulot....
jps
PS pardon, océane, de mettre engouffrer dans cette brèche : ce fut, pour
moi, plus facile, hélas!, que de répondre à ta question...

"oceanef" a écrit dans le message de
news:
Bonjour à tous,

Je souhaiterais, que la macro ne résonne pas


Avatar
oceanef
Bonjour jps,

Donc, visiblement, c'est compliqué de faire évoluer cette macro?

océane

"jps" a écrit dans le message de news:
%
pour cela, océane, il faut éviter de taper sur le moniteur avec ton
mulot....
jps
PS pardon, océane, de mettre engouffrer dans cette brèche : ce fut, pour
moi, plus facile, hélas!, que de répondre à ta question...

"oceanef" a écrit dans le message de
news:
Bonjour à tous,

Je souhaiterais, que la macro ne résonne pas





Avatar
Hervé
Salut Océane,
Je ne sais pas si j'ai bien compris, mais teste ceci et dis moi si ça
convient :

Sub Macro1()
Dim FeSaisie As Worksheet
Dim FeDevis As Worksheet
Dim k As Long, ligne As Long
Dim PlageElec As Range
Dim PlagePlomb As Range
Dim PlageToit As Range
Dim PlageCopie As Range

Set FeSaisie = Worksheets("saisie")
Set FeDevis = Worksheets("devis")

With FeSaisie
Set PlageElec = .[A10:A29]
Set PlagePlomb = .[A30:A49]
Set PlageToit = .[A50:A69]
For k = 1 To 3
If .Range("B" & k) > 0 Then
ligne = FeDevis.Range("A65536").End(3).Row + 2
Select Case k
Case 1
Set PlageCopie = PlageElec.SpecialCells(2)
Case 2
Set PlageCopie = PlagePlomb.SpecialCells(2)
Case 3
Set PlageCopie = PlageToit.SpecialCells(2)
End Select
PlageCopie.Copy FeDevis.Range("A" & ligne)
End If
Next k
End With

Set PlageCopie = Nothing
Set PlageElec = Nothing
Set PlagePlomb = Nothing
Set PlageToit = Nothing
Set FeSaisie = Nothing
Set FeDevis = Nothing

End Sub

Hervé

"oceanef" a écrit dans le message news:

Bonjour à tous,

J'ai la macro çi-dessous que je voudrais faire évoluer :

Sub Macro1()
For k = 1 To [Lookup(9^9,saisie!B:B)]
If Sheets("saisie").Cells(k, 2) > 0 Then
For B = k * 10 To k * 10 + 10
If Sheets("saisie").Cells(B, 1) <> "" Then
ligne = ligne + 1
Sheets("devis").Cells(ligne, 1) = Sheets("saisie").Cells(B, 1)
End If
Next
End If
Next
End Sub

Cette macro me recopie, dans ma feuille devis, le texte contenu dans ma
feuille "saisie" à partir de la ligne10 si la valeur de B1(dans feuille
saisie) est sup à 0.

Dans feuille "saisie" j'ai 3 critères:
A1: ELECTRICITE B1: formule de calcul qui donne résultat
A2: PLOMBERIE B2: formule de calcul qui donne résultat
A3: TOITURE B3: formule de calcul qui donne résultat

A10:ELECTICITE
A11 à A29:plusieurs lignes de textes variables (on peut avoir 15 lignes ou
seulement 5 lignes et certaines sont vides)
A30:PLOMBERIE
A31 à A49: plusieurs lignes de textes variables (on peut avoir 15 lignes
ou

seulement 5 lignes et certaines sont vides)
A50:TOITURE
A51 à A69: plusieurs lignes de textes variables (on peut avoir 15 lignes
ou

seulement 5 lignes et certaines sont vides)

La macro me recopie, dans ma feuille devis, de la ligne A10+10lignes non
vides+ encore 10 lignes non vides. Du coup je me retrouve avec des
doublons

et la catégorie "TOITURE" non prise.

Je souhaiterais, que la macro ne résonne pas en quantité de lignes mais à
chaque changement de critères.

EX: Si (B1 >à 0 alors recopie et insère texte (sans les lignes vides) de
A10

à A29 (+ saute une ligne pour aérer avec le texte suivant) sinon
rien et teste ligne suivante B2
Si (B2>à 0 alors recopie et insère texte (sans les lignes vides) de
A30 à A49(+saute une ligne pour aérer avec le texte suivant) sinon rien et
teste ligne suivante B3
Si(B3>à 0 alors recopie et insère texte (sans les lignes vides) de
A50

à A69 (+saute une ligne pour aérer avec le texte suivant) sinon rien.

merci
océane




Avatar
oceanef
Bonsoir Hervé,

Ta macro marche du tonnerre! C'est exactement le résultat voulue! je vais
pouvoir gagner du temps...

Je te remercie
Bonne soirée
Océane

"Hervé" a écrit dans le message de news:
uYR%
Salut Océane,
Je ne sais pas si j'ai bien compris, mais teste ceci et dis moi si ça
convient :

Sub Macro1()
Dim FeSaisie As Worksheet
Dim FeDevis As Worksheet
Dim k As Long, ligne As Long
Dim PlageElec As Range
Dim PlagePlomb As Range
Dim PlageToit As Range
Dim PlageCopie As Range

Set FeSaisie = Worksheets("saisie")
Set FeDevis = Worksheets("devis")

With FeSaisie
Set PlageElec = .[A10:A29]
Set PlagePlomb = .[A30:A49]
Set PlageToit = .[A50:A69]
For k = 1 To 3
If .Range("B" & k) > 0 Then
ligne = FeDevis.Range("A65536").End(3).Row + 2
Select Case k
Case 1
Set PlageCopie = PlageElec.SpecialCells(2)
Case 2
Set PlageCopie = PlagePlomb.SpecialCells(2)
Case 3
Set PlageCopie = PlageToit.SpecialCells(2)
End Select
PlageCopie.Copy FeDevis.Range("A" & ligne)
End If
Next k
End With

Set PlageCopie = Nothing
Set PlageElec = Nothing
Set PlagePlomb = Nothing
Set PlageToit = Nothing
Set FeSaisie = Nothing
Set FeDevis = Nothing

End Sub

Hervé

"oceanef" a écrit dans le message news:

Bonjour à tous,

J'ai la macro çi-dessous que je voudrais faire évoluer :

Sub Macro1()
For k = 1 To [Lookup(9^9,saisie!B:B)]
If Sheets("saisie").Cells(k, 2) > 0 Then
For B = k * 10 To k * 10 + 10
If Sheets("saisie").Cells(B, 1) <> "" Then
ligne = ligne + 1
Sheets("devis").Cells(ligne, 1) = Sheets("saisie").Cells(B, 1)
End If
Next
End If
Next
End Sub

Cette macro me recopie, dans ma feuille devis, le texte contenu dans ma
feuille "saisie" à partir de la ligne10 si la valeur de B1(dans feuille
saisie) est sup à 0.

Dans feuille "saisie" j'ai 3 critères:
A1: ELECTRICITE B1: formule de calcul qui donne résultat
A2: PLOMBERIE B2: formule de calcul qui donne résultat
A3: TOITURE B3: formule de calcul qui donne résultat

A10:ELECTICITE
A11 à A29:plusieurs lignes de textes variables (on peut avoir 15 lignes
ou
seulement 5 lignes et certaines sont vides)
A30:PLOMBERIE
A31 à A49: plusieurs lignes de textes variables (on peut avoir 15 lignes
ou

seulement 5 lignes et certaines sont vides)
A50:TOITURE
A51 à A69: plusieurs lignes de textes variables (on peut avoir 15 lignes
ou

seulement 5 lignes et certaines sont vides)

La macro me recopie, dans ma feuille devis, de la ligne A10+10lignes non
vides+ encore 10 lignes non vides. Du coup je me retrouve avec des
doublons

et la catégorie "TOITURE" non prise.

Je souhaiterais, que la macro ne résonne pas en quantité de lignes mais à
chaque changement de critères.

EX: Si (B1 >à 0 alors recopie et insère texte (sans les lignes vides) de
A10

à A29 (+ saute une ligne pour aérer avec le texte suivant) sinon
rien et teste ligne suivante B2
Si (B2>à 0 alors recopie et insère texte (sans les lignes vides)
de
A30 à A49(+saute une ligne pour aérer avec le texte suivant) sinon rien
et
teste ligne suivante B3
Si(B3>à 0 alors recopie et insère texte (sans les lignes vides) de
A50

à A69 (+saute une ligne pour aérer avec le texte suivant) sinon rien.

merci
océane








Avatar
oceanef
Re-bonsoir Hervé,

Cette macro est fantastique sur du texte rentré en dur par contre elle ne
fonctionne pas quand le texte de la feuille saisie de A10 à A69 est rentré
via des formules. Erreur d'exécution 1004 "pas de cellules correspondantes"
et le débogueur se met sur Set PlageCopie=plageElec....
Je pense qu'il ne reconnaît pas les cellules avec des formules!
C'est grave docteur? Cela se soigne?

Océane




"Hervé" a écrit dans le message de news:
uYR%
Salut Océane,
Je ne sais pas si j'ai bien compris, mais teste ceci et dis moi si ça
convient :

Sub Macro1()
Dim FeSaisie As Worksheet
Dim FeDevis As Worksheet
Dim k As Long, ligne As Long
Dim PlageElec As Range
Dim PlagePlomb As Range
Dim PlageToit As Range
Dim PlageCopie As Range

Set FeSaisie = Worksheets("saisie")
Set FeDevis = Worksheets("devis")

With FeSaisie
Set PlageElec = .[A10:A29]
Set PlagePlomb = .[A30:A49]
Set PlageToit = .[A50:A69]
For k = 1 To 3
If .Range("B" & k) > 0 Then
ligne = FeDevis.Range("A65536").End(3).Row + 2
Select Case k
Case 1
Set PlageCopie = PlageElec.SpecialCells(2)
Case 2
Set PlageCopie = PlagePlomb.SpecialCells(2)
Case 3
Set PlageCopie = PlageToit.SpecialCells(2)
End Select
PlageCopie.Copy FeDevis.Range("A" & ligne)
End If
Next k
End With

Set PlageCopie = Nothing
Set PlageElec = Nothing
Set PlagePlomb = Nothing
Set PlageToit = Nothing
Set FeSaisie = Nothing
Set FeDevis = Nothing

End Sub

Hervé

"oceanef" a écrit dans le message news:

Bonjour à tous,

J'ai la macro çi-dessous que je voudrais faire évoluer :

Sub Macro1()
For k = 1 To [Lookup(9^9,saisie!B:B)]
If Sheets("saisie").Cells(k, 2) > 0 Then
For B = k * 10 To k * 10 + 10
If Sheets("saisie").Cells(B, 1) <> "" Then
ligne = ligne + 1
Sheets("devis").Cells(ligne, 1) = Sheets("saisie").Cells(B, 1)
End If
Next
End If
Next
End Sub

Cette macro me recopie, dans ma feuille devis, le texte contenu dans ma
feuille "saisie" à partir de la ligne10 si la valeur de B1(dans feuille
saisie) est sup à 0.

Dans feuille "saisie" j'ai 3 critères:
A1: ELECTRICITE B1: formule de calcul qui donne résultat
A2: PLOMBERIE B2: formule de calcul qui donne résultat
A3: TOITURE B3: formule de calcul qui donne résultat

A10:ELECTICITE
A11 à A29:plusieurs lignes de textes variables (on peut avoir 15 lignes
ou
seulement 5 lignes et certaines sont vides)
A30:PLOMBERIE
A31 à A49: plusieurs lignes de textes variables (on peut avoir 15 lignes
ou

seulement 5 lignes et certaines sont vides)
A50:TOITURE
A51 à A69: plusieurs lignes de textes variables (on peut avoir 15 lignes
ou

seulement 5 lignes et certaines sont vides)

La macro me recopie, dans ma feuille devis, de la ligne A10+10lignes non
vides+ encore 10 lignes non vides. Du coup je me retrouve avec des
doublons

et la catégorie "TOITURE" non prise.

Je souhaiterais, que la macro ne résonne pas en quantité de lignes mais à
chaque changement de critères.

EX: Si (B1 >à 0 alors recopie et insère texte (sans les lignes vides) de
A10

à A29 (+ saute une ligne pour aérer avec le texte suivant) sinon
rien et teste ligne suivante B2
Si (B2>à 0 alors recopie et insère texte (sans les lignes vides)
de
A30 à A49(+saute une ligne pour aérer avec le texte suivant) sinon rien
et
teste ligne suivante B3
Si(B3>à 0 alors recopie et insère texte (sans les lignes vides) de
A50

à A69 (+saute une ligne pour aérer avec le texte suivant) sinon rien.

merci
océane








Avatar
Hervé
Bonsoir Océane,
Effectivement, SpecialCells(xlCellTypeConstants) ne prend que les cellules
ayant une constante, comme SpecialCells(xlCellTypeFormulas) ne prend que les
cellules ayant une formule mais en plus copie les formules, ce qui
apparemment ne convient pas. Il faut donc passer par une boucle pour tester
chaque cellule de la plage récupérée. Ici j'utilise un tableau car plus
rapide surtout pour coller les valeurs dans la feuille devis. En espérant
t'avoir aidé.

Sub Macro1()
Dim FeSaisie As Worksheet
Dim FeDevis As Worksheet
Dim k As Long, ligne As Long
Dim PlageElec As Range
Dim PlagePlomb As Range
Dim PlageToit As Range
Dim Tbl()
Dim I As Long, J As Long

Set FeSaisie = Worksheets("saisie")
Set FeDevis = Worksheets("devis")

With FeSaisie
Set PlageElec = .[A10:A29]
Set PlagePlomb = .[A30:A49]
Set PlageToit = .[A50:A69]
For k = 1 To 3
If .Range("B" & k) > 0 Then
ligne = FeDevis.[A65536].End(3).Row + 2
Select Case k
Case 1
For I = 1 To PlageElec.Count
If PlageElec(I) <> "" Then
ReDim Preserve Tbl(0 To J)
Tbl(J) = PlageElec(I)
J = J + 1
End If
Next I
Case 2
For I = 1 To PlagePlomb.Count
If PlagePlomb(I) <> "" Then
ReDim Preserve Tbl(0 To J)
Tbl(J) = PlagePlomb(I)
J = J + 1
End If
Next I
Case 3
For I = 1 To PlageToit.Count
If PlageToit(I) <> "" Then
ReDim Preserve Tbl(0 To J)
Tbl(J) = PlageToit(I)
J = J + 1
End If
Next I
End Select
FeDevis.Range("A" & ligne, _
"A" & UBound(Tbl) + ligne) = _
WorksheetFunction.Transpose(Tbl)
Erase Tbl
J = 0
End If
Next k
End With

Set PlageElec = Nothing
Set PlagePlomb = Nothing
Set PlageToit = Nothing
Set FeSaisie = Nothing
Set FeDevis = Nothing

End Sub

Hervé.

"oceanef" a écrit dans le message news:

Re-bonsoir Hervé,

Cette macro est fantastique sur du texte rentré en dur par contre elle ne
fonctionne pas quand le texte de la feuille saisie de A10 à A69 est rentré
via des formules. Erreur d'exécution 1004 "pas de cellules
correspondantes"

et le débogueur se met sur Set PlageCopie=plageElec....
Je pense qu'il ne reconnaît pas les cellules avec des formules!
C'est grave docteur? Cela se soigne?

Océane




"Hervé" a écrit dans le message de news:
uYR%
Salut Océane,
Je ne sais pas si j'ai bien compris, mais teste ceci et dis moi si ça
convient :

Sub Macro1()
Dim FeSaisie As Worksheet
Dim FeDevis As Worksheet
Dim k As Long, ligne As Long
Dim PlageElec As Range
Dim PlagePlomb As Range
Dim PlageToit As Range
Dim PlageCopie As Range

Set FeSaisie = Worksheets("saisie")
Set FeDevis = Worksheets("devis")

With FeSaisie
Set PlageElec = .[A10:A29]
Set PlagePlomb = .[A30:A49]
Set PlageToit = .[A50:A69]
For k = 1 To 3
If .Range("B" & k) > 0 Then
ligne = FeDevis.Range("A65536").End(3).Row + 2
Select Case k
Case 1
Set PlageCopie = PlageElec.SpecialCells(2)
Case 2
Set PlageCopie = PlagePlomb.SpecialCells(2)
Case 3
Set PlageCopie = PlageToit.SpecialCells(2)
End Select
PlageCopie.Copy FeDevis.Range("A" & ligne)
End If
Next k
End With

Set PlageCopie = Nothing
Set PlageElec = Nothing
Set PlagePlomb = Nothing
Set PlageToit = Nothing
Set FeSaisie = Nothing
Set FeDevis = Nothing

End Sub

Hervé

"oceanef" a écrit dans le message news:

Bonjour à tous,

J'ai la macro çi-dessous que je voudrais faire évoluer :

Sub Macro1()
For k = 1 To [Lookup(9^9,saisie!B:B)]
If Sheets("saisie").Cells(k, 2) > 0 Then
For B = k * 10 To k * 10 + 10
If Sheets("saisie").Cells(B, 1) <> "" Then
ligne = ligne + 1
Sheets("devis").Cells(ligne, 1) = Sheets("saisie").Cells(B, 1)
End If
Next
End If
Next
End Sub

Cette macro me recopie, dans ma feuille devis, le texte contenu dans ma
feuille "saisie" à partir de la ligne10 si la valeur de B1(dans feuille
saisie) est sup à 0.

Dans feuille "saisie" j'ai 3 critères:
A1: ELECTRICITE B1: formule de calcul qui donne résultat
A2: PLOMBERIE B2: formule de calcul qui donne résultat
A3: TOITURE B3: formule de calcul qui donne résultat

A10:ELECTICITE
A11 à A29:plusieurs lignes de textes variables (on peut avoir 15 lignes
ou
seulement 5 lignes et certaines sont vides)
A30:PLOMBERIE
A31 à A49: plusieurs lignes de textes variables (on peut avoir 15
lignes



ou
seulement 5 lignes et certaines sont vides)
A50:TOITURE
A51 à A69: plusieurs lignes de textes variables (on peut avoir 15
lignes



ou
seulement 5 lignes et certaines sont vides)

La macro me recopie, dans ma feuille devis, de la ligne A10+10lignes
non



vides+ encore 10 lignes non vides. Du coup je me retrouve avec des
doublons

et la catégorie "TOITURE" non prise.

Je souhaiterais, que la macro ne résonne pas en quantité de lignes mais
à



chaque changement de critères.

EX: Si (B1 >à 0 alors recopie et insère texte (sans les lignes vides)
de



A10
à A29 (+ saute une ligne pour aérer avec le texte suivant)
sinon



rien et teste ligne suivante B2
Si (B2>à 0 alors recopie et insère texte (sans les lignes vides)
de
A30 à A49(+saute une ligne pour aérer avec le texte suivant) sinon rien
et
teste ligne suivante B3
Si(B3>à 0 alors recopie et insère texte (sans les lignes vides)
de



A50
à A69 (+saute une ligne pour aérer avec le texte suivant) sinon rien.

merci
océane