Remplace le code du bouton de transfert vers la feuille par celui-ci :
Code:
Private Sub CommandButton2_Click()
Dim k As Integer, Dercol As Byte, Reponse As String
With Sheets("Feuil1")
Reponse = MsgBox("Voulez vous effacer la ligne 1 ?", vbYesNo, "Effacement ligne 1:")
If Reponse = vbYes Then
.Range("D1:IV1").ClearContents
Dercol = IIf(.Range("IV1").End(xlToLeft).Column < 4, 4, .Range("IV1").End(xlToLeft).Column + 1)
For k = 1 To ListView1.ListItems.Count
.Cells(1, Dercol) = ListView1.ListItems(k).Text
.Cells(1, Dercol + 1) = ListView1.ListItems(k).ListSubItems(1).Text
Dercol = Dercol + 2
Next
Else
Dercol = IIf(.Range("IV1").End(xlToLeft).Column < 4, 4, .Range("IV1").End(xlToLeft).Column + 1)
For k = 1 To ListView1.ListItems.Count
.Cells(1, Dercol) = ListView1.ListItems(k).Text
.Cells(1, Dercol + 1) = ListView1.ListItems(k).ListSubItems(1).Text
Dercol = Dercol + 2
Next
End If
End With
ListView1.ListItems.Clear
End Sub
Cela te permet de mettre les données sur la ligne 1 à partir de E1 les unes après les autres en une ou plusieurs fois.
Au cas où j'ai ajouté une MsgBox qui te demande si tu souhaites effacer la première ligne. Si la réponse est "oui", effacement de la ligne 1 et les données sont mises à partir de E1. Si la réponse est "non", les données s'ajoutent à la suite.
salut,
voici le code que j'ai déjà, qu'il faut adapter... comme ça tu pourra mieux comprendre !
Le code de transfère de la listview devrais aller derrière celui-ci car il cherche la première ligne vide et puis il les transfère !
car j'ai fait des essai mais non concluent !!!
mille excuse je suis pas très doué je me lance la dedans et je voudrais arriver au bout!!!
merci
Private Sub CommandButton4_Click()
Dim k As Integer
Application.ScreenUpdating = False
Range("listedata").Activate
En_Colonne = ActiveCell.Column
En_Ligne = ActiveCell.Row + 1
While Not IsEmpty(ActiveCell.Value)
Cells(En_Ligne, En_Colonne).Activate
En_Ligne = En_Ligne + 1
Wend
Pour zipper ton fichier Excel
Cliq droit sur ton bureau ou dans le vide de ton dossier ou ce trouve ton fichier
et dans le contextuel ,tu va sur la ligne Nouveau, et la tu sélectionne Dossier compréssé
aprés tu fait un copier de ton fichier et un coller dans le dossier Compréssé
Si je comprends bien ton code, tu recherches la première ligne vide disponible et tu places tes données en fonction de cette dernière.
Donc est normal que tu commences à la colonne "BB", 1ère colonne de la plage nommée "listedata" ? dans ce cas il y a des données qui sont à l'extérieur de ton tableau.
Pour les continents et les pays d'après ce que tu dis, tu souhaites les mettre en ligne (D1,E1,F1,G1,H1,I1). Cela veut dire que pour une personne il peut y avoir plusieurs continents et pays ?
Peux-tu me dire comment tu veux placer les données.
En attendant voici comment faire pour éviter tous les "Select" qui ne sont pas utiles.
La première ligne de la macro du bouton concerne la déclaration des variables :
Code:
Dim Derlign As Long, k As Byte, Col As Byte
Ensuite tu détermines la 1ère ligne vide et tu affectes la valeur 95 (n° de la colonne CQ) à la variable "Col" comme ceci :
Code:
Derlign = Sheets("Data").Range("[B]D[/B]65536").End(xlUp).Row + 1
Col = 95
Là j'ai pris la colonne D comme colonne de référence car je pense qu'elle sera toujours renseignée.
Ensuite pour renseigner les cellules tu procèdes comme ceci :
Code:
With Sheets("Data")
.Range("B" & Derlign) = cbxa2
.Range("D" & Derlign) = cbxa4
'.../...
End With
Enfin pour les pays et les continents si tu les veux en lignes :
Code:
With ListView2
For k = 1 To .ListItems.Count
Sheets("Data").Cells(Derlign, Col) = .ListItems(k).Text
Sheets("Data").Cells(Derlign, Col + 1) = .ListItems(k).ListSubItems(1).Text
Col = Col + 2
Next
.ListItems.Clear
End With
Attention tout de même, la variable "Col" ne pourra pas avoir une valeur supérieure à 256 (limite du nombre de colonne sous Excel, sauf pour Excel 2007).
voici le code comme tu me la montré il fonctionne sauf la livtview il y a que 1 continent et 1 pays qui par les autre ?
Bien à toi Gérald
Private Sub CommandButton4_Click()
Dim Derlign As Long, k As Byte, Col As Byte 'La première ligne de la macro du bouton concerne la déclaration des variables :
Derlign = Sheets("Data").Range("D65536").End(xlUp).Row + 1 'étermines la 1ère ligne vide et tu affectes la valeur 1 (n° de la colonne a) à la variable "Col" comme ceci :
Col = 1
With Sheets("Data") ' determine les combo a envoyer dans la feuillr data
.Range("e" & Derlign) = cbxa5
.Range("a" & Derlign) = cbxa1
End With
With ListView2
For k = 1 To .ListItems.Count
Sheets("Data").Cells(Derlign, 95) = .ListItems(k).Text
Sheets("Data").Cells(Derlign, 95 + 1) = .ListItems(k).ListSubItems(1).Text
Col = Col + 2
Next
.ListItems.Clear
End With
End Sub
La variable Col doit avoir comme valeur de départ la valeur 95.
La colonne CQ correspond à la 95 ème colonne de la feuille.
Donc remplace Col = 1 par Col = 95 au début du code.
Puis dans le code de la listview il faut remplacer 95 par la variable Col.
Comme ceci:
Code:
With ListView2
For k = 1 To .ListItems.Count
Sheets("Data").Cells(Derlign, Col) = .ListItems(k).Text
Sheets("Data").Cells(Derlign, Col + 1) = .ListItems(k).ListSubItems(1).Text
Col = Col + 2
Next
Dans l'hypothèse où tu places les continents et les pays en ligne.