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

COPIER COLLER les cellules non-vides

7 réponses
Avatar
Sunburn
Bonjour,
je voudrais pouvoir coller sur la feuille "GA1" à partir de la cellule "B4",
les celulles non vides qui se trouvent sur la page "C" sur la plage B14:M49.
Et après, même opération à la suite de ma feuille "GA1", pour les cellules
de la page "C" plage B234:M269.

Je vous remecie.
Yann

7 réponses

Avatar
Sunburn
Une petite précision, de taille je pense:
ma plage B14:M49 porte le nom "SYNTH1", et je voudrais utiliser le nom des
plages (car si j'insère des lignes, ma macro ne sera plus fonctionnelle).
De plus, cette plage est colorée, mais je ne veux reprendre que les lignes
ou au moins une cellule n'est pas vide.

J'ai essayé ça, sans réussite totale :
----
Sub SYNTHESE()
Sheets("C").Select
Range("B1:M1").Copy Sheets("G1B").Range("B" &
Sheets("G1B").Range("B65536").End(xlUp).Row + 1)
Sheets("C").Select
Range("B14:M30").Copy Sheets("G1B").Range("B" &
Sheets("G1B").Range("B65536").End(xlUp).Row + 1)
End Sub
------
Merci.Yann


Bonjour,
je voudrais pouvoir coller sur la feuille "GA1" à partir de la cellule "B4",
les celulles non vides qui se trouvent sur la page "C" sur la plage B14:M49.
Et après, même opération à la suite de ma feuille "GA1", pour les cellules
de la page "C" plage B234:M269.

Je vous remecie.
Yann


Avatar
FFO
Salut à toi
Comment recopie t'on chaque cellule non vide :

En ligne ???
n = 0
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next

En colonne ???
n = 4
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next

à partir de B4 de la feuille "GA1"

Espérant avoir répondu à ton attente



Bonjour,
je voudrais pouvoir coller sur la feuille "GA1" à partir de la cellule "B4",
les celulles non vides qui se trouvent sur la page "C" sur la plage B14:M49.
Et après, même opération à la suite de ma feuille "GA1", pour les cellules
de la page "C" plage B234:M269.

Je vous remecie.
Yann


Avatar
Sunburn
Hello
en fait, je voudrais coller la ligne entière dont l'une de ses cellules
serait non vide, au sein de ma zone identifiée SYNTH1.

Voilà, si je suis plus compréhensible.
Merci.
Yann


Salut à toi
Comment recopie t'on chaque cellule non vide :

En ligne ???
n = 0
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next

En colonne ???
n = 4
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next

à partir de B4 de la feuille "GA1"

Espérant avoir répondu à ton attente



Bonjour,
je voudrais pouvoir coller sur la feuille "GA1" à partir de la cellule "B4",
les celulles non vides qui se trouvent sur la page "C" sur la plage B14:M49.
Et après, même opération à la suite de ma feuille "GA1", pour les cellules
de la page "C" plage B234:M269.

Je vous remecie.
Yann




Avatar
FFO
Rebonjours à toi
Ce n'est pas ce que j'avais compris dans ton premier message
Tu semblais vouloir mettre dans une feuille les cellules non vides d'une plage
Si je comprends tu souhaites plutôt ramener les lignes non vide de cette
plage dans cette feuille à partir de la cellule B4
Je te propose d'abord de ramener toutes les lignes
Puis de réaliser un tri pour mettre les lignes vides à la fin
et de coller la suite à partir de ces lignes vides avec le même déroulement

Le code :

GA1.Range("B4", "M39").Value = C.Range("B14", "M49").Value
Sheets("GA1").Select
Range("B4", "M39").Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B39").Select
Do While ActiveCell.End(xlToRight).Address = Range("IV" &
ActiveCell.Row).Address
ActiveCell.Offset(-1, 0).Select
Loop
Ligne = ActiveCell.Row
Do While ActiveCell.Value = ""
If ActiveCell.End(xlToRight).Address = Range("IV" & ActiveCell.Row).Address
Then
ActiveCell.EntireRow.Delete
Ligne = Ligne - 1
End If
ActiveCell.Offset(-1, 0).Select
Loop
GA1.Range("B" & Ligne, "M" & ActiveCell.Row + 35).Value = C.Range("B234",
"M269").Value
Sheets("GA1").Select
Range(ActiveCell, "M" & ActiveCell.Row + 35).Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Celà devrait faire
Dis moi !!!!!



Hello
en fait, je voudrais coller la ligne entière dont l'une de ses cellules
serait non vide, au sein de ma zone identifiée SYNTH1.

Voilà, si je suis plus compréhensible.
Merci.
Yann


Salut à toi
Comment recopie t'on chaque cellule non vide :

En ligne ???
n = 0
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next

En colonne ???
n = 4
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next

à partir de B4 de la feuille "GA1"

Espérant avoir répondu à ton attente



Bonjour,
je voudrais pouvoir coller sur la feuille "GA1" à partir de la cellule "B4",
les celulles non vides qui se trouvent sur la page "C" sur la plage B14:M49.
Et après, même opération à la suite de ma feuille "GA1", pour les cellules
de la page "C" plage B234:M269.

Je vous remecie.
Yann






Avatar
FFO
Bonsoir à toi
Aprés réflection le code proposé a quelques imperfections
Je te propose en lieu et place celui-ci qui devrait mieux convenir :

Sheets("GA1").Range("B4", "M39").Value = Sheets("C").Range("B14", "M49").Value
Sheets("GA1").Select
Range("B4", "M39").Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B39").Select
Do While ActiveCell.End(xlToRight).Address = Range("IV" &
ActiveCell.Row).Address
ActiveCell.Offset(-1, 0).Select
Loop
Ligne = ActiveCell.Offset(1, 0).Row
Do While ActiveCell.Value = ""
If ActiveCell.End(xlToRight).Address = Range("IV" & ActiveCell.Row).Address
Then
ActiveCell.EntireRow.Delete
Ligne = Ligne - 1
End If
ActiveCell.Offset(-1, 0).Select
Loop
Sheets("GA1").Range("B" & Ligne, "M" & ActiveCell.Row + 35).Value =
Sheets("C").Range("B234", "M269").Value
Sheets("GA1").Select
Range(ActiveCell, "M" & ActiveCell.Row + 35).Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Dis moi !!!


Hello
en fait, je voudrais coller la ligne entière dont l'une de ses cellules
serait non vide, au sein de ma zone identifiée SYNTH1.

Voilà, si je suis plus compréhensible.
Merci.
Yann


Salut à toi
Comment recopie t'on chaque cellule non vide :

En ligne ???
n = 0
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next

En colonne ???
n = 4
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next

à partir de B4 de la feuille "GA1"

Espérant avoir répondu à ton attente



Bonjour,
je voudrais pouvoir coller sur la feuille "GA1" à partir de la cellule "B4",
les celulles non vides qui se trouvent sur la page "C" sur la plage B14:M49.
Et après, même opération à la suite de ma feuille "GA1", pour les cellules
de la page "C" plage B234:M269.

Je vous remecie.
Yann






Avatar
Sunburn
Salut
Merci pour le code, mais il plante après le "End If"
ActiveCell.Offset(-1, 0).Select

mais je ne vois pas pourquoi.
D'autre part, peut-on mettre le nom d'une plage (Par exemple, les plages
nommées SYNTH1, SYNTH2, etc... (j'en ai 9 en tout)

merci


Bonsoir à toi
Aprés réflection le code proposé a quelques imperfections
Je te propose en lieu et place celui-ci qui devrait mieux convenir :

Sheets("GA1").Range("B4", "M39").Value = Sheets("C").Range("B14", "M49").Value
Sheets("GA1").Select
Range("B4", "M39").Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B39").Select
Do While ActiveCell.End(xlToRight).Address = Range("IV" &
ActiveCell.Row).Address
ActiveCell.Offset(-1, 0).Select
Loop
Ligne = ActiveCell.Offset(1, 0).Row
Do While ActiveCell.Value = ""
If ActiveCell.End(xlToRight).Address = Range("IV" & ActiveCell.Row).Address
Then
ActiveCell.EntireRow.Delete
Ligne = Ligne - 1
End If
ActiveCell.Offset(-1, 0).Select
Loop
Sheets("GA1").Range("B" & Ligne, "M" & ActiveCell.Row + 35).Value =
Sheets("C").Range("B234", "M269").Value
Sheets("GA1").Select
Range(ActiveCell, "M" & ActiveCell.Row + 35).Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Dis moi !!!


Hello
en fait, je voudrais coller la ligne entière dont l'une de ses cellules
serait non vide, au sein de ma zone identifiée SYNTH1.

Voilà, si je suis plus compréhensible.
Merci.
Yann


Salut à toi
Comment recopie t'on chaque cellule non vide :

En ligne ???
n = 0
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next

En colonne ???
n = 4
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next

à partir de B4 de la feuille "GA1"

Espérant avoir répondu à ton attente



Bonjour,
je voudrais pouvoir coller sur la feuille "GA1" à partir de la cellule "B4",
les celulles non vides qui se trouvent sur la page "C" sur la plage B14:M49.
Et après, même opération à la suite de ma feuille "GA1", pour les cellules
de la page "C" plage B234:M269.

Je vous remecie.
Yann








Avatar
FFO
Rebonjour à toi
Si mon code Bug c'est que tu as du l'essayer à vide sans donnée
Ce qu'il fait qu'il se retrouve dans une situation anormale où la cellule
active est positionné sur une cellule où elle n'aurait jamais du être si les
données étaient présentes en l'occurence la cellule B1 et le code cherche à
la déplacer vers le haut :

ActiveCell.Offset(-1, 0).Select

Pour palier malgrés tout à cette situation je l'ai corrigé comme suit :

Plage1 = Sheets("C").Range("B14", "M49").Value
Plage2 = Sheets("C").Range("B234", "M269").Value

Sheets("GA1").Range("B4", "M39").Value = Plage1
Sheets("GA1").Select
Range("B4", "M39").Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B39").Select
Do While ActiveCell.End(xlToRight).Address = Range("IV" &
ActiveCell.Row).Address And ActiveCell.Address > Range("B1").Address
ActiveCell.Offset(-1, 0).Select
Loop
Ligne = ActiveCell.Offset(1, 0).Row
Do While ActiveCell.Value = "" And ActiveCell.Address > Range("B3").Address
If ActiveCell.End(xlToRight).Address = Range("IV" & ActiveCell.Row).Address
Then
ActiveCell.EntireRow.Delete
Ligne = Ligne - 1
End If
ActiveCell.Offset(-1, 0).Select
Loop
Sheets("GA1").Range("B" & Ligne, "M" & ActiveCell.Row + 35).Value = Plage2
Sheets("GA1").Select
Range(ActiveCell, "M" & ActiveCell.Row + 35).Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B" & ActiveCell.Row + 35).Select
Do While ActiveCell.End(xlToRight).Address = Range("IV" &
ActiveCell.Row).Address And ActiveCell.Address > Range("B3").Address
ActiveCell.Offset(-1, 0).Select
Loop
Ligne = ActiveCell.Offset(1, 0).Row
Do While ActiveCell.Value = "" And ActiveCell.Address > Range("B" & Ligne -
1).Address
If ActiveCell.End(xlToRight).Address = Range("IV" & ActiveCell.Row).Address
Then
ActiveCell.EntireRow.Delete
Ligne = Ligne - 1
End If
ActiveCell.Offset(-1, 0).Select
Loop

Tu peux définir tes plages avec les lignes :

Plage1 = Sheets("C").Range("B14", "M49").Value
Plage2 = Sheets("C").Range("B234", "M269").Value


Ne changes pas le nom mais actualises les cellules à prendre en compte :

Range("B14", "M49")
Range("B234", "M269")

Si une plage n'est pas utilisée mets une cote devant la ligne correspondante
comme ceci pour la Plage2 :

Plage1 = Sheets("C").Range("B14", "M49").Value
'Plage2 = Sheets("C").Range("B234", "M269").Value


J'espère ainsi que celà te conviendra
Dis moi !!!




Salut
Merci pour le code, mais il plante après le "End If"
ActiveCell.Offset(-1, 0).Select

mais je ne vois pas pourquoi.
D'autre part, peut-on mettre le nom d'une plage (Par exemple, les plages
nommées SYNTH1, SYNTH2, etc... (j'en ai 9 en tout)

merci


Bonsoir à toi
Aprés réflection le code proposé a quelques imperfections
Je te propose en lieu et place celui-ci qui devrait mieux convenir :

Sheets("GA1").Range("B4", "M39").Value = Sheets("C").Range("B14", "M49").Value
Sheets("GA1").Select
Range("B4", "M39").Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B39").Select
Do While ActiveCell.End(xlToRight).Address = Range("IV" &
ActiveCell.Row).Address
ActiveCell.Offset(-1, 0).Select
Loop
Ligne = ActiveCell.Offset(1, 0).Row
Do While ActiveCell.Value = ""
If ActiveCell.End(xlToRight).Address = Range("IV" & ActiveCell.Row).Address
Then
ActiveCell.EntireRow.Delete
Ligne = Ligne - 1
End If
ActiveCell.Offset(-1, 0).Select
Loop
Sheets("GA1").Range("B" & Ligne, "M" & ActiveCell.Row + 35).Value =
Sheets("C").Range("B234", "M269").Value
Sheets("GA1").Select
Range(ActiveCell, "M" & ActiveCell.Row + 35).Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Dis moi !!!


Hello
en fait, je voudrais coller la ligne entière dont l'une de ses cellules
serait non vide, au sein de ma zone identifiée SYNTH1.

Voilà, si je suis plus compréhensible.
Merci.
Yann


Salut à toi
Comment recopie t'on chaque cellule non vide :

En ligne ???
n = 0
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B4").offset(0,n) = c
n = n + 1
End If
Next

En colonne ???
n = 4
For Each c In Worksheets("C").Range("B14", "M49")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next
For Each c In Worksheets("C").Range("B234", "M269")
If c <> "" Then
GA1.Range("B" & n) = c
n = n + 1
End If
Next

à partir de B4 de la feuille "GA1"

Espérant avoir répondu à ton attente



Bonjour,
je voudrais pouvoir coller sur la feuille "GA1" à partir de la cellule "B4",
les celulles non vides qui se trouvent sur la page "C" sur la plage B14:M49.
Et après, même opération à la suite de ma feuille "GA1", pour les cellules
de la page "C" plage B234:M269.

Je vous remecie.
Yann