Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Urgent - Macro avec boucle et fonction SI

9 réponses
Avatar
JeanPi37
bonjour à tous,

Je bute depuis plusieurs jour sur le problème suivant :
Utiliser une macro pour récupérer les valeurs de cellules en ligne d'une
feuille et les coller en colonne dans la feuille 2.

Tout va bien pour les boucles For / Next imbriquées.
Tout va bien aussi si je récupère simplement la valeur.
Mais, comme certaines cellules de la feuille 1 sont vides, le résultat de la
fonction est alors 0.
Pour voir un "blanc", j'essaie d'utiliser - sans succès - une fonction SI
dans la macro.

voici ce que ça donne.
Si quelqu'un à une idée géniale pour résoudre le problème, je suis preneur.

Merci d'avance

Jean PI
---------------------------------------------------------------------------------------------------------------------

ig = 5
For i = 1 To 10

For j = 2 To 11
' Ici, cela fonctionne --> Cells(lig, 2).Value = "='Feuil1'!R" &
valproc & "C" & j & ""

MsgBox "='Feuil1'!R" & valproc & "C" & j & ""
Affiche ='Feuil1'!R6C2 (donc ce qui est attendu)

La cellule prend à chaque fois la valeur de la cellule de la Feuil1,
mais elle prend la valeur 0 si la cellule d'origine est vide!

Pour résoudre cela, je voudrais utiliser une fonction SI.

Après quelques test, j'obtiens ceci en affichage:

MsgBox "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
soit bien : =si('Feuil1'!R6C2<>"";'Feuil1'!R6C2;""), pour la première ligne

Mais quand j'applique la formule :
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j &
"<>"""";" & "'Feuil1'!R" & valproc & "C" & j & "; """")"

J'obtiens :
--------------------------------------------
Erreur d'exécution '1004':

Erreur défnie par l'application ou par l'objet

Fin / Débogage / Aide
--------------------------------------------
d'ou vient l'erreur SVP ?
Merci de votre aide "rapide" :) car j'ai 2000 cellules à modifier !

Suite de la macro :

Select Case j
Case 2
Proc = lig - 2
Cells(Proc, 3).Value = "='Feuil1'!R" & valproc & "C1"
Case Else
End Select

lig = lig + 1

Next j

' Traitement des Processus suivants
' ---------------------------------
lig = lig + 5
If lig <= 140 Then Cells(lig - 1, 2).Value = "SP"

valproc = valproc + 1
Next i
---------------------------------------------------------------------------------------------------------------------
Fin

9 réponses

Avatar
Jacky
Bonjour,
.... récupérer les valeurs de cellules en ligne d'une feuille et les coller
en colonne dans la feuille 2.


Si j'ai bien compris.......
Ceci récupère les cellules A1:J1 de la feuille 1 (ligne 1)
et colle dans feuille 2 A2:A11 (colonne A)
'------------
Sub jj()
Sheets("Feuil1").Range("A1:J1").Copy
Sheets("Feuil2").[a2].PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:úlse, Transpose:=True
Application.CutCopyMode = False
End Sub
'-----------

--
Salutations
JJ


"JeanPi37" a écrit dans le message de news:
%
bonjour à tous,

Je bute depuis plusieurs jour sur le problème suivant :
Utiliser une macro pour récupérer les valeurs de cellules en ligne d'une
feuille et les coller en colonne dans la feuille 2.

Tout va bien pour les boucles For / Next imbriquées.
Tout va bien aussi si je récupère simplement la valeur.
Mais, comme certaines cellules de la feuille 1 sont vides, le résultat de
la fonction est alors 0.
Pour voir un "blanc", j'essaie d'utiliser - sans succès - une fonction SI
dans la macro.

voici ce que ça donne.
Si quelqu'un à une idée géniale pour résoudre le problème, je suis
preneur.

Merci d'avance

Jean PI
---------------------------------------------------------------------------------------------------------------------

ig = 5
For i = 1 To 10

For j = 2 To 11
' Ici, cela fonctionne --> Cells(lig, 2).Value = "='Feuil1'!R" &
valproc & "C" & j & ""

MsgBox "='Feuil1'!R" & valproc & "C" & j & ""
Affiche ='Feuil1'!R6C2 (donc ce qui est attendu)

La cellule prend à chaque fois la valeur de la cellule de la Feuil1,
mais elle prend la valeur 0 si la cellule d'origine est vide!

Pour résoudre cela, je voudrais utiliser une fonction SI.

Après quelques test, j'obtiens ceci en affichage:

MsgBox "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
soit bien : =si('Feuil1'!R6C2<>"";'Feuil1'!R6C2;""), pour la première
ligne

Mais quand j'applique la formule :
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j &
"<>"""";" & "'Feuil1'!R" & valproc & "C" & j & "; """")"

J'obtiens :
--------------------------------------------
Erreur d'exécution '1004':

Erreur défnie par l'application ou par l'objet

Fin / Débogage / Aide
--------------------------------------------
d'ou vient l'erreur SVP ?
Merci de votre aide "rapide" :) car j'ai 2000 cellules à modifier !

Suite de la macro :

Select Case j
Case 2
Proc = lig - 2
Cells(Proc, 3).Value = "='Feuil1'!R" & valproc & "C1"
Case Else
End Select

lig = lig + 1

Next j

' Traitement des Processus suivants
' ---------------------------------
lig = lig + 5
If lig <= 140 Then Cells(lig - 1, 2).Value = "SP"

valproc = valproc + 1
Next i
---------------------------------------------------------------------------------------------------------------------
Fin


Avatar
LSteph
Urgent est mort depuis longtemps!

--
lSteph

JeanPi37 a écrit :
bonjour à tous,

Je bute depuis plusieurs jour sur le problème suivant :
Utiliser une macro pour récupérer les valeurs de cellules en ligne d'une
feuille et les coller en colonne dans la feuille 2.

Tout va bien pour les boucles For / Next imbriquées.
Tout va bien aussi si je récupère simplement la valeur.
Mais, comme certaines cellules de la feuille 1 sont vides, le résultat
de la fonction est alors 0.
Pour voir un "blanc", j'essaie d'utiliser - sans succès - une fonction
SI dans la macro.

voici ce que ça donne.
Si quelqu'un à une idée géniale pour résoudre le problème, je suis preneur.

Merci d'avance

Jean PI
---------------------------------------------------------------------------------------------------------------------


ig = 5
For i = 1 To 10

For j = 2 To 11
' Ici, cela fonctionne --> Cells(lig, 2).Value = "='Feuil1'!R" &
valproc & "C" & j & ""

MsgBox "='Feuil1'!R" & valproc & "C" & j & ""
Affiche ='Feuil1'!R6C2 (donc ce qui est attendu)

La cellule prend à chaque fois la valeur de la cellule de la Feuil1,
mais elle prend la valeur 0 si la cellule d'origine est vide!

Pour résoudre cela, je voudrais utiliser une fonction SI.

Après quelques test, j'obtiens ceci en affichage:

MsgBox "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
soit bien : =si('Feuil1'!R6C2<>"";'Feuil1'!R6C2;""), pour la première ligne

Mais quand j'applique la formule :
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j &
"<>"""";" & "'Feuil1'!R" & valproc & "C" & j & "; """")"

J'obtiens :
--------------------------------------------
Erreur d'exécution '1004':

Erreur défnie par l'application ou par l'objet

Fin / Débogage / Aide
--------------------------------------------
d'ou vient l'erreur SVP ?
Merci de votre aide "rapide" :) car j'ai 2000 cellules à modifier !

Suite de la macro :

Select Case j
Case 2
Proc = lig - 2
Cells(Proc, 3).Value = "='Feuil1'!R" & valproc & "C1"
Case Else
End Select

lig = lig + 1

Next j

' Traitement des Processus suivants
' ---------------------------------
lig = lig + 5
If lig <= 140 Then Cells(lig - 1, 2).Value = "SP"

valproc = valproc + 1
Next i
---------------------------------------------------------------------------------------------------------------------

Fin


Avatar
JeanPi37
Merci Jacky pour ton aide précieuse.

je n'ai plus qu'à mettre ta solution dans ma boucle et je pourrai faire la
feuille d'un coup.

c'est super et... pourquoi faire simple quand on peut faire compliqué :)

Cordialement

Jean Pi


"Jacky" a écrit dans le message de
news:
Bonjour,
.... récupérer les valeurs de cellules en ligne d'une feuille et les
coller en colonne dans la feuille 2.


Si j'ai bien compris.......
Ceci récupère les cellules A1:J1 de la feuille 1 (ligne 1)
et colle dans feuille 2 A2:A11 (colonne A)
'------------
Sub jj()
Sheets("Feuil1").Range("A1:J1").Copy
Sheets("Feuil2").[a2].PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:úlse, Transpose:=True
Application.CutCopyMode = False
End Sub
'-----------

--
Salutations
JJ


"JeanPi37" a écrit dans le message de
news: %
bonjour à tous,

Je bute depuis plusieurs jour sur le problème suivant :
Utiliser une macro pour récupérer les valeurs de cellules en ligne d'une
feuille et les coller en colonne dans la feuille 2.

Tout va bien pour les boucles For / Next imbriquées.
Tout va bien aussi si je récupère simplement la valeur.
Mais, comme certaines cellules de la feuille 1 sont vides, le résultat de
la fonction est alors 0.
Pour voir un "blanc", j'essaie d'utiliser - sans succès - une fonction SI
dans la macro.

voici ce que ça donne.
Si quelqu'un à une idée géniale pour résoudre le problème, je suis
preneur.

Merci d'avance

Jean PI
---------------------------------------------------------------------------------------------------------------------

ig = 5
For i = 1 To 10

For j = 2 To 11
' Ici, cela fonctionne --> Cells(lig, 2).Value = "='Feuil1'!R" &
valproc & "C" & j & ""

MsgBox "='Feuil1'!R" & valproc & "C" & j & ""
Affiche ='Feuil1'!R6C2 (donc ce qui est attendu)

La cellule prend à chaque fois la valeur de la cellule de la Feuil1,
mais elle prend la valeur 0 si la cellule d'origine est vide!

Pour résoudre cela, je voudrais utiliser une fonction SI.

Après quelques test, j'obtiens ceci en affichage:

MsgBox "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
soit bien : =si('Feuil1'!R6C2<>"";'Feuil1'!R6C2;""), pour la première
ligne

Mais quand j'applique la formule :
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j &
"<>"""";" & "'Feuil1'!R" & valproc & "C" & j & "; """")"

J'obtiens :
--------------------------------------------
Erreur d'exécution '1004':

Erreur défnie par l'application ou par l'objet

Fin / Débogage / Aide
--------------------------------------------
d'ou vient l'erreur SVP ?
Merci de votre aide "rapide" :) car j'ai 2000 cellules à modifier !

Suite de la macro :

Select Case j
Case 2
Proc = lig - 2
Cells(Proc, 3).Value = "='Feuil1'!R" & valproc & "C1"
Case Else
End Select

lig = lig + 1

Next j

' Traitement des Processus suivants
' ---------------------------------
lig = lig + 5
If lig <= 140 Then Cells(lig - 1, 2).Value = "SP"

valproc = valproc + 1
Next i
---------------------------------------------------------------------------------------------------------------------
Fin







Avatar
JeanPi37
Jacky (et tout autre lecteur)

Je viens de tester
Effectivement cela fonctionne bien mais ça ne correspond pas à ce dont j'ai
besoin.
Je veux effectivement une formule qui affiche le contenu de sa cellule de
référence ou rien si cette cellule est vide.
Dans ton exemple, on doit tout refaire à chaque fois. Or ces cellules seront
bloquées après le développement.

La grande question est : pourquoi une fonction simple passe et pas une
fonction SI

Le message d'erreur est peu explicite.

A bientôt j'espère.


Jean Pi




"Jacky" a écrit dans le message de
news:
Bonjour,
.... récupérer les valeurs de cellules en ligne d'une feuille et les
coller en colonne dans la feuille 2.


Si j'ai bien compris.......
Ceci récupère les cellules A1:J1 de la feuille 1 (ligne 1)
et colle dans feuille 2 A2:A11 (colonne A)
'------------
Sub jj()
Sheets("Feuil1").Range("A1:J1").Copy
Sheets("Feuil2").[a2].PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:úlse, Transpose:=True
Application.CutCopyMode = False
End Sub
'-----------

--
Salutations
JJ


"JeanPi37" a écrit dans le message de
news: %
bonjour à tous,

Je bute depuis plusieurs jour sur le problème suivant :
Utiliser une macro pour récupérer les valeurs de cellules en ligne d'une
feuille et les coller en colonne dans la feuille 2.

Tout va bien pour les boucles For / Next imbriquées.
Tout va bien aussi si je récupère simplement la valeur.
Mais, comme certaines cellules de la feuille 1 sont vides, le résultat de
la fonction est alors 0.
Pour voir un "blanc", j'essaie d'utiliser - sans succès - une fonction SI
dans la macro.

voici ce que ça donne.
Si quelqu'un à une idée géniale pour résoudre le problème, je suis
preneur.

Merci d'avance

Jean PI
---------------------------------------------------------------------------------------------------------------------

ig = 5
For i = 1 To 10

For j = 2 To 11
' Ici, cela fonctionne --> Cells(lig, 2).Value = "='Feuil1'!R" &
valproc & "C" & j & ""

MsgBox "='Feuil1'!R" & valproc & "C" & j & ""
Affiche ='Feuil1'!R6C2 (donc ce qui est attendu)

La cellule prend à chaque fois la valeur de la cellule de la Feuil1,
mais elle prend la valeur 0 si la cellule d'origine est vide!

Pour résoudre cela, je voudrais utiliser une fonction SI.

Après quelques test, j'obtiens ceci en affichage:

MsgBox "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
soit bien : =si('Feuil1'!R6C2<>"";'Feuil1'!R6C2;""), pour la première
ligne

Mais quand j'applique la formule :
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j &
"<>"""";" & "'Feuil1'!R" & valproc & "C" & j & "; """")"

J'obtiens :
--------------------------------------------
Erreur d'exécution '1004':

Erreur défnie par l'application ou par l'objet

Fin / Débogage / Aide
--------------------------------------------
d'ou vient l'erreur SVP ?
Merci de votre aide "rapide" :) car j'ai 2000 cellules à modifier !

Suite de la macro :

Select Case j
Case 2
Proc = lig - 2
Cells(Proc, 3).Value = "='Feuil1'!R" & valproc & "C1"
Case Else
End Select

lig = lig + 1

Next j

' Traitement des Processus suivants
' ---------------------------------
lig = lig + 5
If lig <= 140 Then Cells(lig - 1, 2).Value = "SP"

valproc = valproc + 1
Next i
---------------------------------------------------------------------------------------------------------------------
Fin







Avatar
Jacky
Re...
Donne un exemple de l'organisation du fichier et du résultat souhaité

--
Salutations
JJ


"JeanPi37" a écrit dans le message de news:

Jacky (et tout autre lecteur)

Je viens de tester
Effectivement cela fonctionne bien mais ça ne correspond pas à ce dont
j'ai besoin.
Je veux effectivement une formule qui affiche le contenu de sa cellule de
référence ou rien si cette cellule est vide.
Dans ton exemple, on doit tout refaire à chaque fois. Or ces cellules
seront bloquées après le développement.

La grande question est : pourquoi une fonction simple passe et pas une
fonction SI

Le message d'erreur est peu explicite.

A bientôt j'espère.


Jean Pi




"Jacky" a écrit dans le message de
news:
Bonjour,
.... récupérer les valeurs de cellules en ligne d'une feuille et les
coller en colonne dans la feuille 2.


Si j'ai bien compris.......
Ceci récupère les cellules A1:J1 de la feuille 1 (ligne 1)
et colle dans feuille 2 A2:A11 (colonne A)
'------------
Sub jj()
Sheets("Feuil1").Range("A1:J1").Copy
Sheets("Feuil2").[a2].PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:úlse, Transpose:=True
Application.CutCopyMode = False
End Sub
'-----------

--
Salutations
JJ


"JeanPi37" a écrit dans le message de
news: %
bonjour à tous,

Je bute depuis plusieurs jour sur le problème suivant :
Utiliser une macro pour récupérer les valeurs de cellules en ligne d'une
feuille et les coller en colonne dans la feuille 2.

Tout va bien pour les boucles For / Next imbriquées.
Tout va bien aussi si je récupère simplement la valeur.
Mais, comme certaines cellules de la feuille 1 sont vides, le résultat
de la fonction est alors 0.
Pour voir un "blanc", j'essaie d'utiliser - sans succès - une fonction
SI dans la macro.

voici ce que ça donne.
Si quelqu'un à une idée géniale pour résoudre le problème, je suis
preneur.

Merci d'avance

Jean PI
---------------------------------------------------------------------------------------------------------------------

ig = 5
For i = 1 To 10

For j = 2 To 11
' Ici, cela fonctionne --> Cells(lig, 2).Value = "='Feuil1'!R" &
valproc & "C" & j & ""

MsgBox "='Feuil1'!R" & valproc & "C" & j & ""
Affiche ='Feuil1'!R6C2 (donc ce qui est attendu)

La cellule prend à chaque fois la valeur de la cellule de la Feuil1,
mais elle prend la valeur 0 si la cellule d'origine est vide!

Pour résoudre cela, je voudrais utiliser une fonction SI.

Après quelques test, j'obtiens ceci en affichage:

MsgBox "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
soit bien : =si('Feuil1'!R6C2<>"";'Feuil1'!R6C2;""), pour la première
ligne

Mais quand j'applique la formule :
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j &
"<>"""";" & "'Feuil1'!R" & valproc & "C" & j & "; """")"

J'obtiens :
--------------------------------------------
Erreur d'exécution '1004':

Erreur défnie par l'application ou par l'objet

Fin / Débogage / Aide
--------------------------------------------
d'ou vient l'erreur SVP ?
Merci de votre aide "rapide" :) car j'ai 2000 cellules à modifier !

Suite de la macro :

Select Case j
Case 2
Proc = lig - 2
Cells(Proc, 3).Value = "='Feuil1'!R" & valproc & "C1"
Case Else
End Select

lig = lig + 1

Next j

' Traitement des Processus suivants
' ---------------------------------
lig = lig + 5
If lig <= 140 Then Cells(lig - 1, 2).Value = "SP"

valproc = valproc + 1
Next i
---------------------------------------------------------------------------------------------------------------------
Fin










Avatar
lSteph
Bonjour,

Pas besoin de macro!
dans Feuil2 Sélectionner [A2:A11]
puis entrer une fois pour toutes cette formule en matricielle:

=TRANSPOSE(SI(Feuil1!$A$1:$J$1="";"";Feuil1!$A$1:$J$1))

valider par ctrl+maj+entrée

--
lSteph

'------------
Sub jj()
Sheets("Feuil1").Range("A1:J1").Copy
Sheets("Feuil2").[a2].PasteSpecial Paste:=xlPasteAll,
Operation:=xlNone,
SkipBlanks:úlse, Transpose:=True
Application.CutCopyMode = False
End Sub
'-----------



On 8 oct, 02:56, "JeanPi37" wrote:
Jacky (et tout autre lecteur)

Je viens de tester
Effectivement cela fonctionne bien mais ça ne correspond pas à ce don t j'ai
besoin.
Je veux effectivement une formule qui affiche le contenu de sa cellule de
référence ou rien si cette cellule est vide.
Dans ton exemple, on doit tout refaire à chaque fois. Or ces cellules s eront
bloquées après le développement.

La grande question est : pourquoi une fonction simple passe et pas une
fonction SI

Le message d'erreur est peu explicite.

A bientôt j'espère.

Jean Pi

"Jacky" a écrit dans le message denews:uBjdD4EKJHA.5

> Bonjour,
>>.... récupérer les valeurs de cellules en ligne d'une feuille et le s
>>coller en colonne dans la feuille 2.
> Si j'ai bien compris.......
> Ceci récupère les cellules A1:J1 de la feuille 1 (ligne 1)
> et colle dans feuille 2 A2:A11 (colonne A)
> '------------
> Sub jj()
> Sheets("Feuil1").Range("A1:J1").Copy
> Sheets("Feuil2").[a2].PasteSpecial Paste:=xlPasteAll, Operation:=xl None,
> SkipBlanks:úlse, Transpose:=True
> Application.CutCopyMode = False
> End Sub
> '-----------

> --
> Salutations
> JJ

> "JeanPi37" a écrit dans le message de
>news: %23RdH99AKJHA.5__BEGIN_MASK_n#9g02mG7!__...__END_MASK_i?a63jfAD$z_
>> bonjour à tous,

>> Je bute depuis plusieurs jour sur le problème suivant :
>> Utiliser une macro pour récupérer les valeurs de cellules en ligne d'une
>> feuille et les coller en colonne dans la feuille 2.

>> Tout va bien pour les boucles For / Next imbriquées.
>> Tout va bien aussi si je récupère simplement la valeur.
>> Mais, comme certaines cellules de la feuille 1 sont vides, le résult at de
>> la fonction est alors 0.
>> Pour voir un "blanc", j'essaie d'utiliser - sans succès - une foncti on SI
>> dans la macro.

>> voici ce que ça donne.
>> Si quelqu'un à une idée géniale pour résoudre le problème, j e suis
>> preneur.

>> Merci d'avance

>> Jean PI
>> ---------------------------------------------------------------------- -----------------------------------------------

>> ig = 5
>> For i = 1 To 10

>>    For j = 2 To 11
>>        ' Ici, cela fonctionne --> Cells(lig, 2).Value = "= 'Feuil1'!R" &
>> valproc & "C" & j & ""

>> MsgBox "='Feuil1'!R" & valproc & "C" & j & ""
>> Affiche ='Feuil1'!R6C2 (donc ce qui est attendu)

>> La cellule prend à chaque fois la valeur de la cellule de la Feuil1,
>> mais elle prend la valeur 0 si la cellule d'origine est vide!

>> Pour résoudre cela, je voudrais utiliser une fonction SI.

>> Après quelques test, j'obtiens ceci en affichage:

>>        MsgBox "=si('Feuil1'!R" & valproc & "C" & j & "<>"""" ;" &
>> "'Feuil1'!R" & valproc & "C" & j & "; """")"
>> soit bien : =si('Feuil1'!R6C2<>"";'Feuil1'!R6C2;""), pour la premi ère
>> ligne

>> Mais quand j'applique la formule :
>>        Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j &
>> "<>"""";" & "'Feuil1'!R" & valproc & "C" & j & "; """")"

>> J'obtiens :
>> --------------------------------------------
>> Erreur d'exécution '1004':

>> Erreur défnie par l'application ou par l'objet

>> Fin / Débogage / Aide
>> --------------------------------------------
>> d'ou vient l'erreur SVP ?
>> Merci de votre aide "rapide" :) car j'ai 2000 cellules à modifier !

>> Suite de la macro :

>>        Select Case j
>>        Case 2
>>        Proc = lig - 2
>>        Cells(Proc, 3).Value = "='Feuil1'!R" & valproc & "C 1"
>>        Case Else
>>        End Select

>>  lig = lig + 1

>>    Next j

>> ' Traitement des Processus suivants
>> ' ---------------------------------
>> lig = lig + 5
>> If lig <= 140 Then Cells(lig - 1, 2).Value = "SP"

>> valproc = valproc + 1
>> Next i
>> ---------------------------------------------------------------------- -----------------------------------------------
>> Fin


Avatar
JeanPi37
Merci à vous deux.

Effectivement, la formule matricielle fait gagner beaucoup de temps.

Cela dit, pour répondre à Jacky et pour essayer de comprendre ce qui
n'allait pas, voici l'organisation de mon fichier.

Sur la Feuil1, j'ai 20 éléments (Chef) qui en contiennent chacun 10
(Sous-Chef) qui en contiennent eux-mêmes chacun 10 (Employés).
Les Sous-Chefs sont en colonne et les Eployés sont en ligne pour chaque
Sous-Chef.
Ce sont les Employés qui m'intéressent d'abord pour l'automatisation en
macro.
J'ai créé 20 feuilles qui ont chacune 10 x 10 éléments
Dans ma macro, je veux automatiser le remplissage des 10 x 10 cellules avec
ma fameuse fonction SI, et ce dans chacune des 20 feuilles.

A chaque passage, je renseigne d'abord la référence au sous-chef, puis les
références aux 10 employés de mes sous chefs.
Ceci, jusqu'à ce que les 10 sous-chefs et les 100 employés soient renseignés
(et ceci 20 fois).

Donc, je rappelle que dans la boucle (et même pour un seul),
ceci fonctionne :
Cells(lig, 2).Value = "='Feuil1'!R" & valproc & "C" & j & ""

Mais la fonction si
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
Ne fonctionne pas.
Pourtant, l'affichage dans une MsgBox ne montre pas d'erreur.

La fonction SI est-elle incompatible avec .Value ?
Ou bien ais-je une erreur quelque part ?


Merci encore en tout cas puisque la formule matricielle m'aide beaucoup.
Comme cela peut me servir pour cette application ou pour plus tard, si vous
avez la réponse, j'aimerais "ne pas mourir idiot".


Bien à vous.

Jean Pi




"JeanPi37" a écrit dans le message de
news:
Jacky (et tout autre lecteur)

Je viens de tester
Effectivement cela fonctionne bien mais ça ne correspond pas à ce dont
j'ai besoin.
Je veux effectivement une formule qui affiche le contenu de sa cellule de
référence ou rien si cette cellule est vide.
Dans ton exemple, on doit tout refaire à chaque fois. Or ces cellules
seront bloquées après le développement.

La grande question est : pourquoi une fonction simple passe et pas une
fonction SI

Le message d'erreur est peu explicite.

A bientôt j'espère.


Jean Pi




"Jacky" a écrit dans le message de
news:
Bonjour,
.... récupérer les valeurs de cellules en ligne d'une feuille et les
coller en colonne dans la feuille 2.


Si j'ai bien compris.......
Ceci récupère les cellules A1:J1 de la feuille 1 (ligne 1)
et colle dans feuille 2 A2:A11 (colonne A)
'------------
Sub jj()
Sheets("Feuil1").Range("A1:J1").Copy
Sheets("Feuil2").[a2].PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:úlse, Transpose:=True
Application.CutCopyMode = False
End Sub
'-----------

--
Salutations
JJ


"JeanPi37" a écrit dans le message de
news: %
bonjour à tous,

Je bute depuis plusieurs jour sur le problème suivant :
Utiliser une macro pour récupérer les valeurs de cellules en ligne d'une
feuille et les coller en colonne dans la feuille 2.

Tout va bien pour les boucles For / Next imbriquées.
Tout va bien aussi si je récupère simplement la valeur.
Mais, comme certaines cellules de la feuille 1 sont vides, le résultat
de la fonction est alors 0.
Pour voir un "blanc", j'essaie d'utiliser - sans succès - une fonction
SI dans la macro.

voici ce que ça donne.
Si quelqu'un à une idée géniale pour résoudre le problème, je suis
preneur.

Merci d'avance

Jean PI
---------------------------------------------------------------------------------------------------------------------

ig = 5
For i = 1 To 10

For j = 2 To 11
' Ici, cela fonctionne --> Cells(lig, 2).Value = "='Feuil1'!R" &
valproc & "C" & j & ""

MsgBox "='Feuil1'!R" & valproc & "C" & j & ""
Affiche ='Feuil1'!R6C2 (donc ce qui est attendu)

La cellule prend à chaque fois la valeur de la cellule de la Feuil1,
mais elle prend la valeur 0 si la cellule d'origine est vide!

Pour résoudre cela, je voudrais utiliser une fonction SI.

Après quelques test, j'obtiens ceci en affichage:

MsgBox "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
soit bien : =si('Feuil1'!R6C2<>"";'Feuil1'!R6C2;""), pour la première
ligne

Mais quand j'applique la formule :
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j &
"<>"""";" & "'Feuil1'!R" & valproc & "C" & j & "; """")"

J'obtiens :
--------------------------------------------
Erreur d'exécution '1004':

Erreur défnie par l'application ou par l'objet

Fin / Débogage / Aide
--------------------------------------------
d'ou vient l'erreur SVP ?
Merci de votre aide "rapide" :) car j'ai 2000 cellules à modifier !

Suite de la macro :

Select Case j
Case 2
Proc = lig - 2
Cells(Proc, 3).Value = "='Feuil1'!R" & valproc & "C1"
Case Else
End Select

lig = lig + 1

Next j

' Traitement des Processus suivants
' ---------------------------------
lig = lig + 5
If lig <= 140 Then Cells(lig - 1, 2).Value = "SP"

valproc = valproc + 1
Next i
---------------------------------------------------------------------------------------------------------------------
Fin










Avatar
Jacky
Re...
Ou bien ais-je une erreur quelque part ?


valproc = ?????
En restant dans les ref "R1C1"
Il cause en anglais vba. (Si=If et le point virgule= virgule)
Cells(lig, 2).FormulaR1C1 = "=If('Feuil1'!R" & valproc & "C" & j &
"<>""""," & "'Feuil1'!R" & valproc & "C" & j & ", """")"

--
Salutations
JJ


"JeanPi37" a écrit dans le message de news:

Merci à vous deux.

Effectivement, la formule matricielle fait gagner beaucoup de temps.

Cela dit, pour répondre à Jacky et pour essayer de comprendre ce qui
n'allait pas, voici l'organisation de mon fichier.

Sur la Feuil1, j'ai 20 éléments (Chef) qui en contiennent chacun 10
(Sous-Chef) qui en contiennent eux-mêmes chacun 10 (Employés).
Les Sous-Chefs sont en colonne et les Eployés sont en ligne pour chaque
Sous-Chef.
Ce sont les Employés qui m'intéressent d'abord pour l'automatisation en
macro.
J'ai créé 20 feuilles qui ont chacune 10 x 10 éléments
Dans ma macro, je veux automatiser le remplissage des 10 x 10 cellules
avec ma fameuse fonction SI, et ce dans chacune des 20 feuilles.

A chaque passage, je renseigne d'abord la référence au sous-chef, puis les
références aux 10 employés de mes sous chefs.
Ceci, jusqu'à ce que les 10 sous-chefs et les 100 employés soient
renseignés (et ceci 20 fois).

Donc, je rappelle que dans la boucle (et même pour un seul),
ceci fonctionne :
Cells(lig, 2).Value = "='Feuil1'!R" & valproc & "C" & j & ""

Mais la fonction si
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
Ne fonctionne pas.
Pourtant, l'affichage dans une MsgBox ne montre pas d'erreur.

La fonction SI est-elle incompatible avec .Value ?
Ou bien ais-je une erreur quelque part ?


Merci encore en tout cas puisque la formule matricielle m'aide beaucoup.
Comme cela peut me servir pour cette application ou pour plus tard, si
vous avez la réponse, j'aimerais "ne pas mourir idiot".


Bien à vous.

Jean Pi




"JeanPi37" a écrit dans le message de
news:
Jacky (et tout autre lecteur)

Je viens de tester
Effectivement cela fonctionne bien mais ça ne correspond pas à ce dont
j'ai besoin.
Je veux effectivement une formule qui affiche le contenu de sa cellule de
référence ou rien si cette cellule est vide.
Dans ton exemple, on doit tout refaire à chaque fois. Or ces cellules
seront bloquées après le développement.

La grande question est : pourquoi une fonction simple passe et pas une
fonction SI

Le message d'erreur est peu explicite.

A bientôt j'espère.


Jean Pi




"Jacky" a écrit dans le message de
news:
Bonjour,
.... récupérer les valeurs de cellules en ligne d'une feuille et les
coller en colonne dans la feuille 2.


Si j'ai bien compris.......
Ceci récupère les cellules A1:J1 de la feuille 1 (ligne 1)
et colle dans feuille 2 A2:A11 (colonne A)
'------------
Sub jj()
Sheets("Feuil1").Range("A1:J1").Copy
Sheets("Feuil2").[a2].PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:úlse, Transpose:=True
Application.CutCopyMode = False
End Sub
'-----------

--
Salutations
JJ


"JeanPi37" a écrit dans le message de
news: %
bonjour à tous,

Je bute depuis plusieurs jour sur le problème suivant :
Utiliser une macro pour récupérer les valeurs de cellules en ligne
d'une feuille et les coller en colonne dans la feuille 2.

Tout va bien pour les boucles For / Next imbriquées.
Tout va bien aussi si je récupère simplement la valeur.
Mais, comme certaines cellules de la feuille 1 sont vides, le résultat
de la fonction est alors 0.
Pour voir un "blanc", j'essaie d'utiliser - sans succès - une fonction
SI dans la macro.

voici ce que ça donne.
Si quelqu'un à une idée géniale pour résoudre le problème, je suis
preneur.

Merci d'avance

Jean PI
---------------------------------------------------------------------------------------------------------------------

ig = 5
For i = 1 To 10

For j = 2 To 11
' Ici, cela fonctionne --> Cells(lig, 2).Value = "='Feuil1'!R" &
valproc & "C" & j & ""

MsgBox "='Feuil1'!R" & valproc & "C" & j & ""
Affiche ='Feuil1'!R6C2 (donc ce qui est attendu)

La cellule prend à chaque fois la valeur de la cellule de la Feuil1,
mais elle prend la valeur 0 si la cellule d'origine est vide!

Pour résoudre cela, je voudrais utiliser une fonction SI.

Après quelques test, j'obtiens ceci en affichage:

MsgBox "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
soit bien : =si('Feuil1'!R6C2<>"";'Feuil1'!R6C2;""), pour la première
ligne

Mais quand j'applique la formule :
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j &
"<>"""";" & "'Feuil1'!R" & valproc & "C" & j & "; """")"

J'obtiens :
--------------------------------------------
Erreur d'exécution '1004':

Erreur défnie par l'application ou par l'objet

Fin / Débogage / Aide
--------------------------------------------
d'ou vient l'erreur SVP ?
Merci de votre aide "rapide" :) car j'ai 2000 cellules à modifier !

Suite de la macro :

Select Case j
Case 2
Proc = lig - 2
Cells(Proc, 3).Value = "='Feuil1'!R" & valproc & "C1"
Case Else
End Select

lig = lig + 1

Next j

' Traitement des Processus suivants
' ---------------------------------
lig = lig + 5
If lig <= 140 Then Cells(lig - 1, 2).Value = "SP"

valproc = valproc + 1
Next i
---------------------------------------------------------------------------------------------------------------------
Fin













Avatar
JeanPi37
Bravo !

C'était effectivement la solution.
J'ai pu finaliser et modifier en une seule exécution l'ensemble des cellules
concernées sur les 20 feuilles.

Encore merci

Jean Pi




"Jacky" a écrit dans le message de
news:ex%23$
Re...
Ou bien ais-je une erreur quelque part ?


valproc = ?????
En restant dans les ref "R1C1"
Il cause en anglais vba. (Si=If et le point virgule= virgule)
Cells(lig, 2).FormulaR1C1 = "=If('Feuil1'!R" & valproc & "C" & j &
"<>""""," & "'Feuil1'!R" & valproc & "C" & j & ", """")"

--
Salutations
JJ


"JeanPi37" a écrit dans le message de
news:
Merci à vous deux.

Effectivement, la formule matricielle fait gagner beaucoup de temps.

Cela dit, pour répondre à Jacky et pour essayer de comprendre ce qui
n'allait pas, voici l'organisation de mon fichier.

Sur la Feuil1, j'ai 20 éléments (Chef) qui en contiennent chacun 10
(Sous-Chef) qui en contiennent eux-mêmes chacun 10 (Employés).
Les Sous-Chefs sont en colonne et les Eployés sont en ligne pour chaque
Sous-Chef.
Ce sont les Employés qui m'intéressent d'abord pour l'automatisation en
macro.
J'ai créé 20 feuilles qui ont chacune 10 x 10 éléments
Dans ma macro, je veux automatiser le remplissage des 10 x 10 cellules
avec ma fameuse fonction SI, et ce dans chacune des 20 feuilles.

A chaque passage, je renseigne d'abord la référence au sous-chef, puis
les références aux 10 employés de mes sous chefs.
Ceci, jusqu'à ce que les 10 sous-chefs et les 100 employés soient
renseignés (et ceci 20 fois).

Donc, je rappelle que dans la boucle (et même pour un seul),
ceci fonctionne :
Cells(lig, 2).Value = "='Feuil1'!R" & valproc & "C" & j & ""

Mais la fonction si
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
Ne fonctionne pas.
Pourtant, l'affichage dans une MsgBox ne montre pas d'erreur.

La fonction SI est-elle incompatible avec .Value ?
Ou bien ais-je une erreur quelque part ?


Merci encore en tout cas puisque la formule matricielle m'aide beaucoup.
Comme cela peut me servir pour cette application ou pour plus tard, si
vous avez la réponse, j'aimerais "ne pas mourir idiot".


Bien à vous.

Jean Pi




"JeanPi37" a écrit dans le message de
news:
Jacky (et tout autre lecteur)

Je viens de tester
Effectivement cela fonctionne bien mais ça ne correspond pas à ce dont
j'ai besoin.
Je veux effectivement une formule qui affiche le contenu de sa cellule
de référence ou rien si cette cellule est vide.
Dans ton exemple, on doit tout refaire à chaque fois. Or ces cellules
seront bloquées après le développement.

La grande question est : pourquoi une fonction simple passe et pas une
fonction SI

Le message d'erreur est peu explicite.

A bientôt j'espère.


Jean Pi




"Jacky" a écrit dans le message de
news:
Bonjour,
.... récupérer les valeurs de cellules en ligne d'une feuille et les
coller en colonne dans la feuille 2.


Si j'ai bien compris.......
Ceci récupère les cellules A1:J1 de la feuille 1 (ligne 1)
et colle dans feuille 2 A2:A11 (colonne A)
'------------
Sub jj()
Sheets("Feuil1").Range("A1:J1").Copy
Sheets("Feuil2").[a2].PasteSpecial Paste:=xlPasteAll,
Operation:=xlNone, SkipBlanks:úlse, Transpose:=True
Application.CutCopyMode = False
End Sub
'-----------

--
Salutations
JJ


"JeanPi37" a écrit dans le message de
news: %
bonjour à tous,

Je bute depuis plusieurs jour sur le problème suivant :
Utiliser une macro pour récupérer les valeurs de cellules en ligne
d'une feuille et les coller en colonne dans la feuille 2.

Tout va bien pour les boucles For / Next imbriquées.
Tout va bien aussi si je récupère simplement la valeur.
Mais, comme certaines cellules de la feuille 1 sont vides, le résultat
de la fonction est alors 0.
Pour voir un "blanc", j'essaie d'utiliser - sans succès - une fonction
SI dans la macro.

voici ce que ça donne.
Si quelqu'un à une idée géniale pour résoudre le problème, je suis
preneur.

Merci d'avance

Jean PI
---------------------------------------------------------------------------------------------------------------------

ig = 5
For i = 1 To 10

For j = 2 To 11
' Ici, cela fonctionne --> Cells(lig, 2).Value = "='Feuil1'!R"
& valproc & "C" & j & ""

MsgBox "='Feuil1'!R" & valproc & "C" & j & ""
Affiche ='Feuil1'!R6C2 (donc ce qui est attendu)

La cellule prend à chaque fois la valeur de la cellule de la Feuil1,
mais elle prend la valeur 0 si la cellule d'origine est vide!

Pour résoudre cela, je voudrais utiliser une fonction SI.

Après quelques test, j'obtiens ceci en affichage:

MsgBox "=si('Feuil1'!R" & valproc & "C" & j & "<>"""";" &
"'Feuil1'!R" & valproc & "C" & j & "; """")"
soit bien : =si('Feuil1'!R6C2<>"";'Feuil1'!R6C2;""), pour la première
ligne

Mais quand j'applique la formule :
Cells(lig, 2).Value = "=si('Feuil1'!R" & valproc & "C" & j &
"<>"""";" & "'Feuil1'!R" & valproc & "C" & j & "; """")"

J'obtiens :
--------------------------------------------
Erreur d'exécution '1004':

Erreur défnie par l'application ou par l'objet

Fin / Débogage / Aide
--------------------------------------------
d'ou vient l'erreur SVP ?
Merci de votre aide "rapide" :) car j'ai 2000 cellules à modifier !

Suite de la macro :

Select Case j
Case 2
Proc = lig - 2
Cells(Proc, 3).Value = "='Feuil1'!R" & valproc & "C1"
Case Else
End Select

lig = lig + 1

Next j

' Traitement des Processus suivants
' ---------------------------------
lig = lig + 5
If lig <= 140 Then Cells(lig - 1, 2).Value = "SP"

valproc = valproc + 1
Next i
---------------------------------------------------------------------------------------------------------------------
Fin